原因
寬位元組注入主要是因為採用了gbk編碼,乙個gbk編碼占用2個位元組,乙個utf-8占用3個位元組
常規手段下只需要閉合單引號即可,但當存在轉義處理時,需要對payload進行特殊構造
常規注入手段
select
*from users where id =
'1'orderby3
# ' limit 0,1
被過濾後會成為
select
*from users where id =
'1\''
limit0,
1
構造payload
原始資料
**層過濾
url編碼』
1%df』
1%df\ 』
1%df%5c%27
對於gbk編碼,兩個字元預設組成乙個漢字
已知乙個單引號會被轉譯成乙個\和乙個』 ,於是可以進行構造
\的url編碼是%5c,可以進行構造使其在轉碼後成為乙個漢字,這樣語句會成為
select
*from users where id =
'1%df'
orderby3
# ' limit 0,1
#構造出來的語句
select
*from users where id =
'1%df%5c%27 order by 3 # '
limit0,
1#經過函式過濾和url轉義後的語句
select
*from users where id =
'1餦'
orderby3
# ' limit 0,1
#進入gbk編碼的資料庫中的語句
利用條件
資料庫必須使用gbk編碼
寬位元組注入其實使用了gbk編碼將2個位元組轉化為1個漢字的特性,而web程式對單引號進行了轉義,\ 』 ==> %5c ==> ***%5c=某漢字,此時可以將單引號閉合
構造payload
寬位元組注入
大家都知道 df 被php轉義 開啟gpc 用addslashes函式,或者icov等 單引號被加上反斜槓 變成了 df 其中 的十六進製制是 5c 那麼現在 df df 5c 27,如果程式的預設字符集是gbk等寬位元組字符集,則mysql用gbk的編碼時,會認為 df 5c 是乙個寬字元,也就是...
寬位元組注入
在使用php連線mysql的時候,當設定 set character set client gbk 時會導致乙個編碼轉換的問題,也就是我們熟悉的寬位元組注入,當存在寬位元組注入的時候,注入引數裡帶入 df 27,即可把 5c 吃掉,舉個例子。當提交 1 1 23 時,mysql的執行的sql語句為 ...
寬位元組注入
這個md的 是我之前做南郵的一道sql注入題目,我實在是調動目前所學的sql注入知識沒做出來,一直搞不懂將 轉義為 因此去網上看了一下wp,是考寬位元組注入,於是在網上找了教程學習一下,這個文章只是為了記錄一下自己的學習過程,不喜勿噴,有錯希望指正 寬位元組注入指的是mysql資料庫在使用寬位元組 ...