pikachu之暴力破解
一、神魔是暴力破解
在不知道密码的情况下(猜但不是瞎猜)
连续性的尝试+字典+自动化
场景
若一个网站没有对登录接口实施防暴力破解的措施,或实施了不合理的措施,则该网站存在暴力破解漏洞。
-
是否要求用户设置了复杂的密码
-
是否每次认证都使用安全验证码
-
是否对尝试登录的行为进行判断和限制
-
是否在必要情况下采用了双因素认证
…
字典
一个有效的字典,是提高暴力破解效率的关键
- 常用的账号密码(弱口令),常用TOP 500等
- 脱裤后的账号密码(社工库),登录其他网站效率比较高
- 使用指定字符使用工具按照指定的规则进行排列组合算法生成密码
二、测试流程
-
确认登录接口的脆弱性
确认目标是否存在暴力破解的漏洞(是否设置有关防范措施)
尝试登录----->抓包------>观察验证元素和response信息,判断是否存在被暴力破解的可能
-
对字典进行优化
根据实际的情况对字典进行优化,提高爆破过程的效率
技巧一:
根据注册提示信息进行优化
对目标站点进行注册,搞清楚账号密码的一些限制(比如位数、复杂度规则),按照此去优化字典,比如去掉不符合要求的密码
技巧二:
若破解后台,则管理员用户名为admin/administrator/root的几率比较高。(可尝试登录根据回显确定用户名)
-
工具自动化操作
配置自动化工具(比如线程、超时时间,重试次数等),进行自动化操作。
三、靶场测试
知识补充:
burpsuite------instruder
target
设置攻击目标,可通过proxy发送
Pasitions
指定需要暴力破解的参数并设置成变量,同时选择攻击模式:
Sniper:狙击手
设置一个payload,先将第一个变量使用字典去测试,再将第二个变量使用字典去测试(变量为主体);
Battering ram:碰撞车
设置一个payload,所有的变量一起用字典内容被替换,然后一起尝试;
Ptichfork:草叉型
每个变量设置一个payload,分别使用对应的字典对变量进行同时替换;
Cluster bomb:焦束炸弹
需要为每个变量设置一个payload,分别使用字典内容组合对变量进行替换;
Payloads
设置字典,并可以对字典进行统一的策略处理;
Options
对扫描的线程、失败重试等进行配置;
对结果设置匹配的flag:通过一个标识符来区别结果,并在结果栏中flag出来。
1、基于表单的暴力破解
-
sniper模式
使用场景:确定username,password中的一个,但不知道是哪一个
保持一个变量不变,另一个变量遍历一个字典
------设置flag,对回显的特定字符标记,以便确定成功选项
-------设置payload来源
------结果,没有爆破成功
-
Battering ram模式
一个payload,将变量一起替换。适用于username,password相同,用一个字典爆破。
爆破失败!
-
Ptichfork模式
用第一个字典的第一个 和 第二个字典的第二个登录测试,以此类推…
-
Cluster bomb模式(常用)
与Ptichfork相比,该模式采用交叉式测试
爆破成功!
使用admin/123456成功登录!
2、验证码绕过----on client相关问题
验证码CAPTCHA, (Completely Automated Public Turing test to tell Computers and Humans Apart)
作用:
防止登录暴力破解
防止机器恶意注册
认证流程:
客户端request登录页面,后台生成验证码:
1、后台使用算法生成图片,并将图片response给客户端;
2、同时将算法生成的值全局赋值存到SESSION中。
校验验证码:
1、客户端将认证信息和验证码一同提交;
2、后台对提交的验证码与SESSION里面的进行比较;
客户端重新刷新页面,再次生成新的验证码:
验证码算法中一般包含随机函数,所以每次刷新都会改变
测试过程:
查看网页源码,发现验证码设置在前端,一律无视,直接抓包重放
破解的过程与上一个一致
后台源码分析:------------------bf_client.php
3、验证码绕过----on server
场景:
- 验证码在后台不过期,导致可以被长期使用;
- 验证码校验不严格,逻辑出现问题;
- 验证码设计的太过简单和有规律,容易被猜解。
- 验证码以明文字符串的方式在cookie中,传到前端。
过程:
抓包重放测试
放包查看回显,发现验证码有效。
修改账号和密码,再次放包查看回显,发现验证码依然有效,说明验证码为设置过期,可以重复利用。
所以直接暴力破解:
如图,爆破成功!
源码分析:
-----------------------bf_server.php
------------------------showvcode.php
向客户端设置一个cookie
其中有一个问题就是,服务端的验证码字符串是以明文cookie的方式传给前端,毫无意义。
----------------------------function.php
生成验证码
4、token真的防暴力破解?
什么是token?
访问资源接口(API)时所需要的资源凭证
简单 token 的组成: uid(用户唯一的身份标识)、time(当前时间的时间戳)、sign(签名,token 的前几位以哈希算法压缩成的一定长度的十六进制字符串)
因为有时间戳,所以每次刷新页面token会变
因为token值是以明文方式存放在前端的,所以可以利用脚本获取,然后再实施重放攻击暴力破解。
源码分析:
---------------function.php
--------------bf_token.php
四、防范措施
- 设计安全的验证码(安全的流程+复杂而又可用的图形)。
- 对认证错误的提交进行计数并给出限制,比如连续5次密码错误,锁定2小时。
- 必要的情况下,使用双因素认证。