使用到的工具:
BurpSuite
基于表单的暴力破解
通过提示,我们知道答案
我们使用 burpsuite 进行暴力破解
使用步骤
- 拦截网页(intercept)
- 发送到 Intruder
- 在 Intruder 给用户名密码标注,在 Payloads 设定密码库
- 然后进行攻击(attack)
可以看到 admin/123456 和 test/abc123 接收的长度为 33,相比较于下面 56 的比较小,不过上面是属实不知道乍回事。
验证码绕过(on server)
提示: 验证码好像一直有效
不过我试了一下,在网页直接用原来的验证码不行,所以还是得用 burpsuite 进行拦截。
只需要对这两个进行攻击即可。
验证码绕过(on client)
这里说是客户端的,就是前端的,那就可以在浏览器上进行修改了,很容易就查到了相关的 js 函数。
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();
在浏览器上将这里面的 createCode 函数只写一个 return true;即可,然后填上信息,让 burpsuite 来拦截。
token 防爆破?
在浏览器定位 Login 按钮,发现上方还有这个隐藏(hidden)的输入消息,这里面的 value 值每次刷新都会改变,没看到 js 的代码,应该是服务器自己给的。
我们通过 burpsuite 拦截一下。
根据其他教程的方法,都是只给 password 和 token 加上$号,是因为我们每次并发量是 1,所以每次发送一个导致速度上不来,所以就不考虑 username 了。(我们这里也一样)
攻击类型(Attack type)选择 pitchfork。
给 password 设置为 simple list,给上我们的爆破密码库。
给 token 设置为 recursive grep(循环查找字符串)(可以用于每次重新获取网站的某个字符串)
在 Setting 界面(老版本应该是 Option 界面)中的 redirections(重定向)中设置 always(总是)。
然后再 Setting 界面的 grep(查找字符串) - Extract 点击 Add
就可以对重定向文本进行定位了。
最后我们将我们的并发数(concurrent)的最大值设置为 1,每次只发一条请求。
进行攻击
总结
Burpsuite 使用到的功能
- 通过 Cluster Bomb 进行账户密码的爆破
- 对验证码不变(不进行销毁)的登录框进行 js 修改(client),最后爆破。
- 对需要 token 验证的登录框,进行 Pitchfork 进行重定向文本爆破。