寬位元組注入

2021-08-28 04:05:05 字數 2622 閱讀 9501

**

在使用php連線mysql的時候,當設定「set

character_set_client = gbk」時會導致乙個編碼轉換的問題,也就是我們熟悉的寬位元組注入,當存在寬位元組注入的時候,注入引數裡帶入% df%27,即可把(%5c)吃掉,舉個例子。

當提交

1=1%23

時,mysql的執行的sql語句為

select * from

user

where id ='1\' and 1=1#'

很明顯這是沒有注入成功的,而當我們提交

1=1%23

mysql的執行的sql語句為

select * from

user

where id ='1運'

and1=1#'

我們這裡的寬位元組注入是利用的mysql的乙個特性,mysql的在使用gbk編碼的時候,會認為兩個字元是乙個漢字(前乙個ascii碼要大於128,才到漢字的範圍)。這就是mysql的的特性,因為gbk是多位元組編碼,他認為兩個位元組代表乙個漢字,所以%df和後面的\也就是%5c中變成了乙個漢字「運」,而「逃逸了出來。

我用了手工注入和sqlmap的工具注入,先講一下手工注入吧

接著上面的,我們繼續進行注入

爆出資料庫之後,我們繼續進行注入,爆出表

id=%df%27 union select

1,group_concat(table_name)from information_schema.tables where table_schema=database()%23

接下來我們就乙個試一下每乙個表,在這裡我就省略了哈,直接給你們看一下爆出ctf4中表的內容的過程下面是我第一次爆表的語句

id=%df

%27 union select

1,group_concat(column_name)from information_schema.columns where table_name=ctf4%23

**沒想到報錯了,想了很長時間,難道還是過濾字元\搞得鬼?試著把字元轉換成十六進製制?ctf4轉16進製為0x63746634,

轉換**

將ctf4轉換之後再進行注入**

id=%df' union select

1,group_concat(column_name) from information_schema.columns where table_name=0x63746634%23

爆出了兩列,下面在獲取flag的內容

不出錯這個應該就是了吧**注入工具我直接放過程狀語從句:查詢查詢結果了啊

爆出當前資料庫**

爆出此資料庫下的所有表

爆出ctf4下面的所有列

爆出旗中的內容

獲取成功哈

寬位元組注入

大家都知道 df 被php轉義 開啟gpc 用addslashes函式,或者icov等 單引號被加上反斜槓 變成了 df 其中 的十六進製制是 5c 那麼現在 df df 5c 27,如果程式的預設字符集是gbk等寬位元組字符集,則mysql用gbk的編碼時,會認為 df 5c 是乙個寬字元,也就是...

寬位元組注入

這個md的 是我之前做南郵的一道sql注入題目,我實在是調動目前所學的sql注入知識沒做出來,一直搞不懂將 轉義為 因此去網上看了一下wp,是考寬位元組注入,於是在網上找了教程學習一下,這個文章只是為了記錄一下自己的學習過程,不喜勿噴,有錯希望指正 寬位元組注入指的是mysql資料庫在使用寬位元組 ...

寬位元組注入

寬位元組注入是利用mysql的乙個特性,mysql在使用gbk編碼的時候,會認為兩個字元是乙個漢字 前乙個ascii碼要大於128,才到漢字的範圍 示例如下圖 php中編碼為gbk,函式執行新增的是ascii編碼 新增的符號為 mysql預設字符集是gbk等寬位元組字符集。如上圖所示 df 被php...