• DVWA靶场&Brute Force 暴力破解&审计通关教程


    在这里插入图片描述

    如果你想搭建靶场可以购买蓝易云服务器搭建

    🤪🤪🤪🤪🤪🤪点击查看-蓝易云服务器

    LOW

    Brute Force 暴力破解

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nT2yWBR7-1660110738463)(D:\小迪2022\2022\PHP代码审计DVWA\PHP代码审计DVWA.assets\image-20220808152019550.png)]

    首先暴力破解的话,有破坏加密的,有破解其他类的账户类型等等的,那么这里是破解账户密码

    那么暴力破解的概念也非常的好理解就是单纯的对账户和密码上的尝试破解,用到的就是用不同的账户和密码去进行登录看看那个能登录成功

    代码分析

    
    //if判断
        //这里用到了isset函数,这个函数用于检测的是返回值是否为空,就是用于检测变量是否已设置并且非 NULL
    if( isset( $_GET[ 'Login' ] ) ) {
        // Get username
        //这里就是设置了一个user变量作用是获取用户输入的用户名称
        $user = $_GET[ 'username' ];
    
        // Get password
        #这里就是设置了一个pass变量作用是获取用户输入的密码
        $pass = $_GET[ 'password' ];
        //这里设置的密码验证,将用户输入的密码进行MD5加密【用于与数据库进行校验,数据库的密码信息是md5的】
        $pass = md5( $pass );
    
        // Check the database
        //设了一个MySQL的查询语句查询的是在user表查询条件user是不是等于来自变量user的值,password是不是用户输入的密码
        $query  = "SELECT * FROM `users` WHERE user = '$user' AND passwor d = '$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判断 if( $result && mysqli_num_rows( $result ) == 1 ) { // Get users details【获取用户详细信息】 $row = mysqli_fetch_assoc( $result ); $avatar = $row["avatar"]; // Login successful //登录成功就进去 //提示Welcome to the password protected area 正常用户名称 echo "

    Welcome to the password protected area {$user}

    "
    ; //输出一个照片 echo "{$avatar}\" />"
    ; } else { // Login failed //登录失败就提示Username and/or password incorrect. echo "

    Username and/or password incorrect.
    "
    ; } //账户密码验证完关闭与数据库的连接【让别人验证连】 ((is_null($___mysqli_res = mysqli_close($GLOBALS["___mysqli_ston"]))) ? false : $___mysqli_res); } ?>
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44

    看到这个代码好像也没有讲到暴力破解的东西

    是的,是没说哈哈哈哈哈

    但是流程还是要走的

    那么暴力破解还是要看他的数据包

    这个就是我们登录的数据包

    可以看见username和Password

    他们对应的值都没有加密【就算加密其实也是就要破的,只不过麻烦了一点点】

    GET /vulnerabilities/brute/?username=1&password=1&Login=Login HTTP/1.1
    Host: dvwa.com
    User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:103.0) Gecko/20100101 Firefox/103.0
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
    Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
    Accept-Encoding: gzip, deflate
    DNT: 1
    Connection: close
    Referer: http://dvwa.com/vulnerabilities/brute/
    Cookie: PHPSESSID=t5s977oj3kedvdi788a3pl5s95; security=low
    Upgrade-Insecure-Requests: 1
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    首先抓取登录数据包

    我们直接右键发送到测试器模式上

    我们添加这两个1为爆破点

    按照配置就可以了

    然后我们点击payloads

    在这里插入图片描述

    这里有1和2

    在这里插入图片描述

    分别是我们第一个选择的username和第二选择的Password

    所以1就是username2就是password

    来到这一步我们就需要配置爆破的字典了

    字典是什么牛马呢?

    字典是什么?

    这里说字典,通俗一点来说就是两个文件,一个文件存在着大量的用户账户,另一个存在的大量的密码

    弱口令就是,绕过去猜他的账户和密码是什么

    演示

    比如我们的账户字典里面是admin admin1 admin2…等等,而我们的密码字典是123,1234,12345

    当我们去弱口令的时候啊

    就是一个一个去比对

    一个一个账户去试

    账户是admin密码是123

    账户是admin密码是1234

    账户是admin密码是12345

    账户是admin1密码是123

    就这样一个一个去试

    导入字典

    下面就需要导入字典就可以了

    在这里插入图片描述

    点击这个就可以导入字典了

    1号导入用户字典【字典晚上下载,我前面的文章也有分享字典】

    导入完后更换到2号

    导入密码字典

    在这里插入图片描述

    在这里插入图片描述

    导入完毕后点击右上角的启动按钮

    在这里插入图片描述

    进行爆破

    在这里插入图片描述

    这样他就进行了爆破

    那么怎么查看哪些账户和密码是成功的呢

    点击Length

    在这里插入图片描述

    返回值长度排序

    在这里插入图片描述

    我们发现这有一条数值和其他数值不一样的

    他是4704其他的是比他小的4666

    那么这个4704对应的账户和密码可能就是正确的,【数值越大可能他就是正确的账户密码】

    验证一下

    在这里插入图片描述

    返回的是一张图片和一段话

    Welcome to the password protected area admin

    这就是简单级别的暴力破解

    在账户和密码的基础上的

    Medium

    Brute Force 暴力破解

    和LOW级别的一样操作

    High

    Brute Force 暴力破解

    代码分析

    Brute Force Source
    vulnerabilities/brute/source/high.php
    <?php
    
    if( isset( $_GET[ 'Login' ] ) ) {
        // Check Anti-CSRF token
        //这里多了一个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 passwor d = '$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 "{$avatar}\" />"; } 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 //生成Token generateSessionToken(); ?>
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50

    LOW级别代码

    
    //if判断
        //这里用到了isset函数,这个函数用于检测的是返回值是否为空,就是用于检测变量是否已设置并且非 NULL
    if( isset( $_GET[ 'Login' ] ) ) {
        // Get username
        //这里就是设置了一个user变量作用是获取用户输入的用户名称
        $user = $_GET[ 'username' ];
    
        // Get password
        #这里就是设置了一个pass变量作用是获取用户输入的密码
        $pass = $_GET[ 'password' ];
        //这里设置的密码验证,将用户输入的密码进行MD5加密【用于与数据库进行校验,数据库的密码信息是md5的】
        $pass = md5( $pass );
    
        // Check the database
        //设了一个MySQL的查询语句查询的是在user表查询条件user是不是等于来自变量user的值,password是不是用户输入的密码
        $query  = "SELECT * FROM `users` WHERE user = '$user' AND passwor d = '$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判断 if( $result && mysqli_num_rows( $result ) == 1 ) { // Get users details【获取用户详细信息】 $row = mysqli_fetch_assoc( $result ); $avatar = $row["avatar"]; // Login successful //登录成功就进去 //提示Welcome to the password protected area 正常用户名称 echo "

    Welcome to the password protected area {$user}

    "
    ; //输出一个照片 echo "{$avatar}\" />"
    ; } else { // Login failed //登录失败就提示Username and/or password incorrect. echo "

    Username and/or password incorrect.
    "
    ; } //账户密码验证完关闭与数据库的连接【让别人验证连】 ((is_null($___mysqli_res = mysqli_close($GLOBALS["___mysqli_ston"]))) ? false : $___mysqli_res); } ?>
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44

    那么high级别这关

    最大的区别在于tkoen

    Token是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个Token便将此Token返回给客户端,以后客户端只需带上这个Token前来请求数据即可,无需再次带上用户名和密码。Token的目的是为了减轻服务器的压力,减少频繁的查询数据库,使服务器更加健壮。

    操作

    首先一样是先抓包

    在这里插入图片描述

    然后发送到测试器模式下

    右键选择

    在这里插入图片描述

    那么需要设置三个爆破点

    在这里插入图片描述

    照图设置

    设置好后

    点击options

    在这里插入图片描述

    并找到

    Grep-Extract

    在这里插入图片描述

    点击add

    在这里插入图片描述

    刷新后我们要找到token部分

    在这里插入图片描述

    并且我们还要把值赋值下来

    后面有用

    bdfe35f735cfe61010fba7de600c4850

    然后点击OK

    在这里插入图片描述

    然后呢往下面划

    找到

    Redirections

    点上这个Always

    在这里插入图片描述

    然后设置线程

    点击Resource Pool

    在这里插入图片描述

    在这里插入图片描述

    弄完后点击

    payloads

    在这里插入图片描述

    就需要设置账户密码什么的了

    账户和密码和前面差不多

    但是tokon

    有的不一样

    类型选择Recursive grep

    在这里插入图片描述

    设置完这些后

    点击启动

    在这里插入图片描述

    长度最长的

    一个对应值

    我们尝试登录试试

    在这里插入图片描述

    返回了一张图片和

    Welcome to the password protected area admin

  • 相关阅读:
    Win32编程串口超时结构体的一般性设置
    DOPE-FITC在细胞定位、动态追踪等方面的应用-星戈瑞
    视频号怎么下载保存别人的视频,怎么把别人的视频号保存到相册?
    C语言网络编程
    [附源码]java毕业设计校园环境保护监督系统
    计算机毕业设计Java蛋糕网店(源码+系统+mysql数据库+lw文档)
    【滤波跟踪】基于UKF与KF实现单目标无杂波环境下二维雷达量测的目标跟踪算法附matlab代码
    windows苹果商店上架ipa(基于appuploader)
    oracle数据库插入数据时提示ORA-32795: 无法插入到“始终生成”身份列
    Python基础语句
  • 原文地址:https://blog.csdn.net/weixin_54882883/article/details/126265090