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

发布于:2022-12-08 ⋅ 阅读:(993) ⋅ 点赞:(0)

一、验证机制

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

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、验证码不生效,导致验证码的验证逻辑无效
2、验证码不过期,导致验证码不失效,可以长期使用
3、验证码设计太简单以及有规律,可以被预测、猜解
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、用户名枚举:网站反馈多余信息,可猜测用户信息
2、验码返回前端处理:可截获、修改
3、修改Request:用户名、手机号、邮箱、Cookie等信息可修改
4、修改Response:操作结果成功/失败可修改
5、暴力破解验证码:验证码长度有限,或验证码未设置可靠的失效时间
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、点击“登录”,用修改的密码尝试登录,成功登录

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


这篇文章就写到这里了!


网站公告

今日签到

点亮在社区的每一天
去签到