寬字節XSS跨站攻擊


簡介

寬字節跨站漏洞多發生在GB系統編碼。 對於GBK編碼,字符是由兩個字節構成,在%df遇到%5c時,由於%df的ascii大於128,所以會自動拼接%5c,吃掉反斜線。而%27 %20小於ascii(128)的字符就會保留。通常都會用反斜線來轉義惡意字符串,但是如果被吃掉后,轉義失敗,惡意的xss代碼可以繼續運行。

 

什么是寬字節

GB2312、GBK、GB18030、BIG5、Shift_JIS等這些都是常說的寬字節,實際為兩字節。(英文字母占據一個字節,漢字占據兩個字節)。寬字節帶來的安全問題主要是吃ASCII字符(一字節)的現象。

 

寬字節SQL注入

先來復習下寬字節注入的形成原理:

防御方式:將 ' 轉換為 \'

繞過方式:將 \消滅

常規編碼

輸入 處理 編碼 帶入SQL 結果
' \' %5c%27 id=1\' and 不能注入

GBK編碼

MySQL在使用GBK編碼時,會認為兩個字符為一個漢字。

輸入 處理 編碼 帶入SQL 結果
%df' %df\' %df%5c%27(運) id=運' and 能注入

兩個字符組合,認為是一個漢字

注:前一個ASCII碼大於128才能到漢字的范圍。

 

寬字節XSS漏洞

寬字節XSS與寬字節SQL注入的不同在於寬字節注入主要是通過

吃掉轉義符再正常注入SQL語句,而寬字節XSS主要使用吃掉轉義符后注入惡意xss代碼。

案例1:

一般情況下,當我們發現一個輸入框,想要插入xss代碼在里面:

<input type="text" id="name" value=""/>

通常做法是通過閉合前面的雙引號和注釋掉后面的雙引號來觸發

" /><script>alert(1)</script>//

但是開發人員一般為了防范我們在其中插入惡意代碼,會在顯示之前使用過濾器對我們的輸入進行轉義,我們閉合使用的"被轉義為\",這樣就導致我們沒法閉合。

 

如果使用了GBK等編碼,我們就可以利用寬字節xss。構造如下payload:

%c0%22 /><script>alert(1)</script>//

%c0和%df一樣,也是超出了GBK的范圍,此時在執行過濾操作時,源代碼就變成了

<input type="text" id="name" value="%c0%5c%22 /><script>alert(1)</script>//">

當過濾器發現了%22,然后加入轉義(%5c),但在解析的時候碰到%c0,於是%5c與%c0合並成一個特殊字符,我們的"得以保留。

<input type="text" id="name" value="%c0%5c%22 /><script>alert(1)</script>//">

 

案例二:

下面是一個PHP的例子,在magic_quotes_gpc=On的情況下,如何觸發XSS?

<?php header("Content-Type: text/html;charset=GBK"); ?> 
<head>
<title>gb xss</title>
</head>
<script> a="<?php echo $_GET['x'];?>";
</script>

我們會想到,需要使用閉合雙引號的方法:

gb.php?x=1";alert(1)//

在magic_quotes_gpc=Off 時源代碼會變成:

<script> a="1";alert(1)//";</script>

由於magic_quotes_gpc=On,雙引號被轉義成\"導致閉合失敗

<script> a="1\";alert(1)//";</script>

由於網頁頭部指定了GBK編碼,GBK編碼第一字節(高字節)的范圍是0x81~0xFE,第二字節(低字節)的范圍是0x40~0x7E與0x80~0xFE。

gb.php?x=1%81";alert(1)//

此時當雙引號會繼續被轉義為\",最終代碼如下:

<script> a="1[0x81]\";alert(1)//";</script>

[0x81]\ 組合成了一個合法字符,於是我們的"被保留下來就會產生閉合,我們就成功觸發了xss。

GB2312是被GBK兼容的,它的高位范圍是0xA1~0xF7,低位范圍是0xA1~0xFE(0x5C不在該范圍內),把上面的PHP代碼的GBK改為GB2312,在瀏覽器中處理行為同GBK,也許是由於GBK兼容GB2312,瀏覽器都做了同樣的兼容:把GB2312統一按GBK行為處理。

 

寬字節注入防御

1、使用utf-8,編碼寬字節注入;

ps:不僅gbk,韓文、日文等都是寬字節,都有可能存在寬字節注入漏洞。

2、過濾客戶端提交的危險字符。

 

參考鏈接:

https://blog.csdn.net/qq_29419013/article/details/81205291

https://www.uedbox.com/post/14488/

http://book.2cto.com/201301/14515.html

http://itindex.net/detail/47408-xss-%E5%AD%A6%E4%B9%A0-xss


免責聲明!

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



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