SQL注入之注入點的尋找

注入點的判斷

判斷一個連接是否存在注入漏洞,能夠經過對其傳入的參數(但不單單隻限於參數,還有cookie注入,HTTP頭注入等) 進行構造,而後對服務器返回的內容進行判斷來查看是否存在注入點。php

注入點的種類

1.按注入點參數的類型分類

(1)數字型注入sql

例如id=1這種類型,向數據庫傳入的是數字,參數不須要被引號括起來。數據庫

(2)字符型注入服務器

例如name=admin這種類型,像數據庫傳入的是字符串,參數須要被引號括起來。cookie

2.按照數據請求方式來分類

(1)GET注入工具

HTTP請求方式爲get,注入點通常在get傳入的參數部分,例如?id=1,id即是一個注入點。post

(2)POST注入測試

HTTP請求方式爲post,注入點通常爲提交的HTML表單, 即post傳入的數據內容。編碼

(3)HTTP頭注入spa

HTTP的請求頭存在注入點,例如XFF頭,cookie,Host這些都是常見的注入點。

3.按照語句的執行效果來分類  

 (1)報錯注入

頁面會返回錯誤信息,或者將語句的查詢結果直接返回到頁面(這是最多見的一種注入,通常手注就可搞定)

(2)基於布爾的盲注

盲注的意思就是你沒法直接經過頁面的返回內容來獲取信息,頁面只會返回真假,你須要對一個個字符進行測試,相對於報錯注入,盲注的工做量比較龐大,通常寫腳本或者用工具跑。

(3)基於時間的盲注

頁面沒法直接返回真假,須要構造條件語句查看時間延遲的語句是否成功執行(觀察頁面的返回時間的長短)來進行判斷。

(4)聯合查詢注入

經過union來將多條語句的結果組合到一個結果中

(5)寬字節注入

寬字節注入是由編碼不統一引發的,通常是在PHP+MySQL中出現

(6)堆查詢注入

堆疊查詢能夠構造執行多條語句

(7)二次注入

將攻擊者構造的惡意數據存儲在數據庫後,惡意數據被讀取並進入到SQL查詢語句所致使的注入。

注入類型的判斷

 (1)數字型注入

判斷步驟

1.首先在參數後加個單引號,URL:www.3333.com/text.php?id=1’ 對應的sql:select * from table where id=3’ 這時sql語句出錯,程序沒法正常從數據庫中查詢出數據,就會拋出異常;

2.在參數後加 and 1=1  www.33333.com/text.php?id=1 and 1=1 對應的sql:select * from table where id=3’ and 1=1 該語句先後都爲真,語句執行正常,與原始頁面無任何差別;

3.在參數後加 and 1=2  www.33333.com/text.php?id=1 and 1=2 對應的sql:select * from table where id=3’ and 1=2 該語句爲假,因此沒法返回結果,返回異常。

通常知足以上三點就能夠認定該注入點的類型爲數字型注入。

(2)字符型注入

判斷步驟

1.加單引號:select * from table where name=’admin’’ 因爲加單引號後變成三個單引號,則沒法執行,程序會報錯;

2.加 and 1=1 此時sql 語句爲:select * from table where name=’admin’ and 1=1’ ,也沒法進行注入,還須要經過註釋符號將其繞過;(MySQL經常使用的註釋符號有#   -- (後面還有個空格) /* */)

構造語句爲:select * from table where name =’admin’ and 1=1#’ 可成功執行返回結果正確;

3.加and 1=2 此時sql語句爲:select * from table where name=’admin’ and 1=2 –’則會報錯。

若是知足以上三點的話,基本能夠認定爲字符型注入。

相關文章
相關標籤/搜索