简介
逛推特突然看到Jackson大佬的xss绕过思路,挺有意思
上Payload
payload:<svg onload=alert%26%230000000040"1")>
漏洞原理:
alert%26%230000000040等价于(
这个payload分为三部分
alert() //html里面的一个一个DOM 方法
%26%23 //html编码等价于"&#"
0000000040 //就是40
其中的关键就在于,%26%230000000040这个,他等价于"("闭合了后面的")",所以形成了这个XSS Bypass
但是为啥(回等价于"("呢。
因为使用了NCR的方式,使现实字符实体名称或不被浏览器支持的一些实体被浏览器显示,先找到字符对应的UNICODE编码,以小于号为例,unicode编码16进制为3C(10进制为60),在html则可以使用<或<,跟上面的表格对照看是否相同,由此我们也可以知道,如果我们的html所采用的编码不支持一些字符(比如其他国家的字符),则可以通过NCR来引入我们的页面就不会乱码了。
NCR:
Google了一下,这东西专业名称叫numeric character reference(NCR),直译就是数字字符引用。一个Numeric Character Reference编码是由一个与号(&)跟着一个井号(#),然后跟着这个字符的Unicode编码值,最后跟着一个分号组成的,就像上面的例子一样。
有了数字字符引用,就可以在网页中显示Unicode字符了,不用考虑html文件本身的编码。
网友评论