命令执行漏洞
- 漏洞概述
服务器未对执行的命令进行过滤,用户可随意执行系统命令
PHP的命令执行漏洞主要基于一些函数的参数过滤不足导致,可执行的命令函数有system()、exec()、shell_exec()、passthru()、pcntl_execl()、popen()、proc_open()
若能控制这些函数,可将恶意的系统命令拼接到正常命令中,造成命令执行攻击。
危害:控制整个网站,甚至服务器;继承web服务器的权限,执行系统命令或读写文件;反弹shell。
- 漏洞成因
- 未对用户输入进行过滤或过滤不严。
eg.未过滤&、&&、|、||等连接符
- 系统漏洞造成的命令执行
bash破壳漏洞,该漏洞可以构造环境变量的值来执行具有攻击力的脚本代码,会影响到bash交互的多种应用,如http,ssh,dhcp等
- 调用第三方组件存在代码执行漏洞
典型:wordpress中,可选择imagemagick这个图片处理组件,对用户上传的图片进行处理(默认是imagemagic库)造成命令执行。
另外Java中的命令执行漏洞struts2/ElasticsearchGroovy等很常见
- 漏洞利用
- 常见管道符
- | 将前面命令的结果作为后面命令的输入,cmd1|cmd2
- || cmd1失败则执行cmd2,cmd1成功则不执行cmd2 cmd1 || cmd2
- & 前面和后面命令都要执行,无论前面真假
- && cmd1成功则执行cmd2,cmd1失败则不执行cmd2
cmd1 && cmd2
- ; 多条语句顺序执行时的分隔符
(ps : linux系统支持的管道符多一个分号;)
- 空格过滤
- ${IFS} ($IFS在Linux下表示分隔符,但是如果单纯输入cat$IFS2,bash解释器会把整个IFS2当作变量名,导致输不出结果,若加一个{}就固定了变量名,同理在后面加个$可以起到截断作用)
- %09 (需要PHP环境)
- $IFS$9 ($9只是当前系统shell进程的第九个参数的持有者,它始终为空字符串)
- < > (重定向符绕过)
- 黑名单绕过
- 拼接 a=c;b=at;c=fl;d=ag;$a$b$c$d.txt
- 单引号,双引号 c""at fl’’ag.tx""t
- 反斜线\ c\at fl\ag.tx\t
- $1,$2等和$@ ca$1t fla$@g.txt
- Base64编码 echo"Y2F0IGZsYWc="|base64-d|bash (cat flag)
echo"Y2F0IGZsYWc="|base64-d|sh
`echo"Y2F0IGZsYWc="|base64-d`
``是命令替换,命令替换是指shell可以先执行``中的命令,将输出结果暂时保存,在适当的地方输出
DATE=`date`echo"Date is $DATE"
DATE is xxxxxxxxxxxxx
- 通配符绕过
- ? 可以使用问号代替一个字符。如果输入love?,查找以love开头的字符结尾文件类型的文件,如lovey , lovei
- * 可以使用星号代替零个,单个或多个字符
- 读取文件绕过
由cat第一行开始显示内容,并将所有内容输出
- tac从最后一行倒叙显示内容,并将所有内容输出
- More 根据窗口大小,一页一页的显示文件内容
- tailf类似于tail -f
- less和more类似,但它可以往前翻页,而且可以搜索字符
- head只显示头几行
- tail只显示最后几行
- nl类似于cat -n,显示时输出行号
6.过滤管道符,分号,&符号,可在url框中使用url编码来绕过