zoukankan      html  css  js  c++  java
  • 业务逻辑漏洞探索之暴力破解

    本文中提供的例子均来自网络已公开测试的例子,仅供参考。

    最近斗哥在整理一些业务逻辑漏洞,突然发现好多问题,所以决心和大家一起探讨探讨,今天先从暴力破解开始。 

    说起暴力破解,它其实就是利用大量猜测和穷举的方式来尝试获取用户口令的攻击方式,如果身份验证模块设计的不好攻击者可以利用自动化攻击进行暴力破解,大大增加了密码被破解的风险。所以在日常测试或者挖洞的过程中,对于登录、注册等功能,我们很容易会联想到暴力破解攻击。斗哥呢也总结了身份验证模块常见的几种暴力破解攻击场景。

    <ignore_js_op>


    无任何保护机制:

    现在互联网上还是存在挺多的站点并没有对登录、注册、重置密码之类的功能进行一定的防护,所以当碰到没有验证码的,没有对输错密码次数进行限制,而且还是明文传输的系统,二话不说先是一顿暴力破解。

    举个栗子:

    ① 登录的时候发现没有任何的防护措施。

    <ignore_js_op>


    ②抓取登录的数据包,发现用户名密码明文传输。

    <ignore_js_op>


    ③使用burp suite的intruder的功能对j_loginid字段进行爆破。

    <ignore_js_op>


    ④使用弱密码及常见用户名进行爆破,长度为495的,为爆破成功的。

    <ignore_js_op>


    ⑤使用用户名密码可成功进入系统。

    <ignore_js_op>


    锁定机制绕过:

    部分系统会有一些防护措施,比如超过一定的错误次数会将账号进行锁定,或者是某IP频繁的进行登录操作会将IP封了。这种情况下我们就可以进行撞库攻击。撞库攻击一般是是指黑客通过收集互联网已泄露的用户和密码信息,生成对应的字典表,尝试批量登陆其他网站后,得到一系列可以登录的用户。我们一般会使用一些常见的弱密码去遍历用户名,可以得到一些用弱口令的用户。

    举个栗子:

    ① 访问目标站点,发现该站点无验证码。

    <ignore_js_op>


    ②通过抓包发现,用户名密码明文传输。

    <ignore_js_op>


    ③直接暴力破解发现,该系统在多次失败登录的情况下会出现验证码,而且会锁定账号。因此我们决定采用撞库的方法,通过弱密码去遍历用户名。

    <ignore_js_op>


    ④通过弱密码遍历出的账号可成功登录。

    <ignore_js_op>


    验证码绕过:

    常见的两种验证机制是图片验证码和短信验证码。设置验证码就是为了防止自动化攻击,但是如果没有设计好的话就形同虚设。

    图片验证码绕过:

    常见的几种图片验证码被绕过的场景:图片验证码输入一次正确可重复使用;图片验证码前端校验;图片验证码可被识别;验证码信息返回客户端等等。

    举个栗子:

    ①访问某站,登录时候,发现验证码输入一次之后不会失效,输入一次正确后可重复使用。

    <ignore_js_op>



    ②使用burp suite抓包,发现用户名密码明文传输,使用intruder功能对username和password字段进行暴力破解。

    <ignore_js_op>


    ③返回353的是成功的。

    <ignore_js_op>


    ④得到账号可成功登录。

    <ignore_js_op>


    短信验证码绕过:

    有时候登录的时候用使用的是短信验证码,这个时候同样要注意设计好逻辑,不然很容易被爆破或者绕过。

    举个栗子:

    ① 某系统在注册的时候需要输入验证码,验证码为四位。

    <ignore_js_op>


    ②通过burp suite进行暴力破解短信验证码字段,长度为303的数据为正确注册后返回的数据包。

    <ignore_js_op>


    ③18888888888可成功注册账号。

    <ignore_js_op>


    修复建议:

    以上简单的介绍了暴力破解的场景,那么要怎么防止被暴力破解呢?斗哥简单的和大家提几点修复建议: 

    1.锁定机制:如限制单位时间内执行某项操作的次数(如果次数超过则对账号或IP进行一段时间的锁定,锁定时间内不得使用相关功能,应对限制方式、次数和计算方法、锁定时间等进行明确的说明。) 
    2.人机识别措施:如图片验证码、重力感应、短信验证码、语音验证码等,为了提升用户体验,对于一些低风险的操作,可以设定单位时间内执行操作次数的阀值,超过阀值后再进行人机识别措施。 
    3.图片验证码不应选择简单的数字图片,应加入干扰线、变形、颜色、汉字或者其他机器较难识别的逻辑来提升人机识别的有效性。 
    4.验证码的生存周期应为一次性,即无论校验成功或失败,验证码在一次校验后就应该失效。 
    5.所有的人机识别措施和校验都应在服务端进行。 
    6.验证过程中不应返回有助于推测正确验证答案的信息,比如返回验证码的内容回客户端。

    大家有任何问题可以提问,更多文章可到i春秋论坛阅读哟~

  • 相关阅读:
    ExtJS 开发总结 子曰
    解决讨厌的VS2008不能打开vs2010所创建的项目问题 子曰
    提高网站页面加载速度的黄金守则 子曰
    更新网站注意事项 子曰
    dhl:SQL_游标.sql
    jQuery 中插件的使用与开发启用Visual Studio 对jQuery的智能感知(含 jQuery1.3.2 for VS 的智能提示js文件)
    用jQuery在IFRAME里取得父窗口的某个元素的值
    图片上传预览是一种在图片上传之前对图片进行本地预览的技术。
    dhl:ajax无法跨域改用getJSON(解决服务器返回json数据中文为乱码的问题$.ajaxSetup({ scriptCharset: "utf8" , contentType: "application/json; chars)
    dhl: URL的编码问题。
  • 原文地址:https://www.cnblogs.com/ichunqiu/p/9640713.html
Copyright © 2011-2022 走看看