暴力破解通俗来说就是“撞库”,是现在最流行的密码破解方式之一。它的实质就是枚举法,通过大量穷举的方式来尝试获取用户口令,即猜口令。并且暴力破解也不仅仅只用来暴力破解,也可以发现Web应用程序中的隐藏页面和内容。
造成这样的漏洞的原因主要和不安全的口令设置和不可靠的数据传输组成,其中不安全的口令设置又可以分为使用弱口令和使用默认口令。在生活中人们为了方便记忆往往会选择简单易记的密码口令,但这样做的同时也带来了隐患,这使得攻击者可以使用暴力破解工具轻松获取口令;另外类似于mysql、tomcat这些软件的用户和密码经常都是常见的默认设置,而这样也更容易被攻击者猜测出密码口令;在使用http、ftp传输口令时数据流一般是是明文的,这就导致攻击者可以截取数据流破解口令。
pikachu中为我们提供了4种暴力破解类型:基于表单的暴力破解、验证码绕过(on server)、验证码绕过(on client)、token防爆破,我们可以学习利用。
(1)基于表单的暴力破解 基于表单的暴力破解是最简单的暴力破解,没有验证码的干扰可以直接用常用名撞库用户和密码,具体过程如下: 1.打开pikachu中的基于表单模块,随便输入一个用户名和密码用于让burp截取发送的数据包,打开burp中的“代理”模块点击“拦截请求”,此时点击pikachu界面的login键,之后就可以在“目标”模块的网络地图界面找到抓包结果,如图: 2.将抓包结果发送给intruder准备开始撞库,打开测试器将用户名和密码设为撞库的变量(在目标变量前后添加§符号),一共有4种攻击类型(见表1.1),在本次撞库中我们选择集束炸弹(Cluster bomb),如图所示,选择下一步 攻击类型表 3.打开有效载荷界面,在第一个有效负载集中加载猜测的用户名列表,在第二个有效负载集中加载猜测的密码列表,如图 4.点击“开始攻击”,在撞库结果中发现除了第1条请求以外,其他的响应串的长度都为35076,而第1条请求的响应串长为35052,说明只有第1条撞库成功,最后得出用户名为admin,密码为123456,如图。 (2)验证码绕过(on server) 1.打开pikachu中的验证码绕过(on server)模块,随便输入一个用户名和密码并输入正确的验证码,用于让burp截取发送的数据包,打开burp中的“代理”模块点击“拦截请求”,此时点击pikachu界面的login键,之后就可以在“目标”模块的网络地图界面找到抓包结果,如图1.8、图1.9所示。 2.将抓包结果发送给repeater分析验证码的运行方式,如图1.10所示。 3.点击“发送”之后在响应界面出现一个pikachu的刷新界面,此时我们将代码中的用户名和密码修改并输入一个正确的验证码再次点击“发送”,发现页面下出现“username or password is not exists”,我们再次修改用户名和密码的输入,但这次不更改验证码,点击“发送”,发现仍然提示的是“username or password is not exists”,而不是“验证码输入错误哦!”,说明此时验证码没有刷新,我们继续按照第一种情况来撞库得到用户名和密码,如图1.10、图1.11. 根据对前端代码的分析可以知道,我们提交的验证码会被与存储在服务器session中的验证码做验证,但是由于在验证完成后,没有及时的销毁session,使用过的session值仍然可以重复使用。 (3)验证码绕过(on client) 首先需要分析一下系统是如何生成验证码的,我们通过查看网页源代码(如图1.13)发现验证码是js随机生成,只在前端处理,没有传值到后端。 1.打开pikachu中的验证码绕过(on client)模块,随便输入一个用户名和密码并输入正确的验证码,用于让burp截取发送的数据包,打开burp中的“代理”模块点击“拦截请求”,此时点击pikachu界面的login键,之后就可以在“目标”模块的网络地图界面找到抓包结果,如图1.14、图1.15所示。 2.将抓包结果发送给repeater分析验证码的运行方式,如图1.16所示。 3.点击“发送”之后在响应界面出现一个pikachu的刷新界面,此时我们将代码中的用户名和密码修改并输入一个正确的验证码再次点击“发送”,发现页面下出现“username or password is not exists”,我们再次修改用户名和密码的输入,但这次不更改验证码,点击“发送”,发现仍然提示的是“username or password is not exists”,而不是“验证码输入错误哦!”,说明此时验证码没有刷新,我们继续按照第一种情况来撞库得到用户名和密码,如图1.17、图1.18. (4)token防爆破 1.打开pikachu中的token防爆破模块,随便输入一个用户名和密码,用于让burp截取发送的数据包,打开burp中的“代理”模块点击“拦截请求”,此时点击pikachu界面的login键,之后就可以在“目标”模块的网络地图界面找到抓包结果,如图1.19、图1.20所示。 2.将抓包结果发送给intruder准备开始撞库,打开测试器将密码和token设为撞库的变量(在目标变量前后添加§符号),在本次撞库中我们选择音叉(pitchfork),如图1.21、图1.22所示,选择下一步。 3.打开测试器模块中的选项对攻击进行配置,找到grep-extract功能,勾选“从响应中提取以下项目”,点击“添加”,我们通过搜索token前的代码value=”和之后的代码”/>找到token的位置并且要记住token值.之后为了可以处理变化的token,我们要将重定向的关注频繁度设为“总是”。需要将线程数设为1,这样方便burp处理,不容易因为组合过多而崩溃。如图1.23、图1.24、图1.25: 4.密码仍然和第一种破解法一样,设置token时需要将刚才我们找到的token生成代码放入,我们选择递归搜索,将生成token的代码放入其中,再将刚才的token值输入“第一个初始”中,如图1.26、图1.27 5.点击“开始攻击”,在撞库结果中发现除了第2条请求以外,其他的响应串的长度都为34868,而第2条请求的响应串长为34844,说明只有第1条撞库成功,最后得出用户名为admin,密码为123456,如图1.28。
|