zoukankan      html  css  js  c++  java
  • Brute Force暴力破解

    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。
    每次服务器返回的登陆页面中都会包含一个随机的user_token的值,用户每次登录时都要将 user_token一起提交。服务器收到请求后,会优先做token的检查,再进行sql查询。
    根据代码可以得知
    1.isset函数用来检测变量是否设置,并且不是 NULL。
    2.用户可以完全控制该参数,传参时给Login赋值即可满足条件继续执行。
    3. 校验token,每次都需要更新token。
    3.用户名部分使用,stripslashes(str)函数去除用户名中出现的反斜线。然后再使用mysqli_real_escape_string(str)函数用户名的特殊符号(x00, , ,,‘,“,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
     
    本文仅是个人学习记录,部分摘自FreeBuf.Com等。
     
     
  • 相关阅读:
    内置对象
    Angular 动画
    Angular_上拉刷新
    angular Observable
    【Nginx】nginx为目录或网站加上密码认证
    MongoDB笔记
    websocket服务器+客户端
    cli 中php的配置和phpinfo不一样
    linux设置时区和自动同步时间
    crontab & php实现多进程思路
  • 原文地址:https://www.cnblogs.com/zjwoo/p/12763151.html
Copyright © 2011-2022 走看看