注入點的判斷
判斷一個連接是否存在注入漏洞,能夠經過對其傳入的參數(但不單單隻限於參數,還有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 –’則會報錯。
若是知足以上三點的話,基本能夠認定爲字符型注入。