• 逻辑漏洞——验证机制问题


    一、验证机制

     验证机制注意分为:设计缺陷和执行缺陷

    Web程序常用的验证机制有:

     二、设计缺陷

    1、可预测的用户名

    2、非唯一性用户名

    3、弱口令

     4、密码确认不完善

     5、可预测的密码

    6、密码重置

     

     7、记住密码

     8、证书

     当验证机制设置不完全的时候,可以通过暴力破解来获得用户名和密码

    三、暴力破解

    暴力破解的工具有很大,有hackcat、hydra、Burpsuite等等

     使用暴力破解的前提是可以试错,错误次数没有限制

     四、执行机制

    1、异常开放登录机制

     

    2、多阶段登录机制中的缺陷

     

     

     


    实例一、验证机制之暴力破解用户名密码 

    原理:

    登录页面在设置用户名和密码的时候,没有遵循密码设置规则,借助字典利用穷举法将所有可能的用户名和密码一一尝试,进行蛮力攻击,最后暴力破解出用户名和密码,绕过验证机制。

    1、打开浏览器,访问http://ip/webug/pentest/test/b2e16da5985ee1be/index.html

     

    2、随便输入用户名为:“root”,密码为“123456”提交,登陆失败

     

    3、返回登陆页面,还是随便输入用户名为:“root”,密码为“123456”

    4、启动Burp Suite抓包工具,设置参数和浏览器代理,开始抓包

     

    5、点击“登录”,提交输入的用户名和密码,Bp成功抓取数据包

    6、全选数据包,右键,选择“Send to Intruder”,将数据包发送到暴破模块

     

    7、将攻击模式设置为“Cluster bomb”

     

    8、切换到“Payloads”,设置攻击载荷。设置攻击位置1的payload类型为"Simple list",并加载用户名字典

     

    9、设置攻击位置2的payload类型为"Simple list",并加载密码字典

     10、点击“Start attack”,开始暴力破解,暴破成功

     按一下Length

    注:使用字典暴力破解,对暴破的结果根据长度进行分析,长度值与其他不同的就是正确结果,从而绕过登录验证机制。


    实例二、验证机制之绕过验证码前端验证

    原理:

    登录页面在设置用户名和密码的时候,没有遵循密码设置规则,但是增加了验证码,需要输入验证码,而验证码的逻辑又放在前端,通过抓包发现后台不会对输入错误的验证码进行验证,在浏览器中,输入错误的验证码是有提示的。前端设置的验证码如同虚设,后端又不会对验证码进行验证。那么可以略过验证码,直接进行暴力破解就可以了,借助字典利用穷举法将所有可能的用户名和密码一一尝试,进行蛮力攻击,最后暴力破解出用户名和密码,绕过验证机制。

    1、打开浏览器,访问http://ip/pikachu/vul/burteforce/bf_client.php

     

    2、随便输入用户名为:“root”,密码为“123456”以及随意验证码进行提交,弹框提示验证码输入错误

     

    3、点击“确定”,还是随便输入用户名为:“root”,密码为“123456”以及正确验证码

    4、启动Burp Suite抓包工具,并设置参数和浏览器代理

     

    5、点击“Login”,提交输入的用户名、密码以及验证码,Bp成功抓取数据包(验证码输入错误时,无法抓取到数据包,只有验证码输入正确时才能抓到数据包,由此可以判断验证码的验证逻辑在前端)

     

    6、右键,选择“Send to Intruder”以及“Send to Repeater”,分别将数据包发送到暴破模块和重发模块

     

    7、在“Repeater”中对数据包修改验证码为任意,然后点击“Send”放包,查看响应包发现后台不会对输入错误的验证码进行验证,在浏览器中,输入错误的验证码是有提示的

     

    8、切换到浏览器,右键选择“查看页面源代码”,浏览代码中发现验证码的验证逻辑是在客户端的实现规则

     

    9、通过前端验证码的验证逻辑的代码可以发现Javascript会从0-9和26个大写字母中随机挑选5个作为验证码,然后用 validate() 去验证,并且每点一次验证码,就会调用 createCode() 改变验证码

     

     

    10、前端设置的验证码如同虚设,后端不会对验证码进行验证。那么不用理会验证码,直接进行暴力破解。切换到BurpSuite的的“Intruder”模块

     

    11、点击“Clear §”,清除所有Payload位置标志,重新选择“username”和“password”两个需要暴破的位置标志,点击“Add §”,将攻击模式设置为“Cluster bomb”

     

     

    12、切换到“Payloads”,设置攻击载荷。设置攻击位置1的payload类型为"Simple list",并加载用户名字典

    13、设置攻击位置2的payload类型为"Simple list",并加载密码字典

    14、点击“Start attack”,开始暴力破解,暴破成功

     

     

    注:在遇到登录页面增加有验证码验证,首先判断是前端验证还是后端验证前端设置的验证码如同虚设,就可以略过验证码,直接使用字典暴力破解,对暴破的结果根据长度进行分析,长度值与其他不同的就是正确结果,从而绕过登录验证机制。


    实例三、验证机制之绕过验证码服务端验证

    原理:

    登录页面在设置用户名和密码的时候,没有遵循密码设置规则,但是增加了验证码,用来防止恶意注册、防止暴力破解;验证码需要判断验证的逻辑是放在前端还是服务端,服务端验证码常见问题:

    1. 1、验证码不生效,导致验证码的验证逻辑无效
    2. 2、验证码不过期,导致验证码不失效,可以长期使用
    3. 3、验证码设计太简单以及有规律,可以被预测、猜解
    4. 4、验证码校验不严格,验证逻辑出现问题

    利用验证码的问题,进行验证码绕过,再借助字典利用穷举法将所有可能的用户名和密码一一尝试,进行蛮力攻击,最后暴力破解出用户名和密码,绕过验证机制。

    1、打开浏览器,访问http://ip/pikachu/vul/burteforce/bf_server.php

    2、随便输入用户名为:“root”,密码为“123456”以及随意验证码进行提交,页面提示验证码输入错误

     

    3、随便输入用户名为:“root”,密码为“123456”以及正确验证码进行提交,页面提示“username or password is not exists”

     

    4、启动Burp Suite抓包工具,设置参数和代理

    5、随便输入用户名为:“root”,密码为“123456”以及随意验证码,点击“Login”,提交输入的用户名、密码以及验证码,Bp成功抓取数据包,说明后端对验证码是有验证的

     

    6、点击“Drop”,丢弃数据包

    7、随便输入用户名为:“root”,密码为“123456”以及正确验证码进行提交,重新抓包

     

    8、右键,选择“Send to Intruder”以及“Send to Repeater”,分别将数据包发送到暴破模块和重发模块

    9、 在“Repeater”中点击“Send”,发送数据包,查看响应包,提示“username or password is not exists”

    10、换个密码再发送一次数据包,查看响应包,依然提示“username or password is not exists”,正常来说应该提示验证码错误,说明验证码长期有效,可以直接暴力破解

     

    11、切换到BurpSuite的的“Intruder”模块,点击“Clear §”,清除所有Payload位置标志,重新选择“username”和“password”两个需要暴破的位置标志,点击“Add §”,将攻击模式设置为“Cluster bomb”

    12、切换到“Payloads”,设置攻击载荷。设置攻击位置1的payload类型为"Simple list",并加载用户名字典

    13、设置攻击位置2的payload类型为"Simple list",并加载密码字典

    14、点击右上角的“Start attack”,开始暴力破解,暴破成功


    实例四、验证机制之找回密码

    原理:

    在网站的忘记密码位置进行找回密码的过程中,可以利用密码重置过程中常见的一些问题绕过安全验证,从而实现重置密码。常见密码重置问题:

    1. 1、用户名枚举:网站反馈多余信息,可猜测用户信息
    2. 2、验码返回前端处理:可截获、修改
    3. 3、修改Request:用户名、手机号、邮箱、Cookie等信息可修改
    4. 4、修改Response:操作结果成功/失败可修改
    5. 5、暴力破解验证码:验证码长度有限,或验证码未设置可靠的失效时间
    6. 6、拼凑密码重置链接:重置密码链接有规可循

    阶段一:管理员安装cms,搭建企业网站

    1、访问http://ip/index.php

    2、根据提示,点击“点击运行安装向导”,安装cms

     

     

    3、点击“我同意”,然后一直点击“下一步”

    4、填写必要信息,数据库密码要填写“root”;数据库名任意设置,比如“zzcms”;管理员密码任意设置,比如“123456”

    5、然后一直点击“下一步”,直至安装完成

     

    6、点击“网站首页”,跳转至网站首页,至此企业网站搭建完成

     

    阶段二:任意用户注册账号

    7、点击右上角的“免费注册”,跳转到注册账号界面

     

     

    8、填写相关信息,点击“提交”,注册账号成功

    9、点击“安全退出”,退出登录

     

    阶段三:攻击者重置用户密码

    10、点击右上角的“请登录”,跳转登录账号界面

     

    11、由于攻击者不知道账号密码,点击“找回密码”,进行尝试

     

    12、输入任意用户名,提示“该用户名不存在”,利用网站反馈的多余信息,不断猜测用户名,直到正确为止

     

    13、根据图片验证码中的结果填写,进行验证码验证,然后点击“下一步”,进入安全验证阶段

     

     

    14、由于验证码会发送到用户的邮箱进行安全验证,而攻击者无法获取到验证码,无法进入下一步。尝试抓包,启动Burp Suite抓包工具,设置参数和代理

     

    15、随便输入验证码(不要点击获取验证码),点击“下一步”,提交输入的验证码,Bp成功抓取数据包

    18、右键,选择“Do intercept”下的“Response to this request”,抓取响应数据包(即可以抓取数据包的响应包进行修改)

    19、点击“Forward”,转发数据包,获取响应数据包

    20、把响应数据包中的“no”改为“yes”,然后点击“Forward”,继续转发数据包

    21、切换到浏览器,发现已经绕过安全验证,关闭浏览器代理,输入任意新密码即可,比如“hello123”,点击“确定”即可

    22、重置密码成功

     

     

    23、点击“登录”,用修改的密码尝试登录,成功登录

    注:在找回密码的过程中,可以利用密码重置的常见攻击方法进行尝试,枚举用户名、抓包修改数据包、暴力破解验证码、拼接重置密码连接等方法尝试绕过安全验证,从而重置密码,登录账户。


    这篇文章就写到这里了!

  • 相关阅读:
    How to install mongodb 7.0 to Ubuntu 22.04
    IO流练习 二
    Java 18 新特性:简单Web服务器 jwebserver
    vimdiff
    统一配置中心Config、Bus组件的使用以及 SpringCloud 微服务工具集总结
    PDF文件怎么解密?教你三种解密的方法
    [oeasy]python0010_hello_world_unix_c历史迷因
    简记C语言清空输入残留内容
    RStudio学习笔记(一)
    深度学习入门(二十七)卷积神经网络——LeNet
  • 原文地址:https://blog.csdn.net/weixin_54055099/article/details/127037239