DVWA-Command Injection 命令注入
前言
命令注入(Command Injection)漏洞,是由于一些函数没有对参数做过滤或过滤不严导致的,可以执行系统或者应用指令(比如说CMD命令或者bash命令)的一种注入攻击手段。
PHP命令注入攻击漏洞是PHP应用程序中常见的脚本漏洞之一。
命令连接符:
a && b :代表首先执行前者命令a再执行后命令b,但是前提条件是命令a执行正确才会执行命令b,在a执行失败的情况下不会执行b命令。所以又被称为短路运算符。
(前面的命令执行成功后,它后面的命令才被执行)
a & b:代表首先执行命令a再执行命令b,如果a执行失败,还是会继续执行命令b。也就是说命令b的执行不会受到命令a的干扰。
(表示简单的拼接,A命令语句和B命令语句没有制约关系)
a || b:代表首先执行a命令再执行b命令,如果a命令执行成功,就不会执行b命令,相反,如果a命令执行不成功,就会执行b命令。
(前面的命令执行失败,它后面的命令才被执行)
a | b:代表首先执行a命令,再执行b命令,不管a命令成功与否,都会去执行b命令。
(当第一条命令失败时,它仍然会执行第二条命令,表示A命令语句的输出,作为B命令语句的输入执行。)
一、Command Injection --low
首先解决乱码的问题:找到phpstudy里的WWW\DVWA\dvwa\includes文件下面的dvwaPage.inc.php,将所有的”charset=utf-8”,修改为”charset=GB2312”;
修改ok后刷新;done。
尝试ping 本机,127.0.0.1,可以看到:
输入命令:127.0.0.1 & ipconfig,得到:
可以看到,成功执行。然后可以继续执行其他的命令。把ipconfig换成其他的系统命令。
127.0.0.1&&dir
127.0.0.1|dir
也可以,比如,执行 127.0.0.1 & net user test0 /add ,尝试ping完后新建一个用户,就可以成功创建用户。
127.0.0.1 && net user 显示用户;(关于user的命令我这里显示不了,可能是权限的问题,哪位大佬知道的可以提点一下)
二、Command Injection --Medium
中等级的命令行注入增加了一些过滤,通过查看源码可以看到,代码中将&&和:过滤成了空字符,但是并没有过滤“|”,因此依然可以进行注入。
因此可以使用& 、|等;
如使用127.0.0.1&dir:
还有很多方法可以进行中等级的命令行注入,比如“||”操作(使a命令执行失败),“&;”、"|;"、"||;"…
三、Command Injection --High
看源码发现:high等级的命令行注入过滤的东西比较多,但是在过滤的时候有bug,其bug就是空格。