Pikachu靶场:暴力破解之验证码绕过(on client)
实验环境以及工具
Firefox浏览器、Burp Suite、Pikachu靶场
实验原理
验证码用来防止登录暴力破解、防止机器恶意注册。
客户端request登录页面,后台生成验证码:
1.后台使用算法生成图片,并将图片response给客户端;
2.同时将算法生成的值全局赋值存到SESSION中;
校验验证码∶
1.客户端将认证信息和验证码一同提交;
2后台对提交的验证码与SESSION里面的进行比较;
客户端重新刷新页面,再次生成新的验证码:
验证码算法中一般包含随机函数,所以每次刷新都会改变;
实验步骤
1.前期工作
先将Proxy中的intercept关闭,使其不进行拦截,让数据通过监听的端口。
输入正确用户名和密码,输入正确验证码弹出login success
空输入,直接点Login,弹出用户名不能为空
任意输入用户名和密码,不输入验证码,弹出验证码不能为空
任意输入用户名和密码,输入错误验证码,弹出验证码错误
任意输入用户名和密码,输入正确验证码弹出username or password is not exists~
在Firefox浏览器中打开开发者模式(F12)使用选择器找到验证码相关内容
查看页面原码,然后按住Ctrl+f,将creatCode()作为关键字进行查找。
这里发现一段用js写的函数,实现了验证码的产生和判断。那么可以猜测后端(服务器)那边根本就没有验证验证码,所有关于验证码的东西全在前端(web页面)上。
现在在页面上敲出正确的验证码,任意输入用户名和密码,使其正常发出一个POST请求,然后在Burp Suite中将其发送到Repeater里。
2.利用Repeater进行分析
将验证码部分删掉,若是能够正常的返回页面,则前端的验证码就几乎无效。
说明这个位于前端的验证码就是无效的,只能忽悠一下不会技术的人。接下来回到Proxy的HTTP history将POST请求发送到Intruder进行暴力破解。
3.利用Intruder进行暴力破解
进入Positions,选择Cluster Bomb模块,将多余的变量删除,留下username和password两个变量
在Payloads选项里找到Payload Sets,在Payload set里有两个选项,因为有两个变量。这里先设置变量1的字典。
在Payload type里选择Runtime file
同样方法配置好变量2
然后点击Start attack进行攻击,然后单击length进行排序可以看到一个长度比较小的,因为密码错误(username or password is not exists~)和密码正确(login success)所弹出的字符串长度不一样,所以可以根据返回页面的长度来判断是否成功。
总结
将Proxy的Intercept拦截关闭后,通过手动访问目标网页,然后提交表单后,在Proxy的HTTP history中找到最新的POST请求,将其发送到Repeater里进行发包和分析,发现位于前端的js代码实现的验证码并不能影响Burp Suite进行发包。那么直接将POST请求包发送到Intruder中进行破解即可。