寬字節繞過總結
1、 重點:轉義符反斜杠\,ASCII碼0x5C
2、 在雙字節字符集中, 在\前面增加高字節,0x5C被當做低字節,組合為“漢字”,導致\符號被“吃掉”,后續字符逃出限制,從而繞過轉義。
3、 GB2312編碼里\不會被“吃掉”。
4、 GBK,GB18030,BIG5等低字節符范圍中含有0x5c的雙字節字符編碼集均存在寬字節注入/繞過。
5、 UTF編碼方式\不會被“吃掉”
6、 程序中使用轉碼函數不當,也會出現寬字節注入/繞過,這時候跟頁面編碼無關
示例:
某存在SQL注入的業務場景,注入一個單引號之后,URL和SQL語句如下:
http://example.com/index.php?username=alan’
-->
Select * from tb where username=‘alan\’’
核心問題是要把反斜杠\消除,將注入字符替換為%df’,URL和SQL語句如下:
http://example.com/index.php?username=alan%df’
-->
Select * from tb where username=‘alan%df\’’
由於%df\ à %df%5c à 運,最終構成的SQL語句為:
Select * from tb where username=‘alan運’’
注入的%df與系統自動添加的反斜杠一起,構成了一個unicode字符集中的字符“運”,從而消除了反斜杠,使得注入的單引號閉合了前面的查詢語句。