SQL注入防御繞過——二次編碼

01 背景知識

一、為什么要進行URL編碼

通常如果一樣?xùn)|西需要編碼,說明這樣?xùn)|西并不適合傳輸。對于URL來說,編碼主要是為了避免引發(fā)歧義與混亂。
例如,URL參數(shù)字符串中使用key=value鍵值對這樣的形式來傳參,鍵值對之間以&符號分隔,如/?name=abc&pwd=123如果你的value字符串中包含了=或者&,那么勢必會造成接收Url的服務(wù)器解析錯誤,因此必須將引起歧義的&和= 符號進行轉(zhuǎn)義,也就是對其進行編碼。
對于URL編碼的深入研究可以參看下面這些內(nèi)容:
為什么要進行URL編碼
深入分析 web 請求響應(yīng)中的編碼問題

二、URL傳輸過程中的編碼問題

HTTP請求過程經(jīng)歷的幾個環(huán)節(jié):
瀏覽器【get/post】①========>服務(wù)器②========>瀏覽器顯示③

  • ①:瀏覽器會把URL經(jīng)過編碼后發(fā)送給服務(wù)器,不同的瀏覽器對URL的編碼規(guī)則不同。對于GET方式提交的數(shù)據(jù),瀏覽器會自動進行URL編碼;對于POST方式提交的數(shù)據(jù),其編碼方式可以由開發(fā)者進行指定。
  • ②:服務(wù)器根據(jù)其自身的配置文件對URL進行解碼(解碼成Unicode),然后將顯示內(nèi)容編碼。
  • ③:瀏覽器按照指定的編碼顯示該網(wǎng)頁。
    此外,在客戶端也就是瀏覽器上運行的前端程序也會根據(jù)Web服務(wù)的需要對要傳輸?shù)臄?shù)據(jù)進行一些編碼操作,而在服務(wù)端除了服務(wù)器中間件會自動對URL進行解碼,后端的Web程序會對前端進行編碼的數(shù)據(jù)進行解碼操作。

02 二次編碼注入

下面這幅圖片很好地解釋了二次編碼注入的原理(圖片來源為網(wǎng)易Web安全工程師課程,侵刪):

二次編碼注入

從中我們也可以得知,二次編碼注入產(chǎn)生的原因是:
后端程序的編碼函數(shù),如urldecode()等,與PHP本身處理編碼時,兩者配合失誤,使得攻擊者可以構(gòu)造數(shù)據(jù)消滅\

看一下實例代碼:

//用GET方式獲取id值,并對其中的特殊字符進行轉(zhuǎn)義
$id = mysql_real_escap_string($_GET['id']);
//使用urldecode()函數(shù)進行解碼
$id = urldecode($id);

$sql = "SELECT * FROM usres WHERE id = '$id' LIMIT 0,1;
$result = mysql_query($sql);
$row = mysql_fetch_array($result);

上面的代碼就是一個二次注入的典型場景,這時如果我們提交:
http://127.0.0.1/sql.php?id=1%2527
就可以繞過對'的轉(zhuǎn)義,進行SQL注入攻擊。

在測試時,如果發(fā)現(xiàn)了頁面可能存在二次編碼注入漏洞,也可以使用sqlmap進行自動化攻擊

//只需在注入點后鍵入%2527即可
python sqlmap.py -u "http://127.0.0.1/sql.php?id=1%2527"

分享一個二次編碼注入的漏洞實例

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,680評論 19 139
  • 1、通過CocoaPods安裝項目名稱項目信息 AFNetworking網(wǎng)絡(luò)請求組件 FMDB本地數(shù)據(jù)庫組件 SD...
    陽明AI閱讀 16,223評論 3 119
  • 蠶叢開國西絕秦,一魚分水二李耕;高祖都漢何所憑,沃野千里水出岷;桃園一拜情何深,隆中一語天下分;漢閣秦樓朱色褪,排...
    愿得一人懂我詩閱讀 198評論 1 3
  • 偷偷告訴你們一個秘密,其實你身邊的所有人都是雙面人,只是你自己不知道而已,他們可以隨意的展示給你任何想給你看見的一...
    默然墨語閱讀 521評論 0 0
  • 一、按點對比 二、編程實現(xiàn)對比 Storm初次是由Clojure實現(xiàn),后有Java和Python。而 Spark ...
    Graceleeman閱讀 772評論 0 1

友情鏈接更多精彩內(nèi)容