返回验证码不正确
返回用户名或者密码不正确
8
返回验证码不能为空
然后刷新页面,会生出新的验证码。
可以发现服务器对验证码的有效性做过校验,一切逻辑正常。
但是如果这个验证码在后台长期不过期,或者过期时间较长。足够我们去爆破用户名和密码,那么就会产生漏洞。
1.输入错误的用户名和密码,然后输入正确的验证码。
然后将包发送到repeater
模块中
注意:如果提示密码错误,请刷新页面。获取新的验证码即可。
然后添加到intruder
设置参数 跑出结果即可。
不安全的验证码——on client
(只在前端处理)绕过
步骤:
1、打开burp suite
,打开PHP study
,打开Pikachu
,点击on client
选项
2、输入一次正确的验证码,随意输入账号密码,进行抓包。
抓包
选中,右键发送至repeater
4、点击raw,随意改一下验证码,点击“go”,若出现用户名或密码错误,而不是验证码错误,则验证码只在前端处理,将地址发到intruder,直接暴力破解,无需考虑验证码。
看,这里提示是用户名和密码错误,而不是验证码错误。
也就是说,前端的这个js验证码就是吓唬人的。
<script language="javascript" type="text/javascript">
var code; //在全局 定义验证码
function createCode() {
code = "";
var codeLength = 5;//验证码的长度
var checkCode = document.getElementById("checkCode");
var selectChar = new Array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9,'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z');//所有候选组成验证码的字符,当然也可以用中文的
for (var i = 0; i < codeLength; i++) {
var charIndex = Math.floor(Math.random() * 36);
code += selectChar[charIndex];
}
//alert(code);
if (checkCode) {
checkCode.className = "code";
checkCode.value = code;
}
}
function validate() {
var inputCode = document.querySelector('#bf_client .vcode').value;
if (inputCode.length <= 0) {
alert("请输入验证码!");
return false;
} else if (inputCode != code) {
alert("验证码输入错误!");
createCode();//刷新验证码
return false;
}
else {
return true;
}
}
createCode();
</script>
接着,我们连着上述步骤进行暴力破解即可!
版权属于:逍遥子大表哥
本文链接:https://cloud.tencent.com/developer/article/1920880
按照知识共享署名-非商业性使用 4.0 国际协议进行许可,转载引用文章应遵循相同协议。