考点:Caesar Cipher
经典凯撒密码:flag 逐字符做 (x + K) mod 26 后输出。密文 fdhvduuhdoobolnhgdvkliwriwkuhh 整体回移 3 位,得到明文 caesarreallylikedashiftofthree,同时为第 2 题提供 keylength=3。
考点:Columnar Transposition
列移位转置,密钥由第 1 题推导:keylength=3,keyword = ascii_lowercase[:3] = abc。解密 = 按列长切回 3 列再逐行拼接,网格末行有填充字符,解密后尾部残留 eo 属于转置补齐。
考点:Known-Plaintext Attack、GF(p) 线性方程组
自制『Affine-Hill』密码声称抗已知明文攻击,实际是线性变换。公式 C = P·K + b (mod 37):字母表 37 字符,分组 m=4,用 [P|1]·[K;b] 构造 15×5 方程组 GF(37) 高斯消元唯一求解两个 keyword。陷阱:字母表 37 个字符模数不是 36;padding 只补齐实际只加密前 n//m 组。
考点:AES 结构、GF(2) 线性代数
AES-128 被去掉唯一的非线性组件 SubBytes,整体退化为仿射变换 F(x) = L(x) ⊕ c。用一对已知明文/密文求常数 c,对 128 个单位向量求 L 的列拼出 128×128 矩阵后高斯消元(rank=128),解出的输入按列位序还原即 flag 明文。
考点:ECMA-335 元数据解析、RSA 特殊素数结构、TLS 1.0 手工解密
『时尚 RSA』+ TLS 抓包。步骤 1:自写元数据解析器还原 CertificateProvider,发现 p = 2^1023 + x、q = 2^1023 + y,x、y 的 32 位 limb 均为小值;
步骤 2:N 的低 31 个 limb 等于 x·y 且无进位,从低位逐 limb 求解 x0·yk + y0·xk = ck,再爆破最高字节,完整恢复 x、y 分解 N;
步骤 3:用私钥解 ClientKeyExchange 得 premaster,按 TLS 1.0(PRF-SHA256 + CBC + HMAC-SHA1)解密应用数据。
考点:Biscuit 令牌、事实注入
用 Biscuit 做授权 token 的留言板,/flag 需要 role("admin") 事实。/signup 的 username 被原样拼进 user("..."),注册 x"); role("admin"); user("y 闭合字符串并注入 admin 事实,同时保留合法 user 事实使鉴权查询成功。
考点:二进制补丁、黑名单绕过
一个『坏猫』版 cat,拒绝读取 /flag、/proc、/dev。.rodata 中黑名单路径为明文 /flag,原地改写成等长的 /etc/passwd(badcat_patched2.bin),上传后直接运行 badcat_patched2 /flag 完整读出 flag。
探索过程:先尝试 fd 复用、kill -STOP + /proc/PID/fd 检查,最终补丁方案最直接。
考点:shell 元字符、$IFS 绕过
『省内存』的受限 shell,输入长度与字符被限制。空格不可用时用 $IFS 展开充当分隔符:ls$IFS*/*、cat$IFS* 遍历并读取文件。
考点:音频取证、声谱图分析
flag 藏在声谱图里,直接用 Audition 打开查看频谱图可见。
考点:图片定位、经纬度查询
『Do I colour grade better than Christopher Nolan?』,flag 格式 gaslightCTF{LAT,LONG}。纯图寻题,0 秒钟猜出雅典卫城。
实际体验:下载图片等了一两小时才开放,经纬度试了 ±0.007 还是不对,网站还一直崩溃,直接放弃了。神人主办方给我气笑了。
考点:非标准载体提取、x86-16 反汇编
『Spectre-proof VM』实际是纯 CSS 实现的 x86-16 模拟器(x86CSS),内存放在 CSS 自定义属性里。用正则提取 @property --mN { initial-value: ... } 得到内存镜像 rom.bin,capstone 以 16 位模式反汇编,定位 flag 校验/输出逻辑。