DVWA-命令执行
原理:
web服务器没有对用户提交的数据进行严格的过滤,造成调用操作系统的命令或者在操作系统恶意拼接拼接命令,以达到攻击者的目的。
1.将DVWA的级别设置为low
1.2查看源代码,可以看到没有对参数做任何防御处理措施,直接进行执行
1.3.点击command injection,尝试拼接命令(127.0.0.1&&dir),下图可以看到成功执行dir的命令说明存在命令执行漏洞,然后尝试拼接net user、ipcofig、netstat -ano等命令 #&& 第一个命令执行成功才会执行第二个命令
1.4,随便输入然后用&&拼接命令,都不能执行,因为(&& 第一个命令执行成功才会执行第二个命令)
1.5 尝试用&拼接命令 #&是不管第一个命令是否执行成功都会执行第二个命令
127.0.0.1&&dir
随便输入一个字符串然后用&拼接命令,下图可以看到成功执行第二个命令,这是因为&是不管第一个命令是否执行成功都会执行第二个命令
1.6尝试用|拼接命令 #|(管道符)是只执行第二个命令
下图可以看到只执行第二个命令,没有执行第一个命令
2. 将DVWA的级别设置为medium
2.1此时一些常规的拼接操作就不能实现命令执行漏洞了,查看源码,可以发现对参数进行了简单的处理:过滤&&和;
2.2用&&拼接命令,可以看到返回错误信息,&&被过滤了
2.3从DVWA的medium级别源码可以看到,对参数进行了一些简单的过滤,此时可以通过&或|或者根据过滤的字符进行组合等绕过防御
2.3.1通过&拼接命令,绕过防御 也可以通过在&前敲空格,绕过防御
2.3.2通过|拼接命令,绕过防御
2.3.3通过防御过滤的字符进行组合,绕过防御
127.0.0.1&&&dir
127.0.0.1&;&ipconfig
3.将DVWA的级别设置为High
3.1查看源代码,可以看到首先对参数进行trim去除两边的空格,然后增加了过滤的黑名单
3.2观察源代码可以看到过滤“|”时,是过滤”| ”,”|”后有个空格,此时可以通过简单的127.0.0.1|dir绕过
4. 将DVWA的级别设置为impossible
4.1查看源代码,可以看到先对参数使用stripslashes函数过滤掉反斜杠,然后使用explode函数将参数打散为数组,然后用is_numeric函数对数组中的每个参数进行判断,符合条件再把数组的参数进行拼接。对参数进行了严格的限制,因此不可能存在命令执行漏洞
过滤敏感字符
1.首先再DVWA的medium级别源码文件中,添加过滤条件(过滤whoami,net user等敏感字符),然后测试
2.测试拼接whoami、net user命令,没有得到返回结果,说明字符被过滤
3.尝试绕过敏感字符过滤
解决乱码问题:
在DVWA-masterdvwaincludes目录下找到dvwaPage.inc.php文件中所有的”charset=utf-8”,修改”charset=gb2312”