NewStarCTF 2024 Misc 全题型解题思路与操作指南
做题时最重要的不是”背答案”,而是建立一套按题型走的操作流水线:先识别题型 → 再按对应方法逐项排查。本文用 NewStarCTF 2024 Misc 全套 18 题的实战解法,总结每类题的思路(为什么这么想)和操作方式(具体工具/命令)。
官方 WriteUp 总站(参考):https://newstar.wiki/wp/2024/
0. 通用方法论
思路
- 先看题面提示:题目描述里几乎总是藏了方向(“正反都好听”=倒放、“眼力”=看帧差异、“拨号音”=DTMF、“FENCE”=栅栏密码)。
- 看附件特征:
file看真实类型(扩展名全是障眼法:.zip/.gz/.rar/.z可能是 PNG,.docx可能是 OLE2)。 - 先跑一遍 strings / binwalk / 尾部数据,成本最低,经常直接出线索。
操作方式
file 附件strings -a 附件 | grep -iE "flag|key|pass|hint"binwalk 附件 # 看有没有嵌套文件xxd 附件 | tail # 看尾部追加数据1. 流量分析(pcap)
1.1 通用思路
先数一下协议分布(HTTP / USB / SSH),优先导出对象,再跟 TCP 流看请求内容。很多题的 flag 就在 HTTP 响应体或上传的文件里。
1.2 操作方式
# 看协议统计tshark -r x.pcapng -q -z io,phs# 导出 HTTP 对象(文件、上传的 webshell、图片)tshark -r x.pcapng --export-objects http,./out# 跟流tshark -r x.pcapng -z follow,tcp,http实战样例
- Herta’s Study:HTTP 上传了加密 webshell
upload.php,命令输出被”base64 后奇数位 ROT13”混淆。导出对象拿到响应串,写脚本解码即可:奇数位字符str_rot13→ base64 解码。 - wireshark_checkin / wireshark_secret:SSH 只是背景板,真正的 HTTP 请求里下载了 flag 文件/PNG。导出后直接读;PNG 用 OCR/看图得
flag{you_are_gooddddd}。
USB 键盘流量(Alt 题)
思路:USB HID 报表 8 字节,首字节=修饰键(0x04=Alt),第三字节=键码;0000… 表示松开。Alt+小键盘数字 = Unicode 十进制码值输入,这是 Windows 输入任意字符的方式。
操作:
tshark -r keyboard.pcapng -T fields -e usbhid.data > usb.txt# 按住 Alt 期间的数字串分组 → int → chr()# 键码: 0x59=1 0x5a=2 0x5b=3 0x5c=4 0x5d=5 0x5e=6 0x5f=7 0x60=8 0x61=9 0x62=0得到 flag{键盘流量_with_alt_和窗户_15_5o0OO0o_酷}(中文用 Alt 码输入)。
2. 图片隐写
2.1 通用思路
按”从易到难”排查:CRC/尺寸 → LSB 位平面 → 帧差异 → 二维码/特殊字体。
2.2 PNG 尺寸被改 + CRC 修复(扫码领取flag 题)
思路:PNG 的 IHDR 里 width/height 被改后 CRC 会不匹配。若存储的 CRC 是”正确值”,就能爆破宽高使 CRC 与存储值相等,还原原始尺寸。 操作:
import zlib, structdata = open(f,'rb').read()target = struct.unpack('>I', data[29:33])[0]for w in range(1,1024): for h in range(1,1280): if zlib.crc32(data[12:16]+struct.pack('>II',w,h)+data[24:29]) == target: print(w, h) # 本题全部是 250x250改回尺寸后,4 张 250×250 是同一二维码的 4 个象限,按顺序拼成 500×500,用 zxing-cpp 扫码:
import zxingcppzxingcpp.read_barcode(np_array) # → flag{Then_d0_you_kn0w_w6at_Hanx1n_cod3_1s?}2.3 LSB 隐写(Labyrinth 题)
思路:题目直接提示 LSB。把任一颜色通道的最低位提取出来当作一张二值图,往往就是二维码/文字。 操作:
a = np.array(Image.open('yugamu.png'))plane = (a[:,:,0] & 1) * 255 # RGB 三通道 LSB 相同zxingcpp.read_barcode(plane) # → flag{e33bb7a1-...}2.4 GIF 帧差异(你也玩原神吗 题)
思路:“眼力”暗示某帧一闪而过。逐帧比对,找到与众不同的帧;帧里的特殊字体(提瓦特文字)用对照表转成英文。 操作:
for i in range(gif.n_frames): gif.seek(i); gif.save(f'f{i:03d}.png')# 相邻帧 XOR,差异大的就是要找的帧(本题 f036/f037)对照表解出:左下角 doyouknowfence(提示栅栏),右下角密文 MESIOAABGNHNSGOGMYEIADE → 3 轨栅栏密码 → MAYBEGENSHINISAGOODGAME。
3. 音频隐写
3.1 通用思路
- 先看声道差异(左右声道各听/各分析一遍);
- 再看尾部(ID3/WAV 尾追加数据);
- 最后倒放/变速/频谱图。
3.2 倒放 + 摩斯(pleasingMusic 题)
思路:题面”正反都好听”=后半段是倒放的。把整段音频倒放后,会出现两种时长的音调:短=.(点),长=-(划)。
操作(无 ffmpeg 时用 miniaudio 解码):
import miniaudio, numpy as npdec = miniaudio.decode_file('a.mp3', output_format=miniaudio.SampleFormat.SIGNED16)data = np.frombuffer(dec.samples, dtype=np.int16).reshape(-1,2).mean(axis=1)rev = data[::-1]# 20ms 滑窗能量,阈值取峰值 35% 得到干净的音段# 时长 120-140ms → '.', 360-380ms → '-'; 短间隔连符号, 长间隔分字符# → EZ_MORSE_CODE → flag{EZ_MORSE_CODE}3.3 右声道 DTMF(BGM坏了吗 题)
思路:立体声里左声道是噪音、右声道藏”拨号音”(DTMF 双音)。用右声道减左声道或只取右声道,对每个音段做频谱峰值识别:低频组 697/770/852/941 × 高频组 1209/1336/1477/1633 的交叉 = 数字。 操作:
# 对 100ms 窗口做 Goertzel 或 FFT,找两个峰值频率 → 查 DTMF 表# 注意别增强音量、可用 22050 采样率导出,解码更稳# → 2024093020241103 → flag{2024093020241103}4. 压缩包与密码
4.1 通用思路
套娃 zip 链:逐层解,注意每层的注释/文件名/提示文件;加密 zip 优先看有没有 3 字节小文件(CRC 爆破)或已知明文(ZipCrypto → bkcrack)。
4.2 CRC 爆破 3 字节文件(zipmaster 题)
思路:压缩包里有 4 个 3 字节小文件且给了 CRC,爆破 3 字符使其 CRC32 匹配即可还原内容(常用于拼密码)。 操作:
import binascii, itertools, stringfor crc in [0x35f321cd, 0xa0bb977c, 0x4eb5f650, 0x03c90238]: for c in itertools.product(string.printable, repeat=3): if binascii.crc32(''.join(c).encode()) & 0xffffffff == crc: print(c) # thi / s_i / s_k / ey! → this_is_key!得到密码 this_is_key! 解 3077.zip → 下一层。
4.3 ZipCrypto 明文攻击(bkcrack)
思路:加密 zip 里若有一个已知内容的文件(如 hint.txt),ZipCrypto 可用已知明文恢复密钥。注意 -p 要给deflate 压缩后的字节(zlib.compressobj(6, DEFLATED, -15))。
操作:
bkcrack -C 0721.zip -c 0721/hint.txt -p hint_deflated.bin# → keys: d45ea73f 29dacfdc f97ea188bkcrack -C 0721.zip -k <keys> -c 0721/flag.zip -d flag_stream.bin# 解出的 deflate 流再 zlib.decompress(-15) 还原注意最后可能遇到压缩包炸弹(2333 个 118MB 重叠条目),别傻乎乎全解压,直接分析文件结构/看 WP。
5. 办公文档取证
5.1 字里行间的秘密
思路:key.txt 里藏零宽字符(U+200C/U+200D/U+FEFF/U+202C),解码出密码;flag.docx 真实魔数 d0cf11e0 是 OLE2 加密容器(含 EncryptedPackage/EncryptionInfo 流),要用 msoffcrypto 类工具按密码解密,解密后才是真 docx。
操作:
import msoffcrypto, io, zipfileof = msoffcrypto.OfficeFile(open('flag.docx','rb'))of.load_key(password='it_is_k3y')out = io.BytesIO(); of.decrypt(out) # 得到合法 zip(docx)# 提取 word/document.xml 的 <w:t> 文本 → flag{you_h4ve_4nyth1n9}6. OSINT(照片溯源)
OSINT-MASTER
思路:照片 EXIF 含拍摄时间 + 机翼上的飞机注册号(B-2419)→ 查该机历史航班 → 按时间锁定航班号 → 再按轨迹找拍摄时经过的地级市。
操作:exiftool 读 GPS/时间 → FlightAware 搜注册号 → 航班管家看轨迹 → flag{MU5156_济宁市}。
7. 逆向 / 固件
7.1 APK(AmazingGame)
思路:别先跑模拟器。解包直接搜字符串,flag 往往以 base64 存在 dex 里。 操作:
unzip a.apk -d apkgrep -rl "ZmxhZ3tVX1cxbiEhXzdoZV9nQG00fQ==" apk # = flag{U_W1n!!_7he_g@m4}7.2 ARM 固件 + 采样数据(PlzLoveMe)
思路:.raw 是 PCM 音频(播放听歌识曲确定歌曲);.axf 是带符号的 ARM ELF,用 IDA/Ghidra 搜 UART 回调,看数据处理逻辑(本题是 Rx ^ 1);LCD 上的特殊字体(LVDC-Secret-Passage)对应歌词,最后几行就是密文。
操作:Rx ^ 0x1 → fhwdLd mnwdOnV mnwdOnV → giveMe loveNoW loveNoW → flag{giveMeloveNoWloveNoW}。
8. 沙箱逃逸
8.1 C++ 代码沙箱(ez_jail)
思路:过滤了 { },但 C++ digraph <% %> 就是花括号;或者 # 后加空格绕过 #define 检测。
操作:
void user_code()<%write(1, "Hello, World!\n", 14);%> // 本地 g++ 验证通过8.2 Rust 代码沙箱(I wanna be a Rust Master)
思路:syn 解析不会展开宏内部,所以 include_str!/concat! 可用;concat!("/fl","ag") 拼路径绕过 “flag” 明文检测;输出用 panic 报错带出(panic 信息进 stderr,而本题只回显 stderr)。
操作:
fn main() { Option::<()>::None.expect(include_str!(concat!("/fl", "ag"))); }9. 内存/磁盘取证(百度网盘题,简述)
- 擅长音游:E01 磁盘镜像仿真启动 Win7,桌面图标按提示分辨率(1200×800)排列成 flag →
flag{wowgoodfzforensics}。 - 擅长加密:BitLocker 解密靠内存镜像残留密钥(Elcomsoft FDDE),画图进程 mspaint 内存 dump 用 GIMP 调宽高还原密码 → 7z 解压得 flag。
- 热心助人:volatility
imageinfo选 profile →lsadump拿系统密码(去掉开头标志)→ base64 解码。
10. 小结:做题时最值得先试的 10 件事
file看真实类型,别信扩展名strings+binwalk+ 尾部字节- pcap 先
--export-objects http - 图片先查 EXIF/GPS、再试 LSB 位平面、CRC 爆破宽高
- GIF/视频逐帧差异
- 音频先分声道、看尾部、再倒放/频谱
- zip 先看注释、3 字节小文件(CRC 爆破)、已知明文(bkcrack)
- 加密文档用 msoffcrypto / office2john
- 二进制先搜字符串/flag 的 base64,IDA 搜关键回调
- 沙箱题先想”解析器看不懂哪里”(宏内部、digraph、编译期宏)
参考链接
- NewStarCTF 2024 官方 WriteUp 总站:https://newstar.wiki/wp/2024/
- NewStarCTF 2024 Misc 全套题目与附件(本文实战来源):本机训练库(Newstar/ns24/misc)
做题过程中多对照官方 WP 校准思路;很多”卡住”的点(如 zip 炸弹结构、沙箱绕过)官方 WP 一句话就能点破。