A World Restored & A World Restored Again

    A World Restored
    Description:
    nothing here or all the here ps:flag in admin cookie 
    flag is login as admin
    URL http://messbox.2017.hctf.io
    Now Score 674.44
    Team solved 7
    A World Restored Again
    Description: 
    New Challenge !! 
    hint: flag only from admin bot
    URL http://messbox.2017.hctf.io
    Now Score 702.6
    Team solved 6

A World Restored在出题思路本身是来自于uber在10月14号公开的一个漏洞https://stamone-bug-bounty.blogspot.jp/201...,为了能尽可能的模拟真实环境,我这个不专业的Web开发只能强行上手实现站库分离。

其中的一部分非预期,也都是因为站库分离实现的不好而导致的。(更开放的题目环境,导致了很多可能,或许这没什么不好的?

整个站的结构是这样的:
1、auth站负责用户数据的处理,包括登陆验证、注册等,是数据库所在站。
2、messbox站负责用户的各种操作,但不连接数据库。

这里auth站与messbox站属于两个完全不同的域,受到同源策略的影响,我们就需要有办法来沟通两个站。

而这里,我选择使用token做用户登陆的校验+jsonp来获取用户数据。站点结构如下:

2017HCTF

简单来说就是,messbox登陆账号完全受到token校验,即使你在完全不知道账号密码的情况下,获取该token就可以登陆账号。

那么怎么获取token登陆admin账号就是第一题。

而第二题,漏洞点就是上面文章中写的那样,反射性的domxss,可以得到服务端的flag。

为了两个flag互不干扰,我对服务端做了一定的处理,服务端负责处理flag的代码如下:

    $flag1 = "hctf{xs5_iz_re4lly_complex34e29f}";
    $flag2 = "hctf{mayb3_m0re_way_iz_best_for_ctf}";
    if(!empty($_SESSION['user'])){
        if($_SESSION['user'] === 'hctf_admin_LoRexxar2e23322'){
                    setcookie("flag", $flag, time()+3600*48," ","messbox.2017.hctf.io", 0, true);
            }
        if($_SESSION['user'] === 'hctf_admin_LoRexxar2e23322' && $_GET['check']=="233e"){
            setcookie("flag2", $flag2, time()+3600*48," ",".2017.hctf.io");
        }
    }

可以很明显的看出来,flag1是httponly并在messbox域下,只能登陆才能查看。flag2我设置了check位,只有bot才会访问这个页面,这样只有通过反射性xss,才能得到flag。

下面我们回到题目。

本文章首发在 网安wangan.com 网站上。

上一篇 下一篇
讨论数量: 0
只看当前版本


暂无话题~