- low等级
查看源代码可知,在php脚本中只检查了Login变量是否设置,没有对user,password参数进行过滤,存在注入漏洞。由于password参数进行了md5散列,并且只有结果集只有一行才可以通过验证,所以只能对用户名进行注入。如 ’ or 1=1 limit 1,1#
使用Burp Suite进行爆破,抓包选择爆破的参数,选择Kali 自带的字典rockyou.txt 进行爆破,得出密码为password。
- medium等级
medium等级使用了mysqli_real_escape_string方法对NUL(0x00), \n ,\r ,\ ,’ ," ,Ctrl-Z(0x1a)符号进行转义,可避免大多数sql注入。若密码错误则延时2s才能进行交互,增加了爆破的时间。
- high 等级
high 等级首先使用了checkToken进行token验证,有效防止了跨站请求攻击。之后使用stripslashes函数过滤反斜线,结合mysqli_real_escape_string 完全抵抗sql注入。最后对错误输入随机延时0-3s。
此处爆破时需要每次更新token进行验证,攻击类型使用Pitchfork,在options中选择Grep-Extract,add 从response中提取token。
设置payloads时第二个payload选择Recursive grep,即可成功爆破。
- impossible 等级
impossible等级除了前面其他等级的防护方法外,还是用登陆失败超过3次锁定账户15分钟的方法,并使用PDO::prepare对sql语句进行预处理,执行时传递真实的参数,有效防御了sql注入。