zoukankan      html  css  js  c++  java
  • 记录一次有意思的XSS过滤绕过2

      前几天在漏洞挖掘中遇到个xss,感觉绕过过程蛮有意思的,写篇文章记录下。

      接下里是我对这个xss详细的分析和绕过

      存在问题站点http://******/index/appInfo?appId=784&url=xss

      当我查看源代码搜索xss:

      一处输出点:

      继续搜索第二处输出点:

         

    两次输出,第一次输出是在input标签中,第二次是在js中,这里不考虑input中利用了。因为input的type为hidden,即使能够利用成功xss也非常的鸡肋:

     

    所以不考虑input标签了,我们转战到js下构造代码让其弹窗。

      最简单的,我们先闭合引号,先输入:';alert(1);//

      

    页面直接变成空白页。。是不是程序判断中过滤了 alert?

      我们尝试删除 alert:

      

    还是 空白页,说明()被过滤了。

    我们尝试删除()看看alert有没有被过滤:

      

    页面显示依旧是空白,接着我尝试把alert替换成prompt和confirm等常用弹窗遇见 ,依旧是空白页,很明显这里对弹窗函数和过滤了(),我们再次尝试双引号("")有没有被过滤:

      

    输入:http://******/index/appInfo?appId=784&url=xss';"xss";//

    页面显示内容,然后再次查看源代码:

      

    双引号没有被过滤。过滤了括号,一些弹窗函数。

      现在我们不抱着弹窗的目的看看能否执行一些简单的js操作,尝试用js代码跳转到百度:

      代码window.location.href="http://baidu.com"

      我们闭合然后构造:

      

    发现还是显示空白页,说明过滤了,我猜测过滤window,我删除其他内容 保留window关键字:

      

    只要有 window他就显示空白页面。说明对window做了过滤。

      window表示打开的当前窗口,表示当前的还有this关键字,这里过滤了window我们可以尝试使用this代替window:

      我们再次构造地址:http://******/index/appInfo?appId=784&url=xss';this.location.href="http://baidu.com";//

      这次他没有拦截,让我们跳转到了百度:

        

    现在我们可以使用他进行url的跳转,现在我开始想着尝试弹窗,但是这貌似很难,因为他过滤的东西有点多。

      我尝试能不能使用dom节点写入:

      

    又是空白页面,我保留document删除其他部分 :

      

    我发现程序只要 有document他就会拦截你到空白页,对于dom来说,没有document是没有灵魂的。虽然过滤document但是我们还是有办法绕过的。

    本地调试:

    发现self['doc'+'ument']就是document

    我们构造地址:http://******/index/appInfo?appId=784&url=xss';self['doc'%2b'ument'].body.innerHTML=111//

    其实写到这里,我们回顾发现我们现在已经可以做很多我们想做的事情了,我们可以通过js修改一个 界面内容,通过js实现一个任意跳转等。

      但是我们本能的觉得xss必须得弹个框框,这是我们普遍对xss的认知,现在我就只想弹窗?我该怎么做?

      在过滤了括号,一些弹窗的函数后,我发现我已经很难让他弹窗了。。我思考了很久都无法做到弹窗。。后来请教大佬得到了一种弹窗的方法,为我xss学习又一次打开新的世界:

      思路1:通过函数劫持弹窗 :

      查看源码我们发现在下面一行调用了jq的attr属性操作函数,这里我们能否进行函数的劫持?对attr函数进行劫持,劫持他变成alert呢?

      这样不就能弹窗了?

      因为alert被过滤了,所以我们要用self['al'+'ert']替代绕过:

      我们尝试构造这样一个地址:http://******/index/appInfo?appId=784&url=xss';jQuery['attr']=this['al'%2b'ert']//

        

    我们查看 源代码:

      

        

    下面是我对函数劫持的分析:

      

      弹窗思路2:

      使用#xss payload的方法  

      使用window.location.hash然后外部定位就不会造成任何拦截了 :

      因为过滤很多关键字,我们构造如下地址:

      http://******/index/appInfo?appId=784&url=xss%27;location=this.location.hash.slice%601%60;//#javascript:alert('xss')

      

    就可以造成弹窗,这里过滤了()我尝试%28%29一样是空白页,尝试把括号改成``还是空白页,当我编码``为%60的时候发现没有拦截,程序自动decode了。故导致xss:

    先写到这里,这次xss的绕过让我收获了很多,为我以后xss研究打开了新的大门,总结 了一些宝贵的经验,从前辈师傅那里学到了更深层的东西

    比如说想玩好xss,一定要学好javascript基础!马上要过年了,特此 写这篇文章 留念下。新的一年有更多的困难和挑战等着我,更多的基础知识需要掌握!加油!    

  • 相关阅读:
    fn project 试用之后的几个问题的解答
    fn project 扩展
    fn project 生产环境使用
    fn project 对象模型
    fn project AWS Lambda 格式 functions
    fn project 打包Function
    fn project Function files 说明
    fn project hot functions 说明
    fn project k8s 集成
    fn project 私有镜像发布
  • 原文地址:https://www.cnblogs.com/piaomiaohongchen/p/10337924.html
Copyright © 2011-2022 走看看