1.暴力破解
Burte Force(暴力破解)概述
“暴力破解”是一攻击具手段,在web攻击中,一般会使用这种手段对应用系统的认证信息进行获取。其过程就是使用大量的认证信息在认证接口进行尝试登录,直到得到正确的结果。为了提高效率,暴力破解一般会使用带有字典的工具来进行自动化操作。
理论上来说,大多数系统都是可以被暴力破解的,只要攻击者有足够强大的计算能力和时间,所以断定一个系统是否存在暴力破解漏洞,其条件也不是绝对的。我们说一个web应用系统存在暴力破解漏洞,一般是指该web应用系统没有采用或者采用了比较弱的认证安全策略,导致其被暴力破解的“可能性”变的比较高。这里的认证安全策略, 包括:
1.是否要求用户设置复杂的密码; 2.是否每次认证都使用安全的验证码(想想你买火车票时输的验证码~)或者手机otp; 3.是否对尝试登录的行为进行判断和限制(如:连续5次错误登录,进行账号锁定或IP地址锁定等); 4.是否采用了双因素认证; ...等等。 千万不要小看暴力破解漏洞,往往这种简单粗暴的攻击方式带来的效果是超出预期的!
用已知的库去登录其他网站,撞库的行为。
尝试连续登录失败,进行登录限制。
设置工控措施。
准备一个字典,一个自动化的工具进行测试
准备一个好用的字典,在特定的场景对字典进行优化
实现演示
狙击手 sniper
只能选择一个payload,如果你设置的变量大于等于1,会按照顺序先在第一个变量出运行payload,然后再在第二个变量处运行payload,以此类推。
破城槌 battering ram
只能选择1个payload,在设置的多个变量出会同时使用一个payload
音叉 pitch fork
选择几个变量就需要设置几个payload,所有的payload在运行时是以一一对应的关系
集束炸弹 clusterbomb
有几个变量就需要设置几个payload,所有的payload会进行排列组合,会将所有的组合可能进行实现
基于表单的暴力破解
使用音叉进行intruder
成功后在response页面会有登录成功的显示,而且在长度处猜解成功返回的数据包和其他数据包的长度是不一样的。
验证码绕过(on client)
一般一个验证码会设置超时间 ,一般一个验证码只能使用1次。
通过查看网页源代码可以查看到验证码是在前端进行的验证。在前端进行验证一般来说是不可靠的。
<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>
不安全的验证码的方式