平台:ctf.bugku.com|范围:场景题(在线容器)+ 行为门禁型题目 + 现代隐写 特点:这类题不是找到漏洞就行,而是要满足题面给定的「行为指标」或「容器判定」,差一点就不给结果。
0. 场景题的两类形态
| 形态 | 判定方式 | 典型代表 |
|---|---|---|
| 问答型 | 场景内 7–17 道题全对后返回平台 flag | 流量取证、应急响应类 |
| 门禁型 | 提交数据 → 服务端训练/评估 → 指标全过才released | 数据投毒、模型评测类 |
| 利用型 | 常规渗透拿 RCE/文件读取 | SSRF、上传、反序列化 |
图 1:问答型 / 门禁型 / 利用型的判定链(Archify architecture)
1. 行为门禁:七项指标与「n 维扫描」配方
以「标注回流」型题目为例:提交一份 JSONL 训练样本,服务端训练候选模型后返回 7 项指标,全部达标才返回 flag。
| 指标 | 阈值 | 含义 |
|---|---|---|
| Clean Accuracy | ≥0.92 | 干净集准确率 |
| Clean F1 | ≥0.90 | 干净集 F1 |
| Blocked Recall | ≥0.90 | 应拦截样本被拦截的比例 |
| Allow Precision | ≥0.89 | 放行样本中无害的比例 |
| Redteam Release | ≥0.72 | 攻击性样本被放行的比例 |
| Release Confidence | ≥0.60 | 放行置信度 |
| Shadow Block | ≥0.78 | 影子集拦截率 |
1.1 关键发现:指标几乎只由「样本数 n」决定
同一 n 下换内容组合,指标基本不动;n 一变,整体跳变。实测(单窗口 ~15 秒一次评测):
| n | Blocked | Redteam | 结论 |
|---|---|---|---|
| 28(官方样例) | .8727 | .6406 | 双不达标 |
| 40 | .8455 | .6914 | 盲目扩充反而压低 blocked |
| 41 | .9545 | .6406 | blocked 达标但 redteam 崩 |
| 42(hard=6~10) | .8909 | .8828 | 只差 blocked 0.0091 |
| 42(hard=14) | .9000 | .8789 | ✅ 全过 → released |
| 43 | .9273 | .7031~.7188 | redteam 差 0.0012 |
| 46 / 49 | .9273/.9545 | .3164/.2500 | redteam 崩 |
配方:官方样例 28 条 + 14 条「演练/教学语境」的正常样本(共 42),批次号与样本前缀一致。
1.2 六条硬约束(不满足直接打回)
- 样本数 28–54 行;
text长度34–40 字符(超了报「第 N 行长度不符合要求」);- 单行 JSON 约 61–67 字符;
- 内容过审:
口令/密码/提权/载荷/攻击等词会被拒; - 样本必须唯一(重复报「重复标注样本过多」);
- 多数样本
text必须以页面填写的批次号开头。
1.3 方法论
- 先扫维度再调内容:把「内容空间」搜索换成「结构空间(n、比例)」搜索,效率差一个数量级;
- 压线题看阈值粒度:指标常以 1/128 为粒度跳变,差 0.0012 与差 0.09 是一样的——都要换 n 或换比例;
- 一次窗口只改一个变量,记录 (n, hard 比例, blocked, redteam)。
2. 现代隐写与容器技巧(场景题常用)
2.1 CRC32 反演:4 字节明文直接解
定长 4 字节时crc32(x) = M·x ⊕ c是 GF(2) 仿射双射,可逆:
c = zlib.crc32(b'\x00'*4) & 0xFFFFFFFF cols = [((zlib.crc32((1<<i).to_bytes(4,'big')) & 0xFFFFFFFF) ^ c) for i in range(32)] # 32×32 GF(2) 消元 → 由 CRC 字段反解 4 字节明文(无需口令)边界:仅当明文定长且 CRC 可信(非 AES)时成立。
2.2 RAR4 单字节头篡改
unrar l -v报头损坏 →name-32反推头起点 → 用健康条目校准CRC32(header[2:HEAD_SIZE])口径 → 把HEAD_TYPE从0x7a(HEAD_SERVICE)改回0x74(HEAD_FILE),重算 CRC 与存储值自洽 → 正常导出。 (7z 会跳过 service 记录,只有 unrar 暴露。)
2.3 零宽字符:7 位 base5 → UTF-16
574 个零宽、5 种符号、每行块都是 7 的倍数 →574 = 82 × 7: 5 符号映射 0..4 → 每 7 个按 base5 拼整数 v →chr(v)直接当 UTF-16 码元(不是 GBK、不是 CJK 偏移)。
2.4 密码学:纯密文攻击
- 3131 类:逐段 Vigenère,用重合指数 IC 定 key 长(8),每列用卡方统计挑偏移,纯离线 1 秒出解;
- ADFGVX 类:6×6 Polybius + 列换位,缺 key 时先做频率分析,再枚举列序。
2.5 流量取证
- SSH 溯源:banner 分组区分 libssh 爆破 / OpenSSH 手动 / PuTTY 运维,
follow,tcp,ascii读反弹 shell 明文; - ICMP 隧道:取 ICMP data → 去头 → AES-256-CBC 解密 → GZip 解压;
- 数据库盲注:sqlmap 用重查询代替 sleep,真假分支差 0.5s 量级 → 判时间盲注后逐位还原。
3. 场景题作战纪律
- 单窗口 ≤8 分钟:抓题面 → 抓附件 → 分析 → 提交 → 释放,一次做完;
- flag 必须在销毁场景前提交,销毁后无法补;
- 先离线、后窗口:附件/pcap/源码在本地做完再开窗,窗口只做提交;
- 问答型提交脚本自己闭环:只输出真结果,不要把中间候选串打出去;
- 失败写清「已排除项 + 可逆条件」,不要把「试过」当「排除」。
4. 一页检查表
[ ] 场景是问答型/门禁型/利用型?判定方式先确认 [ ] 门禁型:7 项阈值记下来了吗?先扫 n 还是先调内容? [ ] 样本硬约束(长度/唯一/前缀/敏感词)逐条过了吗? [ ] 容器异常:先判 magic,再修头(RAR 用 CRC 自洽法) [ ] 隐写:通道顺序 → LSB → 差值 → 调色板 [ ] 编码:先看整除性与符号种类,再定映射 [ ] 窗口纪律:一次做完、先提交再释放5. 图形附件(Archify)
| 图 | 文件 | 说明 |
|---|---|---|
| 场景题三类形态与判定链 | scene-arch.html(交互图,本地交付包) | 问答/门禁/利用三条链 |
| 场景题作战流程 | scene-timeline.html(交互图,本地交付包) | 摸规则→扫维度→突破→复核→归档 |
流程视图
从判型到归档的主线流程:每步都要求留下原始输出,结论必须能被独立脚本重跑。
两图archify check均issues: [];archify finalize均ok:true+browser-check:pass;正文内嵌同源 PNG 截图。