Brute Force(暴力破解)
暴力破解:暴力破解(Brute Force Attack)是一种通过尝试所有可能的组合来破解密码或密钥的攻击方法。它的基本思想是系统地、逐一尝试每一种可能的组合,直到找到正确的密码或密钥为止。
LOW
(1)随便输入账号尝试的同时进行burp抓包
在这里我们可以看到是使用get获取参数,且是明文传输,没有验证码类的验证机制,所以可以使用爆破
(2)抓到包后,右键点击Send to Intruder,将抓到的包转到Intruder
在存在爆破点的地方再添加上我们想要他存在的变量。
选择合适的攻击类型,在这里我选择的是第四个:Cluster bomb
由此,low完成
Medium
<?php
// 检查是否有Login参数
if (isset($_GET['Login'])) {
// 获取用户名,并使用mysqli_real_escape_string函数进行转义处理,防止SQL注入
$user = $_GET['username'];
$user = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston"], $user) : ((trigger_error("[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.", E_USER_ERROR)) ? "" : ""));
// 获取密码,并使用mysqli_real_escape_string函数进行转义处理,防止SQL注入
$pass = $_GET['password'];
$pass = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston"], $pass) : ((trigger_error("[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.", E_USER_ERROR)) ? "" : ""));
// 使用md5函数对密码进行加密
$pass = md5($pass);
// 构建SQL查询语句
$query = "SELECT * FROM `users` WHERE user = '$user' AND password = '$pass';";
// 执行查询语句,并将结果保存在result变量中
$result = mysqli_query($GLOBALS["___mysqli_ston"], $query) or die('<pre>' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '</pre>');
// 如果查询结果存在且返回一条记录,说明登录成功
if ($result && mysqli_num_rows($result) == 1) {
// 获取用户详细信息
$row = mysqli_fetch_assoc($result);
// 获取用户头像
$avatar = $row["avatar"];
// 登录成功,输出欢迎信息和用户头像
echo "<p>Welcome to the password protected area {$user}</p>";
echo "<img src=\"{$avatar}\" />";
} else {
// 登录失败,延时2秒后输出错误信息
sleep(2);
echo "<pre><br />Username and/or password incorrect.</pre>";
}
// 关闭数据库连接
((is_null($___mysqli_res = mysqli_close($GLOBALS["___mysqli_ston"]))) ? false : $___mysqli_res);
}
?>
关于Medium难度,它的源码中对于登录这一方面并没有做太多的改动,因此它的爆破过程与Low难度的过程基本一样,想要尝试的朋友可以参考Low难度中的爆破过程,区别是每一次登录失败后会延时2s,别的就没有什么改动了,总体过程影响不大。
另外在这个Medium难度的源码中,它对防止注入做了很多的工作,像比如说,它使用了mysql_real_escape_string 函数,这个函数可以对字符串中的函数进行转义,一定程度上可以防止sql注入,到这个地方会不会想到在Low难度中是否可以通过注入来绕过,可以去试一下。(我在这个地方用了万能密码发现是可以的,在Username处:admin' or '1'='1,在Password处随便填点东西,像123这样的都行,这样就可以成功登陆了)
High
<?php
// 检查是否有Login参数
if (isset($_GET['Login'])) {
// 检查Anti-CSRF令牌是否有效
checkToken($_REQUEST['user_token'], $_SESSION['session_token'], 'index.php');
// 获取并转义用户名输入,防止SQL注入
$user = $_GET['username'];
$user = stripslashes($user);
$user = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston"], $user) : ((trigger_error("[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.", E_USER_ERROR)) ? "" : ""));
// 获取并转义密码输入,防止SQL注入
$pass = $_GET['password'];
$pass = stripslashes($pass);
$pass = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston"], $pass) : ((trigger_error("[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.", E_USER_ERROR)) ? "" : ""));
// 使用MD5对密码进行哈希处理
$pass = md5($pass);
// 构建SQL查询语句
$query = "SELECT * FROM `users` WHERE user = '$user' AND password = '$pass';";
// 执行查询语句,并将结果保存在result变量中
$result = mysqli_query($GLOBALS["___mysqli_ston"], $query) or die('<pre>' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '</pre>');
// 如果查询结果存在且返回一条记录,说明登录成功
if ($result && mysqli_num_rows($result) == 1) {
// 获取用户详细信息
$row = mysqli_fetch_assoc($result);
// 获取用户头像
$avatar = $row["avatar"];
// 登录成功,输出欢迎信息和用户头像
echo "<p>Welcome to the password protected area {$user}</p>";
echo "<img src=\"{$avatar}\" />";
} else {
// 登录失败,随机延时0到3秒后输出错误信息
sleep(rand(0, 3));
echo "<pre><br />Username and/or password incorrect.</pre>";
}
// 关闭数据库连接
((is_null($___mysqli_res = mysqli_close($GLOBALS["___mysqli_ston"]))) ? false : $___mysqli_res);
}
// 生成Anti-CSRF令牌
generateSessionToken();
?>
继续抓包试试看
与之前不同的是high多了一个user-token
-
随机延时
-
登录失败时,随机延时0到3秒再输出错误信息,防止暴力破解攻击。
-
-
生成Anti-CSRF令牌
-
使用generateSessionToken函数生成新的CSRF令牌。
-
在这个难度中,首先从代码中可以发现是加了token验证的。针对这种带有token验证的,我们也可以使用Burp去爆破,接下来是具体的一些步骤:
1,burp抓包
选择pitchfork
payload1
payload2
蓝色框里面的token数值是找的(方法如下)
先点击add,然后点击refetch response 接着ctrl +f token
出来后把它选中复制同时点击OK
接着使用单线程
开始攻击
标签:Force,低中,Brute,ston,GLOBALS,user,pass,mysqli,___ From: https://blog.csdn.net/LIU6636LIU/article/details/140388309