1. 程式人生 > >DVWA之暴力破解(Brute_Force Low&Medium)

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

?>