DVWA之暴力破解(Brute_Force Low&Medium)

摘要:

暴力破解一般分为两种,一种是既不知道用户名和密码,纯蛮力爆破,一种是经过嗅探得到用户名后进行密码爆破,一般较好的系统都会对你登录错误的次数或频率进行限制,如果连续几次输入错误,则限制若干分钟后登录,如果是金融系统或app一般都会对账号进行锁定。今天通过DVWA来练习使用burpsuite实现爆破的过程。

1.先将DVWA安全级别调为low,进行测试,经过手动探测若干次,发现并没有出现锁定。所以进一步使用burpsuite来进行爆破。

2.拦截后将请求信息发送到intruder,点击send to intruder ,点击Clear,然后只保留password变量,如下图

3.设置payload,里面的参数,加载一个密码字典进行爆破

4.在options中选择Grap-Match,可以设置一些爆破成功的特征,例如登录成功的页面是home,index等等。可以在这设置,以便爆破成功可根据此特征判断。DVWA这里登录成功会有提示,所以设置一个关键词 area admin

5.设置完成后,在payload选项卡点击  start  attack,开始爆破,爆破完成如下图所示,根据之前提示特征判断,password即为爆破成功的密码。其实,这里根据Length也可以判断出来,反正这块需根据经验来判断。在此只是说明一些技巧,不一定好用。

6.根据爆破的密码进行登录,成功如下图提示。

7.查看low级别源代码,点击ViewSource,发现代码中对于登录并没有做任何限制。

<?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); 
} 

?> 

8.调为medium级别,点击查看源代码,发现只是多了sleep(2),最后跳转页面时休眠两秒钟,依然可以爆破,只是增加了爆破的时间。


<?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); 
} 

?>

猜你喜欢

转载自blog.csdn.net/liweibin812/article/details/86237357