一、暴力破解的概述:
“暴力破解”是一攻击具手段,在web攻击中,一般会使用这种手段对应用系统的认证信息进行获取。 其过程就是使用大量的认证信息在认证接口进行尝试登录,直到得到正确的结果。
二、暴力破解的原理与测试:
针对于系统信息安全的各种认证形式,暴力破解可分为以下几种类型:
1.基于表单型:
即前端的认证形式为“用户名”,“密码”两种认证因素。
先尝试一次登录,可随机输入一次用户名与密码。
若认证错误会返回“username or password is not exists~”,即用户名或密码错误,则进入Burp Suite进行抓包。
将抓包发送到“intruder”选项,通过右边的选键选定需要破解的用户名和密码。
选定好后如下,再进入“payload”选项。
设置准备好的字典以及破解方式开始爆破。
爆破后可根据字符串排列得到破解成功的一组用户名与密码。
基于表单的暴力破解测试完成。
2.验证码绕过型:
“验证码绕过”就是利用验证码认证的漏洞,无视或利用验证码从而再次达到暴力破解的方法,有以下两类:
①on-server:
根据前端显示的验证码,利用其验证码“不过期问题”,“逻辑过于简单”等问题,从而进行爆破的方法。
先随机输入一次用户名,密码以及正确的验证码,在Burp Suite中进行抓包。
记住当前的验证码,先猜想该验证码是否过期。
可进入Burp Suite代理选项的历史记录中,将抓包发送到“repeater”选项中,可进行以下操作:
再次运行之前错误的用户名,密码,与验证码,翻看返回的源代码,查看返回的语句;
仅修改正确的验证码,用户名和密码不变,运行后翻看返回的源代码,查看返回的语句;
修改一次用户名或密码,验证码不变,运行后翻看返回的源代码,查看返回的语句。
对比发现,后两次均返回“username or password is not exists~”,即表示两次运行的验证码均有效,可猜想该验证码可一直使用,所以,将抓包发送到“intruder”中进行爆破实验来证明猜想。
设置好字典与爆破类型,验证码部分仍用之前有效的验证码进行爆破。
爆破完毕,猜想正确。
以上可证明,可从前端获取验证码后,进行暴力破解。
②on-client:
根据后端运行可无视验证码,达到暴力破解的方法。
先输入一组用户名与密码,即正确的验证码,从Burp Suite中获取抓包。
从历史记录中发送给“repeater”选项中。
先将验证码部分的数据清空,翻看其返回的源代码,查看返回的语句。
再输入错误验证码,运行,翻看其返回的源代码,查看返回的语句。
发现,无论验证码错误或未填,均显示“username or password is not exists~”,即可猜想在后端可无视验证码直接进行暴力破解,所以,将抓包发送到“intruder”选项进行爆破实验来证明猜想。
爆破完毕,猜想正确。
以上证明,可从后端绕过验证码进行暴力破解。
三、关于token的理解:
token一般在提交信息认证的同时一起提交,并在后台对其进行校验,从而起到防暴力破解的作用,但是若token值输出在前端的源码中,则容易被获取,从而失去防止暴力破解的意义。
先进入pikachu靶场,点击浏览器选项,找到开发者选项,点击选择器,选中用户名,密码的范围,在查看器中可看到token的输出值,以及其数据类型。
刷新后可发现,每次的token值都不一样,可查看pikachu的后端代码。
该代码会先判断有没有提交用户名和密码,随后会对比一起上交的token值与SESSION中的token值是否一致,
若不一致,其不会验证用户名,密码。
当用户请求某个页面的时候,会执行“set_token()”这个函数,如下:
所以每次刷新之后,该函数生成的token值都会显示在如下图的“input”语句中,从而实现
token同用户名,密码一起上交到后端进行验证。
但是由于认证之前,token值已经可以被获取到,所以可以通过相关工具进行获取,所以其
失去了防止暴力破解的意义。
到此,暴力破解的学习内容完成。