SQL注入——寬位元組注入原理及繞過方式
阿新 • • 發佈:2021-08-13
前言
眾所周知,SQL注入作為危害最大的攻擊方式,開發人員在開發時一定會想辦法去防範,在這裡我們介紹一種新的方式——寬位元組注入法去繞過設定的障礙
原理
一般來說,如果開發人員在開發是時候,對傳入的引數進行了特殊的函式處理,比如使用了trim()函式,htmlspecialchars()函式,addlashes函式,是可以過濾我們非法提交的引數,從而導致SQL注入無法成功。
作為攻擊者,要完成的是對引數的拼接,從而導致惡意的SQL語句寫入。作為開發者要完成的是SQL輸出引數的一個過濾比如對惡意的字元進行轉移
常用過濾函式
trim()函式
移除字串兩側的空白字元或其他預定義字元
htmlspecialchars()函式
把預定義的字元"<"和">"轉換為HTML實體,預防XSS
addslashes()函式
返回在預定義字元之前新增反斜槓的字串
# 預定義字元
1.單引號(')
2.雙引號(")
3.反斜槓(\)
4.NULL
上述函式常在CMS裡使用進行過濾
寬位元組注入條件
1.資料庫為GBK編碼
2.使用了轉義函式,將、POGETST、cookie傳遞的引數進行過濾,將單引號、雙引號、null等敏感字元用轉義符 \ 進行轉義
繞過方式
root %df' or 1=1 #
# 原理:在GBK編碼中,反斜槓的編碼是%5c,在輸入%df後,使得新增反斜槓後形成%df%5c,而%df%5c是繁體字“ 連”,單引號成功逃逸,爆出Mysql資料庫的錯誤
以pikachu為例
我們在正常updatexml()注入後發現不成功
接下來嘗試寬位元組注入,而直接在網頁中提交依然不行,所以判斷為POST請求,使用抓包工具進行注入
注入成功