暴力破解(以Pikachu为例)


前言

1.概念

通过下面这些词来了解一下什么是暴力破解:

连续性尝试+字典+自动化

2.字典

一个有效的字典,可以大大的提高暴力破解的效率:

(1)常用的账号密码(弱口令),比如常用用户名/密码TOP500等;
(2)互联网上被脱裤后账号密码(社工库);
(3)使用指定的字符使用工具按照指定的规则进行排列组合算法生成密码。

3.暴力破解漏洞

如果一个网站没有对登录接口实施防暴力破解的措施,或者实施了不合理的措施,则称该网站存在暴力破解漏洞。

可以从以下几个方面判断:

(1)是否要求用户设置了复杂的密码;
(2)是否每次认证都是用安全的验证码;
(3)是否对尝试登录的行为进行判断和限制;
(4)是否在必要的情况下采用了双因素认证;
……等等

存在暴力破解漏洞的网站可能会遭受暴力破解的攻击,但成功的可能性并不是100%!
所以有些网站虽然存在暴力破解漏洞,但其管理员可能会忽略它的危害。

4.漏洞测试流程

(1)确认登陆接口的脆弱性(抓包);
(2)对字典进行优化;
(3)工具自动化操作。

字典优化技巧
技巧一:根据注册提示信息进行优化;
技巧二:尝试登录,观看返回结果。


一、基于表单的暴力破解

在这里插入图片描述

流程:

提前准备字典,为了测试,新建了两个文件分为别username.txt和password.txt:
在这里插入图片描述
在这里插入图片描述

(1)打开Burp Suite,使用代理。随便输入一个账号密码,点击Login,发现提示username or password is not exists~;

(2)查看Burp Suite抓包情况:

在这里插入图片描述
发现认证因素只有账号和密码,基本确定这个登录接口可以暴力破解。

(3)将这个请求发送到Intruder,将原来的变量clear清空,只设置username和password两个变量:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

点击clear清除:

在这里插入图片描述
开始攻击
在这里插入图片描述
点击Length按照长度排序,可以发现正确密码的长度和其他不同,如图所示,此时查看这个请求的响应发现是:login success,所以可以确定用户名和密码为admin 123456
在这里插入图片描述

使用该账号密码登录成功

二、验证码绕过

验证码作用:

(1)防止登录暴力破解;
(2)防止机器恶意注册。

验证码的认证流程:

(1)客户端request登录页面,后台生成验证码:
	①后台使用算法生成图片,并将图片response给客户端;
	②同时将算法生成的值全局存在SESSION中;
(2)校验验证码:
	①客户端将认证信息和验证码一同提交;
	②后台对提交的验证码与SESSION里面的进行比较;
(3)客户端重新刷新页面,再次生成新的验证码:
	验证码算法中一般包含随机函数,所以每次刷新都会改变。

1.on client(不安全的验证码)

在这里插入图片描述
流程:
(1)测试:
随便输入账号和密码,不输入验证码时登录提示:验证码不能为空;
随便输入账号和密码,输入错误的验证码时提示:验证码错误;
且以上两种均捕获不到数据包
随便输入账号和密码,输入正确的验证码时,提示:username or password is not exists~
(此时可以初步确定,验证码的判断是在前端进行的)

(2)查看页面源码,可以发现验证码的生成和判断都是在前端使用js进行的:
在这里插入图片描述

(3)查看Burp Suite抓包情况:
在这里插入图片描述
(4)将其发送到Repeater模块修改数据包

修改验证码为错误或空值并发送,可以发现本来应该返回的提示为验证码错误或验证为空,却返回了username or password is not exists~,至此可以确认,验证码虽然提交了,但是没有在后台验证:
在这里插入图片描述
(5)继续执行,步骤同表单暴力破解(3)中所示。

2.on server(不安全的验证码)

常见问题:

(1)验证码在后台不过期,导致可以长期使用;
(2)验证码校验不合格,逻辑出现问题;
(3)验证码设计得太过简单和有规律,容易被猜解。

流程:
(1)测试:
随便输入用户名和密码,不输入验证码,提示:验证码不能为空哦!
随便输入用户名和密码,输入错误的验证码,提示:验证码输入错误哦!
随便输入用户名和密码,输入正确的验证码,提示:username or password is not exists~

以上均可以抓到包,可以基本确定验证码判断是在后台进行的。

(2)查看Burp Suite抓包情况:
在这里插入图片描述
(3)发送到Repeater:(步骤与on client(4)中的操作相同)
将正确的验证码修改为空,发送,查看返回的信息为:验证码不能为空哦;将正确的验证码修改为错误,发送,查看返回的信息为:验证码输入错误哦。以上说明后台对验证码进行了判断;

接下来判断验证码过期问题:
我们可以发现每次刷新页面都会有一个新的验证码,即,每次刷新时,都会向后台发送一个新的请求(具体参考文章前半部分的验证码验证流程)。

刷新页面,得到一个验证码,将正确的验证码修改到数据包中,查看返回的提示为 username or password is not exists~,说明验证码没问题。
在这里插入图片描述

接下来修改密码,再次提交并查看返回的提示,发现仍为 username or password is not exists~,说明验证码仍然有效,可以被重复利用,存在验证码不过期的问题:
在这里插入图片描述
(4)将数据包发送到Intruder中,验证码部分保持正确,步骤仍然同
表单暴力破解(3)中所示。

三、token防爆破

一般的做法:

(1)将token以“type=‘hidden’”的形式输出在表单中;
(2)在提交认证的时候一起提交,并在后台对其进行验证。

但是由于token值输出在了前端源码中,容易被获取,因此也就失去了防暴力破解的意义。一般token在防止CSRF上会有比较好的功效。


总结

防暴力破解的措施:

(1)设计安全的验证码;
(2)对认证错误的提交进行技术并给出限制,比如连续5次密码错误,锁定两小时;
(3)必要的情况下,使用双因素认证。

猜你喜欢

转载自blog.csdn.net/m0_46467531/article/details/108672286