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-master\dvwa\includes 目录下找到 dvwaPage.inc.PHP 文件中所有的 "charset=utf-8", 修改 "charset=gb2312"
来源: https://www.cnblogs.com/yuzly/p/10687143.html