DVWA代码审计之Brute Force、Command Injection、CSRF、Insecure CAPTCHA、SQL Injection代码分析

Brute Force

Medium

代码分析:
  相对初级来说中级使用mysqli_real_escape_string函数过滤掉了用户名中NULL(ASCII 0)、 、 、、'、" 和 Control-Z字符,可以防止这一类的Sql注入,同时还设置了登录失败会暂停2秒,减慢了爆破的速度,但是依然可以通过爆破来获取用户名。

High

代码分析:
  高级使用了generateSessionToken函数生成随机token来防止CSRF攻击,并且在服务器收到请求后,会优先做token的检查,再进行sql查询,同时用户名使用了stripslashe函数过滤,反斜线将被去除,两个反斜线将会被替换成一个,再用mysqli_real_escape_string函数过滤,最后还将暂停时间设置成0-3秒的随机数。虽然在一定程度上防止了重放攻击,但是并未做限制次数或账号锁定,所以依然可以爆破。

Command Injection

Medium

代码分析:
  相对初级来说中级设置了一个过滤&&和;字符的黑名单,使用str_replace函数进行字符串替换,那么只需要使用除了这两个字符串之外的字符即可实现命令注入,如使用&字符不会被过滤也能起到与&&相似的作用。

High

代码分析:
  可以看到黑名单里又多了好几个字符串,但是这并难不倒我们的火眼金睛,黑名单里的'| '字符串后面还多了一个空格,那么我们在输入命令的时候不加空格就可以成功注入了。

CSRF

Medium

代码分析:
  相对初级来说中级用一个if通过stripos() 函数匹配主机名来判断请求从何而来,所以设置http包头的Referer参数的值包含主机名就可以成功绕过。

Insecure CAPTCHA

Medium

代码分析:
  相对初级来说中级设置了passed_captcha参数,并在step=2中添加了对参数passed_captcha的检查,如果参数值为true,则认为用户已经通过了验证码检查,从本质上来说与初级并没有区别,只需在抓到的包里将step设置为2,添加passed_captcha=true即可绕过。

SQL Injection

Medium

代码分析:
  相对初级来说中级通过mysqli_real_escape_string函数过滤了特殊字符后,可以发现含有数字型的sql注入。

High

代码分析:
  可以看到高级关键的一个代码是user_id = '$id' LIMIT 1,即将id限制只能为一个字符,此时只需用#注释掉后面的代码即可实现sql注入

原文地址:https://www.cnblogs.com/Iamyoyodan/p/12981608.html