九、暴力破解
9.1 介绍暴力破解漏洞
暴力破解的产生是由于服务端没有做限制,导致攻击者可以通过暴力破解的手段破解所需信息,如用户名、密码、验证码等。暴力破解需要一个庞大的字典,如4位数字的验证码,那么暴力破解的范围就是0000~9999,暴力破解的关键在于字典的大小。
9.2 暴力破漏洞攻击
暴力破解攻击的测试地址为http://127.0.0.1/bp.html。
一般情况下,系统中都存在管理账号:admin,下面我们就尝试破解admin的密码,首先在用户名处输入账号admin,接着随便输入一个密码,使用Burp Suite抓包,在Intruder中玄宗密码处爆破,导入密码字典并开始爆破,如图103所示。
可以看到,有一个数据包的Length值跟其他的都不一样,这个数据包中Payload就是爆破成功的密码,如图104所示。
9.3 暴力破解漏洞代码分析
服务端处理用登录的代码如下所示,程序获取POST参数username和参数password,然后在数据库中查询输入的用户名可密码是否存在,如果存在,则登录成功。但是这里没有对登录的次数做限制,所以只要用户一直尝试登陆,就可以进行暴力破解。
<?php
$con=mysqli_connect("localhost","root","root","test");
// 检测连接
if (mysqli_connect_errno())
{
echo "连接失败: " . mysqli_connect_error();
}
$username = $_POST['username'];
$password = $_POST['password'];
$sql = "select * from users where username='$username' and password='$password'";
$result = mysqli_query($con,$sql);
$row = mysqli_fetch_array($result);
if ($row)
{
exit("login success");
}
else
{
exit("login failed");
}
?>
9.4 暴力破解漏洞修复建议
针对暴力破解漏洞的修复,笔者给出以下两点建议。
-
如果用户登录次数超过设置的阈值,则锁定账号。
-
如果某个IP登录次数超过设置的阈值,则锁定IP。
锁定IP存在一个问题是:如果多个用户使用同一个IP,则会造成其他用户也不能登录。