SQL注入之注入點的尋找


注入點的判斷

判斷一個鏈接是否存在注入漏洞,可以通過對其傳入的參數(但不僅僅只限於參數,還有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 –’則會報錯。

如果滿足以上三點的話,基本可以認定為字符型注入。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM