寬字節注入原理及利用


概念

單字節字符集: 所有的字符都使用一個字節來表示,比如 ASCII 編碼。

多字節字符集: 在多字節字符集中,一部分字節用多個字節來表示,另一部分(可能沒有)用單個字節來表示。

兩位的多字節字符有一個前導字節和尾字節。 在某個多字節字符集內,前導字節位於某個特定范圍內,尾字節也一樣。

UTF-8 編碼: 是一種編碼的編碼方式(多字節編碼),它可以使用1~4個字節表示一個符號,根據不同的符號而變化字節長度。

常見的寬字節: GB2312、GBK、GB18030、BIG5、Shift_JIS GB2312 不存在寬字節注入,可以收集存在寬字節注入的編碼。

前提條件

要有寬字節注入漏洞

1、首先要滿足目標程序使用雙/多字節字符集進行解析

2、其次不同字符集范圍不一樣,可能低位不包含單字節字符集的字符,這樣就沒辦法了,所以要保證在該種字符集范圍中包含低字節位,比如 0x5C(01011100) 的字符,即轉義符\。

寬字節帶來的安全問題主要是吃ascll字符(一個字節)的現象

 

下面就看個利用的例子

https://xxxxx?name=hello%27

name值會在js中,但是輸入的單引號被轉義了,沒辦法逃逸

然后翻看了下頁面源碼及請求頭,發現客戶端編碼是gbk

想必是寬字節注入了,嘗試輸入hello%df%27

沒錯了,就是寬字節了,console都報錯提示引號未閉合了,后面就是構造而外的js代碼,並把后面的對於字符注釋掉,讓語法正確

最后payload:hello%df%27%3b%61%6c%65%72%74%28%31%29%3c%21%2d%2d

 

當然這個不只是用在xss上,很多地方都可以用,主要是理解這個原理。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM