1. 程式人生 > >sql注入攻擊與防禦第二章

sql注入攻擊與防禦第二章

第二章 SQL注入測試

在知道什麼是sql注入以及sql注入的產生過程之後,自然的我們就會想到在什麼情況下可以進行sql注入?怎麼進行sql注入?


首先回答第一個問題,並非所有的網站都可以進行sql注入攻擊,sql注入漏洞只會出現在訪問資料庫的應用中,如果應用未連線任何資料庫,那麼便不會收到SQL注入攻擊,即便連線了資料庫,也不代表就易受到攻擊,這需要我們去判斷。所以我們首先應該判斷是否能進行SQL注入攻擊,然後尋找如何進行SQL注入。

尋找SQL注入

因為一般情況下,我們很難訪問到應用的原始碼,所以我們需要藉助推理進行測試,這時候要非常細心。

藉助推理進行測試

識別sql注入漏洞有一種簡單的規則:通過傳送意外資料來觸發異常,瞭解哪種型別的請求會觸發異常,檢測異常,通常會返回相應的資料庫錯誤 應用程式的響應,如果你看到了這樣的錯誤,您就能肯定某應用易受某種SQL注入攻擊。

SQL盲注

首先我們要理解sql盲注與普通注入的區別,普通注入是會顯示一些錯誤資訊在頁面上給攻擊者判斷,也就是說它的返回結果會有多種情況,從而方便攻擊者分析;而盲注的返回結果一般則是隻有兩種情況,即TRUE和FALSE,這樣說並不是很準確,因為SQL查詢無非就這兩種情況,應該說是盲注的時候你只能得到一個正常的頁面或者是什麼頁面的不存在,攻擊者無法檢索查詢結果。

確認SQL注入

當識別出異常後,我們需要構造一條有效的SQL注入語句來確認SQL注入漏洞。

1.區別數字和字串

資料庫包含不同的資料型別,可以將他們分為兩類:

數字:不需要單引號來表示

字串:需要單引號來表示

2.內聯SQL注入

內聯注入是指向查詢中注入一些SQL程式碼後,原來的查詢仍然會全部執行。

3.終止式SQL注入

終止式SQL注入是指攻擊者在注入SQL程式碼後,通過將原查詢語句的剩餘部分註釋後,從而成功的結束原來的查詢語句。

資料庫的註釋符號:--,#(MySQL),/* */

4.時間延遲

測試應用程式是否存在SQL注入漏洞時,經常發現某一潛在的漏洞難以確認,這可能源於多種原因,但主要是因為Web應用未顯示任何錯誤,因而無法檢索任何資料,對於這種情況,要想識別漏洞,可以向資料庫注入時間延遲,該技術適合盲注。

MySQL沒有延遲函式,但可以使用執行時間很長的函式來引入延遲,如BENCHMARK函式。

自動尋找SQL注入

有些用於尋找SQL注入漏洞的工具,可以自行百度^-^