宽字节注入原理及利用
概念
單字節(jié)字符集: 所有的字符都使用一個(gè)字節(jié)來表示,比如 ASCII 編碼。
多字節(jié)字符集: 在多字節(jié)字符集中,一部分字節(jié)用多個(gè)字節(jié)來表示,另一部分(可能沒有)用單個(gè)字節(jié)來表示。
兩位的多字節(jié)字符有一個(gè)前導(dǎo)字節(jié)和尾字節(jié)。 在某個(gè)多字節(jié)字符集內(nèi),前導(dǎo)字節(jié)位于某個(gè)特定范圍內(nèi),尾字節(jié)也一樣。
UTF-8 編碼: 是一種編碼的編碼方式(多字節(jié)編碼),它可以使用1~4個(gè)字節(jié)表示一個(gè)符號(hào),根據(jù)不同的符號(hào)而變化字節(jié)長(zhǎng)度。
常見的寬字節(jié): GB2312、GBK、GB18030、BIG5、Shift_JIS GB2312 不存在寬字節(jié)注入,可以收集存在寬字節(jié)注入的編碼。
前提條件
要有寬字節(jié)注入漏洞
1、首先要滿足目標(biāo)程序使用雙/多字節(jié)字符集進(jìn)行解析
2、其次不同字符集范圍不一樣,可能低位不包含單字節(jié)字符集的字符,這樣就沒辦法了,所以要保證在該種字符集范圍中包含低字節(jié)位,比如 0x5C(01011100) 的字符,即轉(zhuǎn)義符。
寬字節(jié)帶來的安全問題主要是吃ascll字符(一個(gè)字節(jié))的現(xiàn)象
下面就看個(gè)利用的例子
https://xxxxx?name=hello%27
name值會(huì)在js中,但是輸入的單引號(hào)被轉(zhuǎn)義了,沒辦法逃逸
然后翻看了下頁面源碼及請(qǐng)求頭,發(fā)現(xiàn)客戶端編碼是gbk
想必是寬字節(jié)注入了,嘗試輸入hello%df%27
沒錯(cuò)了,就是寬字節(jié)了,console都報(bào)錯(cuò)提示引號(hào)未閉合了,后面就是構(gòu)造而外的js代碼,并把后面的對(duì)于字符注釋掉,讓語法正確
最后payload:hello%df%27%3b%61%6c%65%72%74%28%31%29%3c%21%2d%2d
當(dāng)然這個(gè)不只是用在xss上,很多地方都可以用,主要是理解這個(gè)原理。
總結(jié)
以上是生活随笔為你收集整理的宽字节注入原理及利用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【C#/WPF】调节图像的对比度(Con
- 下一篇: 盘点今年的搞笑诺贝尔奖