SQL注入進階之1寬字節注入攻擊

說在開頭:文章是我通過查詢資料後按照自己的理解總結出來的,所以如果有說法不對的地方,歡迎大佬指正~


寬字節注入攻擊可以說是SQL注入的進階攻擊方式,在我之前列出的學習計劃體系中,前面的union聯合查詢注入攻擊、布爾盲注、報錯注入、時間盲注這幾種常見的SQL注入方式,在我之前的博客中已經分析過了,那麼今天在下面這些進階的SQL注入方式中,要翻牌的就是寬字節注入。
在這裏插入圖片描述

原理講解

接下來的講解,將以問答的方式來呈現我對寬字節注入的理解,希望讀我這篇文章的朋友也有所收穫。

1.什麼叫寬字節注入?

先不忙着深入分析,我們先從整體上知道寬字節注入到底是指什麼。按我的理解來總體概述一下:

【MySQL是用的PHP語言,然後PHP有addslashes()等函數,這類函數會自動過濾 ’ ‘’ null 等這些敏感字符,將它們轉義成’ ‘’ \null;然後寬字節字符集比如GBK它會自動把兩個字節的字符識別爲一個漢字,所以我們在單引號前面加一個%df,從而使單引號逃逸。】

2.什麼情況下存在寬字節注入?

寬字節的注入條件有兩個:
1.數據庫編碼設置成GB系列

  • 這裏說的GB系列編碼,不是指PHP頁面的編碼,而是連接數據庫使用的編碼。

2.使用了轉義函數,將GET、POST、cookie傳遞的參數進行過濾,將單引號、雙引號、null等敏感字符用轉義符 \ 進行轉義。

  • 常見的包括addslashes()、mysql_real_escape_string()函數。
  • 轉義函數的轉義作用,就是我們常說的“過濾機制”。

當兩個條件都滿足時,纔會存在寬字節注入。

3.具體原理:
1.通過前面的SQL注入實驗可以發現,字符型的注入點我們都是用單引號來判斷的,但是當遇到addslashes()時,單引號會被轉義成 ’ ,導致我們用來判斷注入點的單引號失效。
所以我們的目的就是使轉義符 \ 失效、使單引號逃逸。

2.我們通過URL編碼來分析,首先先看看這些特殊符號的URL編碼:
在這裏插入圖片描述
3.我們的payload的是【%df '】,其原理是當MySQL在使用GBK編碼的時候,會認爲兩個字符是一個繁體漢字,然後讓我們的單引號%27成功逃逸:
在這裏插入圖片描述

至於字符、字符集、編碼、寬字節等的定義,我這裏就不花時間講了,我們的重點放在寬字節注入上。

實驗演示

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