sql注入測試的思路

原文鏈接:https://blog.csdn.net/Breeze_CAT/article/details/84833522

在找好需要測試的功能點之後,針對每種功能點(參數),sql注入測試一般遵循下面步驟:
1.測試注入類型,數字型or字符型

如果參數中直接包含字母,那麼直接可以判斷是字符型參數,如id=4a。

若參數是數字通常可以考慮輸入表達式來判斷,如id=6,可嘗試輸入id=7-1或id=3*2

如果返回結果和id=6相同,可以確認爲數字,進行2. 邏輯判斷
若返回空,可進一步測試是否爲字符型或是否有過濾。在參數後加單引號,如id=6’
若出現了數據庫報錯,那麼極大可能存在字符型sql注入,直接進行2.邏輯測試。
如果返回空或正常,則進行4. 過濾判斷
2. 測試邏輯語句

以邏輯真和邏輯假共同測試,形如:

id=6' and 1=1 -- 
id=6' and '1'='1
id=6' and 1=2 --
id=6' and '1'='2
//如果是數字型注入,那麼id=6'後的單引號省略

根據實際情況來判斷是否需要拼接語句,拼接方法也因地制宜
若邏輯真返回結果和id=6結果相同,邏輯假返回空,則可以判斷存在sql注入
若邏輯真和邏輯加返回結果都和id=6結果相同或都爲空,則進行4. 過濾判斷
若過濾判斷成功繞過過濾,但也沒有返回符合邏輯真假的結果,則不存在sql注入或進行3. 延時判斷
3. 測試延時語句
在一些情況下,可根據個人判斷,假如一個頁面的返回結果可能和參數無關,也就是說,參數的查詢結果或語句報錯都不會影響頁面的返回的情況下,可以嘗試延時注入,如id=6 and sleep(5) –
若成功延時返回,則說明存在sql注入
若沒成功延時,則進行4. 過濾判斷,過濾測試若成功繞過,也沒有觸發延時,則不存在sql注入
4. 測試有無過濾策略
下面測試僅針對“過濾”,如被“攔截”比較明顯,無需測試。首先進行fuzz測試,輸入如id=6asidji
若結果和id=6相同,則後臺存在數據類型轉換或非直接飲用參數,不存在sql注入
若返回結果空則進行特殊單詞過濾檢測,如id=6and,id=6sleep(5),id=6’等
若返回結果和id=6相同,說明目標單詞被過濾,嘗試替換繞過後繼續測試,若找不到繞過方式,懷疑爲白名單或無法繞過,可認爲不存在sql注入
若返回結果爲空,則說明沒有被過濾,嘗試單詞組合,如id=6 and(這句話測試空格和and的組合,還有其他組合,具體組合方式因地制宜,無需構造完整的sql語句)
若返回結果和id=6相同,則被過濾,嘗試替換繞過後繼續測試,若找不到繞過方式,懷疑爲白名單或無法繞過,可認爲不存在sql注入
若返回結果爲空,則說明不存在過濾,進行更多的組合測試,若沒發現過濾,那麼結合之前的1. 2. 3.三步測試結果(一定是前三步沒有收穫纔會進行這一步)可得出結論不存在sql注入。
根據實際情況進行http協議層面的繞過,如測試中目標開啓了waf,懷疑被waf過濾,那麼可嘗試http協議繞過。

轉自:https://blog.csdn.net/Breeze_CAT/article/details/84833522

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