记录一次有意思的XSS过滤绕过2

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

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

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

  当我查看源代码搜索xss:dom

  一处输出点:xss

 

  继续搜索第二处输出点:函数

     

 

 

两次输出,第一次输出是在input标签中,第二次是在js中,这里不考虑input中利用了。由于input的type为hidden,即便可以利用成功xss也很是的鸡肋:学习

 

 

因此不考虑input标签了,咱们转战到js下构造代码让其弹窗。this

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

  

 

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

  咱们尝试删除 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基础!立刻要过年了,特此 写这篇文章 留念下。新的一年有更多的困难和挑战等着我,更多的基础知识须要掌握!加油!    

相关文章
相关标签/搜索