PHP代碼審計之SQL注入-Day3

認識SQL注入漏洞

SQL注入攻擊(SQL Injection),簡稱注入攻擊,是web開發中最常見的一種安全漏洞。可以用它來從數據庫獲取敏感信息,或者利用數據庫的特性執行添加用戶,導出文件等一系列惡意操作,甚至有可能獲取數據庫乃至系統用戶最高權限。
而造成SQL注入的原因是因爲程序沒有有效過濾用戶的輸入,使攻擊者成功的向服務器提交惡意的SQL查詢代碼,程序在接收後錯誤的將攻擊者的輸入作爲查詢語句的一部分執行,導致原始的查詢邏輯被改變,額外的執行了攻擊者精心構造的惡意代碼。

SQL注入相關函數

#連接數據庫
mysqli_connect(host,username,password,dbname,port,socket);
#數據庫的查詢
mysqli_query(connection,query,resultmode);
#用關鍵字索引取值
mysqli_fetch_array(connection,MYSQLI_ASSOC);
mysqli_fetch_assoc(connection);
#用數字索引取值
mysqli_fetch_array(connection,MYSQLI_NUM);
mysqli_fetch_row(connection);
#數據處理函數
mysqli_real_escape_string(connection,escapestring);
#轉義在SQL語句中使用的字符串中的特殊字符
#escapestring要轉義的字符串。編碼的字符是NULL(ASCII0)、\n、\r、\、'\"和Control+z
addslashes();#函數返回在預定義字符之前添加反斜槓的字符串。(stripslashes())
#返回在預定義字符之前添加反斜槓的字符串。
#預定義字符是:單引號,雙引號,反斜槓,NULL
preg_match(pattern,subject...);
#搜索subject與pattern給定的正則表達式的一個匹配。

ps:

寫了一個測試頁面
在這裏插入圖片描述

<?php
$servername='127.0.0.1';
$dbname='test';
$username='root';
$pwd='123456';
$conn = mysqli_connect($servername,$username,$pwd,$dbname);
if (!$conn) {
	die('連接失敗:'.mysqli_connect_error());
}
echo 'mysqli_real_escape_string: '.mysqli_real_escape_string($conn,$_GET['test'])."</br>";
echo 'addslashes:'.addslashes($_GET['test'])."</br>";
echo 'preg_match:'.preg_match('/(and|or)/i',$_GET['test'])."</br>"; #過濾and|or
?>

未傳入參數時
在這裏插入圖片描述
傳入參數爲1時
在這裏插入圖片描述
爲1’時
在這裏插入圖片描述
爲1’ and | or時
在這裏插入圖片描述
請讀者自行體會。

SQL注入的防禦

1、嚴格檢查輸入變量的類型和格式對於整數參數。
2、過濾和轉義特殊字符在username這個變量前進行轉義。
3、普通用戶與系統管理員用戶的權限要有嚴格的區分。
4、加強對用戶輸入的驗證

1、加強對用戶輸入內容的檢查與驗證。
2、二是強迫使用參數化語句來傳遞用戶輸入的內容。

SQL注入漏洞的審計流程

1、在seay中開啓查詢日誌
2、查找系統的輸入點,嘗試輸入一些內容並執行
3、跟隨輸入信息,判斷輸入內容是否被過濾,是否可利用
4、構造注入語句進行測試

尋找輸入點

1、表單提交,主要是POST請求,也包括GET請求。
2、URL參數提交,主要爲GET請求參數。
3、Cookie參數提交。
4、HTTP請求頭部的一些可修改的值,比如Referer、User-Agent等。
5、一些邊緣的輸入點,比如.jpg文件的一些文件信息等。

DVWA簡單審計

分析源碼
在這裏插入圖片描述
可以看到SQL語句爲:

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

可以發現未對SQL語句進行任何過濾,導致這個輸入點存在注入。
判斷columns(字段數)
在這裏插入圖片描述
在這裏插入圖片描述
只有兩個字段
在這裏插入圖片描述
在這裏插入圖片描述

不繼續演示了
直接給出payload:

1' union select user,password from users#

本文到此已經結束,由於水平有限,在很多地方肯定有些不足之處,如有紕漏或者錯誤,還請斧正,定當改進。文章寫的很不容易,大家的評論和點贊就是我的最大動力,謝謝支持!

2020-03-11
ro4lsc

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