DVWA 之 命令注入 全等级
一、漏洞概述
命令注入是指在易受攻击的应用程序中注入和执行攻击者指定的命令,执行的命令具有与web 服务相同的权限和环境。
产生原因:
web服务器没有对用户提交的参数进行有效的检测过滤
操作系统允许一条语句在使用连接符和管道符后执行多条命令
windows下几种的管道符或者连接符:
command1&command2 无论command1是否执行成功都要执行command2
command1&&command2 只有command1执行成功后才执行command2
command1||command2 只有command1执行失败后才执行command2
command1|command2 将command1的执行结果传递给command2
二、工具
firefox
三、测试过程
1、级别:low
首先输入一个IP观察一下
可以看到在下方返回了对127.0.0.1进行Ping检测的内容,因此猜测这里有一个可以执行系统命令的函数,则这里可能存在命令注入漏洞,且执行的命令为Ping 输入的内容。
利用连接符&&进行测试,输入127.0.0.1&&dir
可以看见这里不仅仅返回了127.0.0.1的Ping检测信息,还返回了刚刚拼接dir命令的结果。然后我们就可以通过拼接其他命令进行攻击。
Low级别代码分析
stristr(string,search,before_search)函数:搜索字符串在另一字符串中的第一次出现。
php_uname(mode)函数:返回运行php的操作系统的相关描述,参数mode可取值
a:此为默认,包含序列”s n r v m”里的所有模式
s:返回操作系统名称 n:返回主机名 r:返回版本名称
v:返回版本信息 m:返回机器类型
这段代码是判断该操作系统为哪种操作系统并按操作系统的不同执行其对应的Ping命令。
2、级别MEDIUM
同样先试一下输入127.0.0.1&&dir,发现失败了。
试一下利用&进行连接,我们输入127.0.0.1进行测试,发现下方成功显示出了命令结果,表示注入成功。
Medium级别代码分析
可以发现比low级别多了一段代码,这段代码的作用就是对输入的字符进行判断若出现‘&&’或‘;’字符则用‘’代替。这是明显的黑名单做法,还是不能有效的阻挡命令注入。
3、级别High
依次使用不同的连接符或管道符进行测试,发现只有 ‘|’ 才能成功。
High级别代码分析
发现一样采用的是黑名单方法,只是扩大了限制的字符,还是有效的阻挡命令注入。
4、级别Impossible
发现各种链接符都无法成功
Impossible级别代码分析
发现采用了白名单的做法,只有输入的格式跟白名单的一样才能通过验证,其他的都不行,这样基本上杜绝了命令注入。