DVWA之暴力破解(附BurpSuite四种暴力破解方式比较)

DVWA之暴力破解

一、DVWA低级别暴力破解:


Brute Force Source
<?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( '<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 ) {
    
    
        // Get users details
        $row    = mysqli_fetch_assoc( $result );
        $avatar = $row["avatar"];

        // Login successful
        echo "<p>Welcome to the password protected area {
      
      $user}</p>";
        echo "<img src=\"{
      
      $avatar}\" />";
    }
    else {
    
    
        // Login failed
        echo "<pre><br />Username and/or password incorrect.</pre>";
    }

    ((is_null($___mysqli_res = mysqli_close($GLOBALS["___mysqli_ston"]))) ? false : $___mysqli_res);
}

?>



核心部分:

	$query  = "SELECT * FROM `users` WHERE user = '$user' AND password = '$pass';";

这一部分并没有经过任何处理,所以可以使用万能密码进行绕过

admin ‘ or ‘1’ = ‘1

拼接后的语句:

$query  = "SELECT * FROM `users` WHERE user = 'admin ‘ or ‘1’ = ‘1' AND password = '$pass';";

前后两个单引号都被闭合,并插入 or ‘1’ = ‘1’ 语句与AND形成逻辑判断;or 与 and 同时存在时,会先进行and判断,再进行 or 判断,而 1 = 1 恒成立,所以成功绕过。

正常的暴力破解

1.进行抓包
在这里插入图片描述2.发送给intruder并添加变量
在这里插入图片描述

这里已知username为admin,所以只需要添加password变量,对其进行爆破。
在这里插入图片描述
3.导入字典
在这里插入图片描述开始攻击,通过返回长度的不同,判断暴力破解是否成功。
在这里插入图片描述
所以猜测密码为password。
验证,成功登录。
在这里插入图片描述
**

二、DVWA中级别暴力破解:

**

查看源码:


Brute Force Source
<?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( '<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 ) {
    
    
        // Get users details
        $row    = mysqli_fetch_assoc( $result );
        $avatar = $row["avatar"];

        // Login successful
        echo "<p>Welcome to the password protected area {
      
      $user}</p>";
        echo "<img src=\"{
      
      $avatar}\" />";
    }
    else {
    
    
        // Login failed
        sleep( 2 );
        echo "<pre><br />Username and/or password incorrect.</pre>";
    }

    ((is_null($___mysqli_res = mysqli_close($GLOBALS["___mysqli_ston"]))) ? false : $___mysqli_res);
}

?>



发现使用了 mysqli_real_escape_string函数:

mysqli_real_escape_string() 函数转义在 SQL 语句中使用的字符串中的特殊字符。

所以无法使用万能密码进行绕过,但好像可以使用宽字节绕过。
暴力破解方式与低级别相同。

三、四种暴力破解方式的简单解释

狙击手(Sniper):

对数据参数,无论添加多少个payload,其sniper的作用就限于第一个参数变量值遍历字典时,第二个参数或其他参数都处于原参数的变量值,直到第一个参数变量值遍历完字典后才会依次往下进行,同时已经遍历完字典的参数变量值维持原状不再改变,最终以这样的方式完成所有参数变量值的改变,达到暴力破解的目的。

字典 变量一 变量二
a FALSE
b FALSE
c FALSE
d TRUE
e FALSE
f FALSE
g FALSE
h TRUE

如果变量二在字典参数d之前,则爆破失败

撞击物(Battering ram)
在Battering ram模式下,无论添加多少个payload,在遍历字典的时候,其最终的效果就是每个参数变量值都相同,即第一次尝试时所有payload参数变量值都取字典中的第一个,第二次尝试都取字典的第二个,依次遍历完整个字典。

字典 变量一 变量二
a FALSE FALSE
b FALSE FALSE
c FALSE FALSE
d TRUE TRUE
e FALSE FALSE
f FALSE FALSE
g FALSE FALSE
h FALSE FALSE

这种方式针对变量实际参数相同时使用。

交叉棒(Pitchfork)

字典一 变量一 字典二 变量二
a FALSE 1 FALSE
b FALSE 2 FALSE
c FALSE 3 TRUE
d TRUE 4 FALSE
e FALSE 5 FALSE
f 不进行匹配
g 不进行匹配
h 不进行匹配

在Pitchfork中进行的暴力破解,最终效果就是各个payload都需要加载payload集,同时暴力破解的过程即每个payload的变量参数值遍历各自的字典进行匹配,而且都从第一个开始,也就是说这个过程中username和password的匹配与加载字典的排列是一致的,最后,结束的规则是按照哪个字典最少就到它为止,即按最少的截止。

集束炸弹(Clusterbomb)

字典一 变量一 字典二 变量二
a FALSE 1 FALSE
b FALSE 1 FALSE
c FALSE 1 FALSE
d FALSE 1 FALSE
a FALSE 2 FALSE
b FALSE 2 FALSE
c TRUE 2 TRUE
d FALSE 2 FALSE

在Clusterbomb中,最终的结果就是双方遍历整个字典,第一个字典第一个参数值循环完第二个字典所有参数值,直到全部完成,然后第一个字典第二个参数值循环完第二个字典所有参数值,直到全部完成。最终第一个字典的参数值全部完成对第二个字典的遍历,那么就结束了。

猜你喜欢

转载自blog.csdn.net/qq_45742511/article/details/112910242