Dvwa_command_injection

DVWA_Command Injection(命令注入)

LOW

按要求输入ip地址,返回结果如下:

那么功能就是调用了一个ping的功能,如果是直接将输入内容取出来拼接在命令后面,那么在ip地址后面,加上&&是不是会将后面的命令一起执行了呢?键入:127.0.0.1&&whoami结果如下:

看来是真的就是这样设计的,看看源代码验证一下呢。

MEDIUM

这个时候再尝试,发现刚才使用测试命令不返回了,应该是加了一些过滤,尝试使用管道连接符|发现并未进行过滤,看来过滤并不严格,任然可以通过其他的方式进行命令注入,键入:127.0.0.1|whoami结果如下:

查看源代码,发现确实存在过滤,不过很有限,仅仅是过滤了&&;

如果就是这种程度的过滤,那还有太多可用的注入方式可用了……

HIGH

继续使用上面的注入方式进行测试,发现成功返回了!看来这个等级的防护,也没有对这个符号进行过滤,看一下源代码:

原来存在过滤,不过这种定格式的过滤,也太鸡肋了,而且很笨……

IMPOSSIBLE

直接看代码吧,看看健全的防护应该有哪些:

stripslashes函数去掉反斜杠

explode函数取出ip地址的四个组成数字

is_numeric函数判断是否是数字

然后拼接起来接入命令中执行,最后的出结果,不过我很不巧的看到了一个is_numeric函数绕过的方式,十六进制绕过,但是当我将127.0.0.0x317c77686f616d69(0x317c77686f616d69是字符串1|whoami的十六进制形式)键入到ip地址输入框时,没有任何返回,然后我将命令在cmd窗口中运行时,发现并没有对十六进制进行解析……看来是我太天真了。

这种防护方式采用了定格式输入的方式,而不是定格式排除(也就是黑白名单的区别),不得不说,白名单才是正确的防护之道,因为黑名单存在多种变种,是禁不完的!


dvwa

2020-12-28 13:19 +0800