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窗口中运行时,发现并没有对十六进制进行解析……看来是我太天真了。
这种防护方式采用了定格式输入的方式,而不是定格式排除(也就是黑白名单的区别),不得不说,白名单才是正确的防护之道,因为黑名单存在多种变种,是禁不完的!