暴力破解学习

暴力破解

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

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

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

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

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

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

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

基于表单的暴力破解

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

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

先点 clear 对标记进行清除,然后在选中我们要爆破的账号密码123/123点击 add 标记。
暴力破解学习_第5张图片
在playload 一栏中,payload set处选择2,即爆破2个参数。

进行载入字典,可以点 load 载入字典文件,也可以在 add 那一行进行手动输入可能存在的账号密码。
暴力破解学习_第6张图片
最后点击 Start attack 进行爆破,可以看到正在爆破的界面。

通过在length一项来判断,长度不一样的即为爆破成功的信息。
暴力破解学习_第7张图片

验证码绕过(on server)

同样是一个登录界面,与前面相比多了一项验证码的输入。
暴力破解学习_第8张图片
尝试随便输入123/123/123,这里我们知道输入的三项都是错误的,但是返回信息只显示了验证码错误。
暴力破解学习_第9张图片
再尝试随便输入123/123,验证码按要求正确输入。

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

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

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

回到代理界面,把包发送到 intruder 模块进行爆破,方法和前面一样。
暴力破解学习_第14张图片

验证码绕过(on slient)

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

这个时候发现即使是错误的验证码,他的响应却没有显示验证码错误,而是显示 username 或 password 错误。
暴力破解学习_第19张图片
那这样就证明其实这个验证码是形同虚设的,后端不会对验证码进行验证。

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

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

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

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

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

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

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

token防爆破

进入看到是一个普通的登录界面。
暴力破解学习_第22张图片
随便输入123/123,看看是否有啥异常。

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

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

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

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

这样看来 token 参数是一个很nb的东西(很安全的东西)。
暴力破解学习_第23张图片

你可能感兴趣的:(知识点学习,靶场测试,安全)