浏览器的进制
字符的ascii码值可以转化为进制形式。可以用来绕过XSS filter。
-
HTML属性值中的进制使用 。十进制使用a(字符a); 表示,&#作为前缀,;作为后缀,后缀也可以没有。如果要使用十六进制表示,则使用a
1 <img src=@ onerror=alert("\u6211") />
会自动解析为:
<img src="@" onerror="alert("\u6211")">
-
css属性名和属性值中的进制使用。完全兼容HTML的进制表示方式,另外可以使用\ 作为16进制数值前缀。使用\ 16进制形式时属性名和属性值之间的:的冒号要保留。比如
<style> a{ background:red; } </style>
可以用\ 16进制表示
1 <style> 2 a{ \62\61\63\6b\67\72\6f\75\6e\64:\0072\0065\0064; } 3 </style>
-
javascript字符串中的进制使用。八进制用\56表示,十六进制用\x5c表示,多字节字符编码只能用十六进制Unicode编码,表现形式为:\u6211
document.write("<\x69mg src=@ onerror=\x61lert(\"\u6211\51\"\51 />");
执行的时候会自动解码为
<img src=@ onerror=alert("我") />