暴力破解学习

本文详细介绍了暴力破解的过程,包括基于表单、验证码绕过及token防爆破的场景。暴力破解通常利用字典对用户名、密码等信息进行穷举尝试。针对这种情况,文章提出了多种防御措施,如限制登录次数、使用安全验证码以及实施token机制。同时,通过pikachu靶场进行了实际操作演示,展示了如何进行暴力破解测试和验证码的客户端与服务器端验证。

暴力破解

暴力破解的产生是由于服务器端没有限制,导致攻击者可以通过暴力的手段破解所需信息,比如用户名、密码等。
如果破解一个四位数字的验证码,那暴力破解的范围就是0000~9999,所以暴力破解需要一个庞大的字典。 一般我们用 burpsuite 的
intruder 模块进行暴力破解,它可以通过文件方式载入 .txt 文本的字典。关于字典可以到网上下载,样式非常多。
暴力破解的原理就是通过字典里已有的那些字符去一个个尝试登录,理论上说,只要字典足够大,这样的穷举就能够成功。
不过字典越大,工具尝试的次数就越多,那消耗的时间就越长。

暴力破解流程
尝试登录,进行抓包,查看数据包中的信息,观察含有的元素元素,比如可能含有token。

查看返回信息,确认目标是否存在暴力破解的可能。

暴力破解漏洞修复
1、如果用户登录次数超过设置的阈值,则锁定账号。

2、如果某个IP登录次数超过设置的阈值,则锁定IP。(这个方式有一个缺陷,可能一个IP有多个用户使用,那可能导致用户无法登录)

3、使用安全的验证码,比如通过发送手机验证码。

下面通过 pikachu 靶场中的暴力破解模块对几种暴力破解的方式进行测试。

基于表单的暴力破解

进入可以看到一个登录界面。
在这里插入图片描述
先尝试登录,随便输入123/123,可以看到返回信息为不存在,也没有其他的什么验证机制。
在这里插入图片描述
用 burp 抓包,可以看到他的一些元素,只有账号和密码。
在这里插入图片描述
按 ctrl + i 把包发送到 intruder 模块进行暴力破解。

注意如果只爆破一个参数的话,选择 sniper 。但是我们这里需要爆破两个参数,就选择cluster bomb。
在这里插入图片描述
如果标记的信息不只是账号和密码或存在错误,那我们需要重新进行标记。

先点 clear 对标记进行清除,然后在选中我们要爆破的账号密码123/123点击 add 标记。
在这里插入图片描述
在playload 一栏中,payload set处选择2,即爆破2个参数。

进行载入字典,可以点 load 载入字典文件,也可以在 add 那一行进行手动输入可能存在的账号密码。
在这里插入图片描述
最后点击 Start attack 进行爆破,可以看到正在爆破的界面。

通过在length一项来判断,长度不一样的即为爆破成功的信息。
在这里插入图片描述

验证码绕过(on server)

同样是一个登录界面,与前面相比多了一项验证码的输入。
在这里插入图片描述
尝试随便输入123/123/123,这里我们知道输入的三项都是错误的,但是返回信息只显示了验证码错误。
在这里插入图片描述
再尝试随便输入123/123,验证码按要求正确输入。

这个时候才回显了账号或密码错误。
在这里插入图片描述
进行抓包,可以看到数据中的参数与前面相比多了一项vcode,就是输入的验证码的参数。
在这里插入图片描述
这个时候,我们先随便输入账号密码123/123,输入要求的正确的验证码,然后按 ctrl + R 尝试发送到 repeater 模块测试回显。

在箭头所指的搜索栏进行搜索回显信息的关键字(前面我们已经测试了不同填写方式的两种回显),然后就可以看到成功回显了信息,指我们的 username or password 错误,但是验证码正确。
在这里插入图片描述
我们再尝试修改这条请求的信息,把账号或者密码修改一下,再次发送。

根据回显信息得知得到的仍然是账号密码错误,验证码正确的结果。
在这里插入图片描述
也就是说,我们现在抓到的这个包可以直接进行爆破,因为在这个包验证码是可以一直用的,和前面一样爆破账号和密码这两个参数。

回到代理界面,把包发送到 intruder 模块进行爆破,方法和前面一样。
在这里插入图片描述

验证码绕过(on slient)

界面中同样需要输入账号密码、验证码三项。
在这里插入图片描述
老样子,尝试随便输入123/123/123,可以看到有弹窗出现显示验证码错误。
在这里插入图片描述
按要求输入正确的验证码后,就回显了 username or password 错误。
在这里插入图片描述
在这之前,似乎和前面那题没有什么区别。
再用 burp 抓包看看,这里也和前面一样,有账号密码、验证码三个参数。
在这里插入图片描述
再把包发到 repeater 模块进行测试。

这个时候发现即使是错误的验证码,他的响应却没有显示验证码错误,而是显示 username 或 password 错误。
在这里插入图片描述
那这样就证明其实这个验证码是形同虚设的,后端不会对验证码进行验证。

既然验证码正不正确这个请求的响应都是一样的,那就可以直接去爆破了,爆破账号和密码这两个参数。

虽然到此可以进行暴力破解出账户和密码了,不过我们还可以了解一下这个验证码的源码。

在刚刚 repeater 模块测试的时候,可以在响应界面明显发现一串 JavaScript 代码,是与验证码有关的。

这里就体现了前面我们尝试验证码错误的时候是以弹窗的方式出现,而不是和前面一样在界面上回显信息。

而且这个验证码的验证是在客户端上实现的,后台不会对错误的验证码进行验证。

这个 JavaScript 代码里有 createcode() 和 validate() 这两个函数。

createcode() 函数会从0-9和26个大写字母中随机挑选5个作为验证码,然后用 validate() 函数去验证我们输入内容的准确性。
在这里插入图片描述
再回到 pikachu 网页,按 F12 查看源代码,用定位符找到验证码位置处的代码,可以看到每次出现验证码,都会调用createcode() 函数改变验证码。
在这里插入图片描述

token防爆破

进入看到是一个普通的登录界面。
在这里插入图片描述
随便输入123/123,看看是否有啥异常。

显示账号或密码错误,用 burp 进行抓包。

可以看到除了 username 和 password ,还有一个 token 参数。

token 参数就是用来防止暴力破解的,因为 token 是一个随机值,无法被破解。

pikachu靶场后面的 csrf 测试模块中也有 token 这个东西用来防 csrf 漏洞。

这样看来 token 参数是一个很nb的东西(很安全的东西)。
在这里插入图片描述

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Goodric

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值