Low 服务器只是验证了参数Login是否被设置,没有任何的防爆破机制,且对参数username、password没有做任何过滤,存在明显的sql注入漏洞。 方法一:bp爆破 直接对爆破密码得到password长度与众不同,再手工验证登录成功。 方法二:手工sql注入 admin’ or ’1′=’1 admin’ #   Medium mysql_escape_string函数会对字符串中的特殊符号进行转义,基本上能够抵御sql注入攻击。但是,依然没有加入有效的防爆破机制(sleep(2)实在算不上)。 和之前一样,bp爆破。   High 加入了Token,可以抵御CSRF攻击,同时也增加了爆破的难度,通过抓包可以看到,登录验证时提交了四个参数:username、password、Login以及user_token。  Brute Force暴力破解 Safe 每次服务器返回的登陆页面中都会包含一个随机的user_token的值,用户每次登录时都要将 user_token一起提交。服务器收到请求后,会优先做token的检查,再进行sql查询。 根据代码可以得知 1.isset函数用来检测变量是否设置,并且不是 NULL。 2.用户可以完全控制该参数,传参时给Login赋值即可满足条件继续执行。 3. 校验token,每次都需要更新token。 3.用户名部分使用,stripslashes(str)函数去除用户名中出现的反斜线。然后再使用mysqli_real_escape_string(str)函数用户名的特殊符号(\x00,\n,\r,\,‘,“,\x1a)(ascii码0,换行,回车,回退)进行转义,完全抵抗SQL注入。 4.用户输入的密码将进行md5散列后传递到SQL语句中。 5. 如果密码输错了,则延时0-3秒之后才能再次提交。   网上找到两种方式,一种是用py脚本跑,还有一种也是用burp。   impossible 可以看到Impossible级别的代码加入了可靠的防爆破机制,当检测到频繁的错误登录后,系统会将账户锁定,爆破也就无法继续。 同时采用了更为安全的PDO(PHP Data Object)机制防御sql注入,这是因为不能使用PDO扩展本身执行任何数据库操作,而sql注入的关键就是通过破坏sql语句结构执行恶意的sql命令。 关于PDO:http://www.cnblogs.com/pinocchioatbeijing/archive/2012/03/20/2407869.html    
扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄