注入點的判斷
判斷一個鏈接是否存在注入漏洞,可以通過對其傳入的參數(但不僅僅只限於參數,還有cookie注入,HTTP頭注入等) 進行構造,然后對服務器返回的內容進行判斷來查看是否存在注入點。
注入點的種類
1.按注入點參數的類型分類
(1)數字型注入
例如id=1這種類型,向數據庫傳入的是數字,參數不需要被引號括起來。
(2)字符型注入
例如name=admin這種類型,像數據庫傳入的是字符串,參數需要被引號括起來。
2.按照數據請求方式來分類
(1)GET注入
HTTP請求方式為get,注入點一般在get傳入的參數部分,例如?id=1,id便是一個注入點。
(2)POST注入
HTTP請求方式為post,注入點一般為提交的HTML表單, 即post傳入的數據內容。
(3)HTTP頭注入
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 –’則會報錯。
如果滿足以上三點的話,基本可以認定為字符型注入。
