簡(jiǎn)介
逛推特突然看到Jackson大佬的xss繞過(guò)思路,挺有意思
上Payload
payload:<svg onload=alert%26%230000000040"1")>
漏洞原理:
alert%26%230000000040等價(jià)于(
這個(gè)payload分為三部分
alert() //html里面的一個(gè)一個(gè)DOM 方法
%26%23 //html編碼等價(jià)于"&#"
0000000040 //就是40
其中的關(guān)鍵就在于,%26%230000000040這個(gè),他等價(jià)于"("閉合了后面的")",所以形成了這個(gè)XSS Bypass
但是為啥(回等價(jià)于"("呢。
因?yàn)槭褂昧薔CR的方式,使現(xiàn)實(shí)字符實(shí)體名稱或不被瀏覽器支持的一些實(shí)體被瀏覽器顯示,先找到字符對(duì)應(yīng)的UNICODE編碼,以小于號(hào)為例,unicode編碼16進(jìn)制為3C(10進(jìn)制為60),在html則可以使用<或<,跟上面的表格對(duì)照看是否相同,由此我們也可以知道,如果我們的html所采用的編碼不支持一些字符(比如其他國(guó)家的字符),則可以通過(guò)NCR來(lái)引入我們的頁(yè)面就不會(huì)亂碼了。
NCR:
Google了一下,這東西專業(yè)名稱叫numeric character reference(NCR),直譯就是數(shù)字字符引用。一個(gè)Numeric Character Reference編碼是由一個(gè)與號(hào)(&)跟著一個(gè)井號(hào)(#),然后跟著這個(gè)字符的Unicode編碼值,最后跟著一個(gè)分號(hào)組成的,就像上面的例子一樣。
有了數(shù)字字符引用,就可以在網(wǎng)頁(yè)中顯示Unicode字符了,不用考慮html文件本身的編碼。