SQL寬位元組注入

2022-07-18 05:15:17 字數 3870 閱讀 6563

-什麼是寬位元組注入?寬位元組注入就是因為gbk編碼方式需要兩個ascii碼組合來解碼,所以形象的叫做寬位元組,這個作為了解即可

-寬位元組注入的條件

1) 資料庫查詢設定為gbk編碼

2) 使用了addslashes(),mysql_real_escape_string(),mysql_escape_string()這類的過濾函式

-寬位元組注入的原理

假設我們傳遞乙個引數id=1』,當我們輸入這個單引號的時候,那麼會被認為是非法的字元,會被過濾函式新增「/」給過濾掉,所以我們想要程式接受我們傳遞的引數裡面包含單引號,那麼就需要把這個轉義字元「/」給乾掉,那如何才能乾掉?當http協議傳輸的時候,要經過url編碼的,如果這個編碼完成後,傳遞到伺服器時,有奇數個數,它會把前面偶數個數的字元當作gbk編碼去解碼,那麼剩下的就當作普通的url去編碼,所以我們就可以在單引號之前新增乙個%81這樣的編碼,這樣當最後解碼的時候,這個%81就會和「/」對應的編碼相結合按照gbk的要求去解碼,最後就只剩下個單引號,也就得到了我們想要的結果!

1、首先觀察正常訪問的頁面

2、給引數1後面新增乙個單引號,觀察頁面變化:可以看到單引號前面多了乙個\的轉義字元,那麼可以判斷後台在處理引數的時候使用了過濾函式進行轉義過濾

3、根據之前原理的分析,利用gbk編碼的特性來試一下,在『前面增加乙個%81的編碼

4、上一步好像那樣做過後也沒看出什麼異常,只是多了乙個不認識的符號,這應該是和瀏覽器頁面的編碼方式有關,由於我利用的是gbk編碼的特性,所以我把頁面的編碼改成gbk再來看看效果

那麼其實更改編碼過後,之前的轉義符其實就是和%81結合按照gbk的解碼方式變成了乙個漢字,所以我們輸入的單引號就得以逃過過濾函式的轉義

5、那麼弄明白上面的問題過後,就可以開始一步步的去構造sql語句去查詢資料庫裡面的資訊了,在這裡選擇通過結合union聯合查詢來注入

1)由於聯合查詢需要滿足列相同,以及型別相似,所以需要先判斷一下

構造的sql語句:1%81' union select 1--+

報了列不匹配的錯誤,那麼繼續增加,直到不報錯為止如下:

當sql語句:1%81' union select 1,3,2--+時就沒有報錯了,說明列匹配了

3)注入得到資料庫名字:security

構造的sql語句:

4得到資料庫裡面的表名:emails,referers,uagents,users

構造的sql語句:%81' union select 1,group_concat(table_name),database() from information_schema.tables where table_schema=database()--+

5)得到資料庫的表裡面的列名,這裡以user來演示

構造的sql語句:%81' union select 1,group_concat(column_name),database() from information_schema.columns where table_name='user'--+

當我這樣做的時候,發現報錯了,我的table_name的引數使用了引號,那這裡的這個引號如何處理呢?我嘗試了一下,利用前面的方法不行,所以這裡就只能將user進行16進製制轉碼來解決,也就是將『user』使用0x75736572來代替;75736572對應的就是user

更改後的sql語句:最後我又新增了乙個資料庫名的條件,因為只要那個資料庫裡的users的字段

最後得到的列名就是:id,username,password

6)得到資料庫名,得到表名字和列名字,那麼再繼續得到資料的內容就跟容易了,如下:

構造的sql語句:%81' union select 1,group_concat(password),1 from users--+

最後成功得到users表裡面的password欄位的資料如下:

SQL注入 寬位元組注入

php測試 物件導向寫法 id addslashes get id 獲取id並轉義預定義字元 id get id mysqli new mysqli localhost root root test 連線資料庫 指定資料庫 if mysqli connect errno else else 面向過程...

mysql 寬位元組注入 SQL注入之寬位元組注入

簡介 寬位元組注入是相對於單位元組注入而言的。單位元組注入就是大家平時的直接在帶有引數id的url後面 追回sql語句進行注入。比如 1 1 1 2 這個經典的判斷目標是否存在注入的例子就是單位元組注入。理論上說,只要資料庫連線 設定了gbk編碼,或者是預設編碼就 是gbk,那現在的程式裡到處都是注...

sql注入之寬位元組注入

在介紹寬位元組注入之前,首先引入php的乙個防禦函式和一種編碼格式gbk 這是php自帶的一種防禦函式,該函式會解析使用者提交的資料,如post,cookie等提交過來的資料,並對這些資料中的特殊字元新增轉義符號 以確保資料不會出現致命錯誤。單引號,雙引號,反斜線等都會被加上反斜線。而對於sql注入...