1. 程式人生 > 其它 >DVWA-SQL Injection (Bind) SQL盲注

DVWA-SQL Injection (Bind) SQL盲注

盲注同於union select查詢注入,盲注只能得到資料庫回顯的正確和錯誤,利用返回的正確和錯誤一個一個判斷。

LOW

審計原始碼

<?php

if( isset( $_GET[ 'Submit' ] ) ) {
    // 獲取 id 
    $id = $_GET[ 'id' ];
    // 定義存在為 false
    $exists = false;
    // 判斷資料庫型別
    switch ($_DVWA['SQLI_DB']) {
        // MYSQL資料庫
        case MYSQL:
            // 資料庫查詢
            $query  = "SELECT first_name, last_name FROM users WHERE user_id = '$id';";
            $result = mysqli_query($GLOBALS["___mysqli_ston"],  $query ); // Removed 'or die' to suppress mysql errors
            // 定義存在還是 false
            $exists = false;
            // 判斷資料庫查詢是否有結果
            if ($result !== false) {
                try {
                    // 獲取返回結果中的函式
                    $exists = (mysqli_num_rows( $result ) > 0);
                } catch(Exception $e) {
                    // 沒有結果定義為 false
                    $exists = false;
                }
            }
            ((is_null($___mysqli_res = mysqli_close($GLOBALS["___mysqli_ston"]))) ? false : $___mysqli_res);
            break;
        case SQLITE:
            global $sqlite_db_connection;

            $query  = "SELECT first_name, last_name FROM users WHERE user_id = '$id';";
            try {
                $results = $sqlite_db_connection->query($query);
                $row = $results->fetchArray();
                $exists = $row !== false;
            } catch(Exception $e) {
                $exists = false;
            }

            break;
    }
    // 判斷資料庫是否查詢成功
    if ($exists) {
        // 查詢成功
        echo '<pre>User ID exists in the database.</pre>';
    } else {
        // 找不到使用者
        header( $_SERVER[ 'SERVER_PROTOCOL' ] . ' 404 Not Found' );

        // 插敘失敗
        echo '<pre>User ID is MISSING from the database.</pre>';
    }

}

?>

根據查詢結果,只返回了查詢正確和錯誤兩種結果,對傳入的id沒有進行過濾,所以可以直接進行注入
通過觀察在$id左右加入了'',所以這是一個字元型的注入