从来没有哪个时代的黑客像今天一样热衷于猜解密码 ---奥斯特洛夫斯基
Burte Force(暴力破解)概述
“暴力破解”是一攻击具手段,在web攻击中,一般会使用这种手段对应用系统的认证信息进行获取。 其过程就是使用大量的认证信息在认证接口进行尝试登录,直到得到正确的结果。 为了提高效率,暴力破解一般会使用带有字典的工具来进行自动化操作。
理论上来说,大多数系统都是可以被暴力破解的,只要攻击者有足够强大的计算能力和时间,所以断定一个系统是否存在暴力破解漏洞,其条件也不是绝对的。 我们说一个web应用系统存在暴力破解漏洞,一般是指该web应用系统没有采用或者采用了比较弱的认证安全策略,导致其被暴力破解的“可能性”变的比较高。 这里的认证安全策略, 包括:
1.是否要求用户设置复杂的密码;
2.是否每次认证都使用安全的验证码(想想你买火车票时输的验证码~)或者手机otp;
3.是否对尝试登录的行为进行判断和限制(如:连续5次错误登录,进行账号锁定或IP地址锁定等);
4.是否采用了双因素认证;...等等。
千万不要小看暴力破解漏洞,往往这种简单粗暴的攻击方式带来的效果是超出预期的!
首先看第一关,题目是一个登录界面
看到这种第一想法是尝试弱口令(但是为了把流程走一遍,我们假装什么都不知道)
随便乱输,提示用户或者密码不存在
我们使用burpsuite进行抓包
关于burpsuite的简单用法可以参考我之前的博客:
http://t.csdnimg.cn/H9RCs
http://t.csdnimg.cn/nqkBG
(链接可能会过期,可以直接搜索博客名字)
先开启burpsuite的拦截,随便输入用户名和密码,点击login
查看burpsuite,已经抓到请求包
发送到攻击模块
首先需要清除掉参数位置
在我们需要爆破的参数位置进行添加(用户名和密码我们都不知道都需要爆破)
简单说一下攻击类型的选择
默认是sniper,这个用于单个参数的爆破
由于我们这里是两个参数,因此使用clusterbomb
这个类型可以理解为将两个参数的各种可能情况都两两组合进行爆破
一般我们是导入密码字典
但是字典内容太多,这里仅做演示,因此我自己随便添加了几个用户名和密码
(注意:这里需要设置两个参数分别使用的字典)
之后开始攻击
对于结果的筛选我们一般看长度,长度不同的一般是爆破成功了的(至少回显不一样)
可以看到34997成功爆出用户名为admin,密码为123456
这就是使用bp进行最简单的暴力破解的大致流程
我们可以在前端输入用户名和密码进行验证,确实登录成功
我们继续看第二关,这里多出了一个验证码
经过测试,验证码输入错误是不行的
没有输验证码也是不行的
当然,这些其实都只是前端的一个检查,我们同样可以在输入正确验证码之后进行爆破
为什么我知道它只是前端的一个检验呢,重点来了
我们先随便抓一个包然后使用重发器测试(注意看我标注的三个地方)
可以看到,我的验证码提交的验证码一直都是 j2zppk
这仅仅是满足了前端页面显示的验证码
当我继续重复提交请求时,前端显示的验证码其实是变了的(显示内容确实会刷新)
但是通过回显观察,有提示我验证码错误吗?并没有,而是回显的密码不存在。
这其实就是一个漏洞,我们可以绕过前端验证进行密码爆破。
假设我们已经知道用户名为admin
同样抓包以及设置爆破的参数和爆破的字典(这里只爆破密码所以使用sniper)
成功爆破出密码为123456
还有一种方法,就算我们每次提交的请求,它的验证码会动态的实际变化
(也就是说并不能前端绕过,我们必须直面它,可以使用工具Codex)
先将burpsuite抓到的请求包放进去
找到验证码的位置
也就是这个验证码请求的文件
我们可以先单独测试识别一下,可以看到识别成功
将验证码地址导入(注意:去掉问号后面的内容)
导入爆破字典、设置爆破位置、标记验证码位置、选择爆破方式
还需要填入验证码错误的特征,这里是:验证码输入错误哦!
填入验证码错误特征后,点击start,执行结果如下:
观察可以看到,每次请求输入的验证码都是不同的
并且我们成功爆破出密码为123456
来到第三关,如果输入错误验证码会出现弹窗,说明这个验证也是写在了前端的js代码里
这里更简单,我们只需要将js禁用掉
即使我们不输入验证码,也可以进行登录,并没有出现验证码相关的提示
使用bp进行抓包
使用重发器测试,可以看到即使我们没有输入验证码,提示的也是密码不存在
基于这点,我们就可以像前面那样使用攻击模块进行密码爆破了,这里就不再过多演示。
接下来我们看最后一关也是最重要的一关:token
抓包后使用重发器测试
可以看到多出了一个参数 token
第一次发送回显密码不存在
后续再次发送,回显 csrf token error
说明什么?
说明每次都会对token进行校验,并且token是变化的、随机的
我们可以再次抓包查看,可以看到token变了
查看响应,发现在回显里会出来一个token的值:34671657ed547da9e5305813795
此时我们输入用户名和密码后再次请求
可以看到,出来的token正式我们请求题目页面时回显响应的token值
也就是说我们找到了token的来源
将包发到测试器,设置爆破位置
这里攻击模式我们使用 Pitchfork
这个模式是将每次获取的token与密码一一对应的组合后进行爆破
设置第一个参数密码的字典
设置第二个参数token的字典
选择总是(always)
选择递归搜索,即可以将我们的正则匹配放进去
接下来将线程配置为1(因为递归搜索只支持线程数为1)
开始攻击
可以看到每次请求不同的密码都对应了不同的token
并且成功爆破出密码为123456
至此,关于皮卡丘靶场暴力破解的关卡讲解全部结束
我自认为还是讲得比较详细的了,欢迎大家评论区交流讨论
创作不易,也期待大家的支持与关注!