写在前面:合法学习边界
本文讲解命令注入的原理和防御。请不要在真实系统上构造命令拼接、提权或利用系统命令。所有示例都应在自建靶场、授权测试环境中学习。
一、命令注入的本质
命令注入的本质是:程序把用户输入拼接到系统命令里,操作系统把输入当成命令的一部分执行了。
例如:
| |
如果输入:
| |
就可能变成:
| |
结果是多执行了一条命令。
二、常见触发点
| |
常见危险字符:
| |
还有换行符、反引号、括号等。
三、为什么容易被忽略
很多系统认为“只有管理员才能访问”,所以没有做输入校验。但管理员接口也常被弱口令、SSRF、未授权访问或 XSS 打进来。
命令注入的危害往往比 SQL 注入更直接:
| |
影响与危害
命令注入能造成:
| |
风险等级:严重。
四、防御方法
1. 白名单
优先使用白名单而不是黑名单。
例如只允许 IP 地址:
| |
2. 参数化调用
不要直接拼接 shell 字符串,改用参数数组调用。
3. 最小权限
不要让 Web 服务拥有过高权限。
4. 禁用不必要的命令
不要给普通用户执行敏感命令的能力。
5. 输入校验
限制长度、格式、字符集。
6. 日志与告警
监控异常命令参数、异常进程、异常子进程。
修复
| |
五、报告中的正确写法
示例:
| |
六、小结
命令注入的核心是“输入进入了命令执行路径”。防御时要优先使用白名单和参数化调用,而不是依赖简单替换。