DVWA之命令注入
Low
查看源码:
ip参数没有做任何的过滤就直接放在shell_exec函数中执行了,执行语句为shell_exec( 'ping 127.0.0.1 && whami ')。(linux下使用whoami查看用户命令,windows使用net user)
low级别的代码接收了用户输入的ip,然后根据服务器是否是Windows NT系统,对目标ip进行不同的ping测试。但是这里对用户输入的ip并没有进行任何的过滤,所以我们可以进行命令执行漏洞
函数:
stristr(string,search,before_search):
其中string参数是被搜索字符串,参数search是要搜索的字符串,berfore_search是布尔型,可以选择true或false,默认情况下是false,比如stristr(“you are hacker!”,”HaCKer”),返回hacker!,若是search_before设置为true,则返回为you are
Php_uname(mode):
Mode是有选择项的单个字符,用于决定要返回信息内容
- ‘a’:默认参数,包含序列”s n r v m ”里的所有模式
- ‘s’返回系统名称。
- ‘n’ :返回主机名。
- ’r’:返回版本名称。
- ‘v’:返回版本信息。
- ‘m’:返回机器类型。
命令连接字符串&,&&,|,||:
- command1 & command2 在“and”,其连接的两个命令,先执行command2,再执行command1
- command1 && command2 执行command1后执行command2
- command1 | command2 只执行command2
- command1 || command2 只执行command1
也可以使用command1 ; command2 两个命令执行,类似&&命令
Medium
查看源码:
由以上waf可知,此waf只是过滤了 “&&”和”;”这两个特殊字符,所以,可以通过使用”&“,”|”,”||”绕过
High
查看源码:
此waf将”&”,”;”,”| ”,”-”,”$”,”(”,”)”,”`”,”||”这些字符直接全部转换成空格
仔细观察,可以发现”| ”中,| 后面有一个空字符,因此,可以使用”|”进行绕过
漏洞利用:
Impossible
查看源码:
stripslashes(string) : 该函数会删除字符串string中的反斜杠,返回已剥离反斜杠的字符串。
explode(separator,string,limit): 该函数把字符串打散为数组,返回字符串的数组。参数separator规定在哪里分割字符串,参数string是要分割的字符串,可选参数limit规定所返回的数组元素的数目。
is_numeric(string): 该检测string是否为数字或数字字符串,如果是返回TRUE,否则返回FALSE。
可以看到,Impossible级别的代码加入了Anti-CSRF token,同时对参数ip进行了严格的限制,只有诸如“数字.数字.数字.数字”的输入才会被接收执行,因此不存在命令注入漏洞。