常见漏洞验证121 条

命令注入检测思路

应用把输入拼接进系统命令执行时会产生命令注入;验证以无害标记与时间差信号为主,不执行任何读写或外联动作。

命令注入检测思路

命令注入发生在应用把用户输入拼接进系统命令并交给操作系统执行时,典型场景是需要调用外部程序的功能:格式转换、图片处理、压缩解压、网络诊断(ping、traceroute 类接口)。验证的关键是判断输入是否进入了命令解析层,而不是业务层:提交一个无害的唯一标记字符串,观察它是否出现在返回内容或输出文件里;无回显时,用多次采样的时间差对比,判断是否触发了额外命令执行。任何验证都只做到证明机制存在,绝不执行写入、下载或外联命令。

基本信息

高风险功能格式转换、图片处理、压缩解压、网络诊断类接口
判断信号回显中出现标记、耗时异常、错误信息结构
验证原则验证式探测、即停、即记录
边界不执行写入、下载、反弹类命令
影响评估容器与宿主机都要纳入评估范围

典型使用场景

  • 图片与文档转换:调用 ImageMagick、FFmpeg 等外部程序的接口
  • 网络诊断:ping、traceroute、nslookup 类工具接口
  • 压缩解压:打包下载、批量解压功能
  • 系统工具调用:PDF 生成、格式转换、OCR 接口
  • 报表导出:调用脚本或命令行工具生成报表

验证流程

验证流程
1. 定位会调用外部程序的功能与参数
2. 提交无害标记字符串,观察回显或输出是否体现
3. 无回显时用多次采样的时间差对比
4. 记录参数、现象与采样数据(脱敏)
5. 立即停止,转向修复建议与复测

信号与误判来源

信号可能的真实原因如何排除
响应中出现标记命令确实执行了输入用无害标记即可确认,无需危险命令
响应时间明显变长可能触发了额外执行先排除转码、报表等业务本身耗时
报错含命令结构参数进入了命令层核对错误文本是否来自系统命令解析
输出内容异常命令输出被回显或写入文件与正常请求对比输出结构变化
严禁在生产环境执行写入、下载、反弹类命令。容器与宿主机都要纳入影响评估,某些命令在容器内执行会影响宿主机资源。
修复视角:避免用字符串拼接构造命令;如需调用外部程序,使用参数数组传参而不经 shell 解析,并对输入做白名单校验。

易错点

  • 把业务本身的长耗时(转码、报表)当注入信号,产生误报
  • 忽略 Windows 与 Linux 命令差异导致误判,两边的分隔符与命令名都不同
  • 在生产环境执行危险命令验证,超出边界并可能造成实际影响
  • 只测单一参数,忽略请求头或文件名等也会进入命令行拼接的位置

数据来源与参考

  • OWASP WSTG WSTG-INPV-12
  • CWE-78(OS Command Injection)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌