DVWA靶场Brute Force暴力破解练习
作者:互联网
DVWA靶场练习—— Brute Force暴力破解
暴力破解:通过穷举法列举出所有可能的结果,然后一个一个验证是否满足条件。
【Low】
使用burpsuite代理抓包,将抓取到的数据包发送到Intruder,或者使用快捷键ctrl+i,然后对参数行进设置。
Positions设置:
Payloads设置:
开始进行攻击:
长度与众不同的就是爆破出来的密码。
后台码源:
' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '' ); if( $result && mysqli_num_rows( $result ) == 1 ) { // Get users details $row = mysqli_fetch_assoc( $result ); $avatar = $row["avatar"]; // Login successful echo "
Welcome to the password protected area {$user}
"; echo " "; } else { // Login failed echo ""; } ((is_null($___mysqli_res = mysqli_close($GLOBALS["___mysqli_ston"]))) ? false : $___mysqli_res); } ?>
Username and/or password incorrect.
代码直接获取用户输入的账号密码,密码经过MD5加密。对用户输入的账号和密码没有任何过滤。
【Medium】
先试试上述的方法,发现依然可以得到密码。
后台码源:
<?php if( isset( $_GET[ 'Login' ] ) ) { // Sanitise username input $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)) ? "" : "")); // Sanitise password input $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)) ? "" : "")); $pass = md5( $pass ); // Check the database $query = "SELECT * FROM `users` WHERE user = '$user' AND password = '$pass';"; $result = mysqli_query($GLOBALS["___mysqli_ston"], $query ) or die( '' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '' ); if( $result && mysqli_num_rows( $result ) == 1 ) { // Get users details $row = mysqli_fetch_assoc( $result ); $avatar = $row["avatar"]; // Login successful echo "
Welcome to the password protected area {$user}
"; echo " "; } else { // Login failed sleep( 2 ); echo ""; } ((is_null($___mysqli_res = mysqli_close($GLOBALS["___mysqli_ston"]))) ? false : $___mysqli_res); } ?>
Username and/or password incorrect.
mysqli_real_escape_string(string,connection)函数:函数会对sql语句中使用的字符串string中的特殊符号(\x00,\n,\r,\,‘,“,\x1a)进行转义,如果成功会返回被转移的字符串,如果失败则返回false。
对用户输入的参数进行了简单的过滤,对一些预定字符进行了转义。如果输入密码错误,则休眠两秒再进行提交。所以爆破时间可能有点久。
【High】
发现加了user_token参数,所以我们不知要爆破password的内容,还要爆破user_token参数。就不能使用上面的方法来进行爆破。
既然需要对两个参数进行爆破,不妨试试pitchfork(草叉)攻击类型:它将使用多组payload组合,在每个不同的payload标志位置上遍历所有的payload。举例来说,如果有两个payload标志位置,第一个payload值为A和B,第二个payload值为C和D,则发起攻击时,将共发起两次攻击,第一次使用的payload分别为A和C,第二次使用的payload分别为B和D。
将数据包发送至Intruder模块,标记爆破位置及攻击类型。
设置参数,设置攻击线程为1,因为Recursive_Grep模式不支持多线程攻击,选择Grep-Extract提取响应消息中的有用信息。Grep-Extract:通过正则提取返回信息中的内容。
将上述token复制,设置payload,第一个参数password设置如下:
第二个参数user_token设置如下:Recursive_Grep模式会将服务器每次返回的数据来替换payload值,这里用来替换user_token的值。
发现爆破成功。根据其他博客描述,也可以使用python脚本来实现爆破。
后台码源:
<?php if( isset( $_GET[ 'Login' ] ) ) { // Check Anti-CSRF token checkToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' ); // Sanitise username input $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)) ? "" : "")); // Sanitise password input $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)) ? "" : "")); $pass = md5( $pass ); // Check database $query = "SELECT * FROM `users` WHERE user = '$user' AND password = '$pass';"; $result = mysqli_query($GLOBALS["___mysqli_ston"], $query ) or die( '' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '' ); if( $result && mysqli_num_rows( $result ) == 1 ) { // Get users details $row = mysqli_fetch_assoc( $result ); $avatar = $row["avatar"]; // Login successful echo "
Welcome to the password protected area {$user}
"; echo " "; } else { // Login failed sleep( rand( 0, 3 ) ); echo ""; } ((is_null($___mysqli_res = mysqli_close($GLOBALS["___mysqli_ston"]))) ? false : $___mysqli_res); } // Generate Anti-CSRF token generateSessionToken(); ?>
Username and/or password incorrect.
stripslashes(string):去除掉string字符的反斜杠\
mysqli_real_escape_string(string,connection) :函数会对字符串string中的特殊符号(\x00,\n,\r,\,‘,“,\x1a)进行转义。
关于burpsuite更详细的学习可参考:
burpsuite工具的详细使用
标签:暴力破解,res,Brute,DVWA,ston,GLOBALS,mysqli,___,payload 来源: https://blog.csdn.net/c_programj/article/details/118789436