ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

DVWA靶场Brute Force暴力破解练习

2021-07-16 13:05:53  阅读:332  来源: 互联网

标签:暴力破解 res Brute DVWA ston GLOBALS mysqli ___ payload


DVWA靶场练习—— Brute Force暴力破解


暴力破解:通过穷举法列举出所有可能的结果,然后一个一个验证是否满足条件。

【Low】

使用burpsuite代理抓包,将抓取到的数据包发送到Intruder,或者使用快捷键ctrl+i,然后对参数行进设置。
Positions设置:
在这里插入图片描述

Payloads设置:
在这里插入图片描述

开始进行攻击:
在这里插入图片描述

长度与众不同的就是爆破出来的密码。
后台码源:

<?php if( isset( $_GET[ 'Login' ] ) ) { // Get username $user = $_GET[ 'username' ]; // Get password $pass = $_GET[ 'password' ]; $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 echo "

Username and/or password incorrect.
"; } ((is_null($___mysqli_res = mysqli_close($GLOBALS["___mysqli_ston"]))) ? false : $___mysqli_res); } ?>

代码直接获取用户输入的账号密码,密码经过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 "

Username and/or password incorrect.
"; } ((is_null($___mysqli_res = mysqli_close($GLOBALS["___mysqli_ston"]))) ? false : $___mysqli_res); } ?>

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 "

Username and/or password incorrect.
"; } ((is_null($___mysqli_res = mysqli_close($GLOBALS["___mysqli_ston"]))) ? false : $___mysqli_res); } // Generate Anti-CSRF token generateSessionToken(); ?>

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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有