命令注入检测思路
命令注入发生在应用把用户输入拼接进系统命令并交给操作系统执行时,典型场景是需要调用外部程序的功能:格式转换、图片处理、压缩解压、网络诊断(ping、traceroute 类接口)。验证的关键是判断输入是否进入了命令解析层,而不是业务层:提交一个无害的唯一标记字符串,观察它是否出现在返回内容或输出文件里;无回显时,用多次采样的时间差对比,判断是否触发了额外命令执行。任何验证都只做到证明机制存在,绝不执行写入、下载或外联命令。
基本信息
| 高风险功能 | 格式转换、图片处理、压缩解压、网络诊断类接口 |
|---|---|
| 判断信号 | 回显中出现标记、耗时异常、错误信息结构 |
| 验证原则 | 验证式探测、即停、即记录 |
| 边界 | 不执行写入、下载、反弹类命令 |
| 影响评估 | 容器与宿主机都要纳入评估范围 |
典型使用场景
- 图片与文档转换:调用 ImageMagick、FFmpeg 等外部程序的接口
- 网络诊断:ping、traceroute、nslookup 类工具接口
- 压缩解压:打包下载、批量解压功能
- 系统工具调用:PDF 生成、格式转换、OCR 接口
- 报表导出:调用脚本或命令行工具生成报表
验证流程
验证流程
1. 定位会调用外部程序的功能与参数
2. 提交无害标记字符串,观察回显或输出是否体现
3. 无回显时用多次采样的时间差对比
4. 记录参数、现象与采样数据(脱敏)
5. 立即停止,转向修复建议与复测信号与误判来源
| 信号 | 可能的真实原因 | 如何排除 |
|---|---|---|
| 响应中出现标记 | 命令确实执行了输入 | 用无害标记即可确认,无需危险命令 |
| 响应时间明显变长 | 可能触发了额外执行 | 先排除转码、报表等业务本身耗时 |
| 报错含命令结构 | 参数进入了命令层 | 核对错误文本是否来自系统命令解析 |
| 输出内容异常 | 命令输出被回显或写入文件 | 与正常请求对比输出结构变化 |
严禁在生产环境执行写入、下载、反弹类命令。容器与宿主机都要纳入影响评估,某些命令在容器内执行会影响宿主机资源。
修复视角:避免用字符串拼接构造命令;如需调用外部程序,使用参数数组传参而不经 shell 解析,并对输入做白名单校验。