DEFCON 33 游记
今年8月自驾去了 Vegas,作为 r3kapig 的一员以 RePokemonedCollections 的身份玩了 DEF CON 33,zellic 发的T恤真好看吧🥰🥰
⚠流水账警告⚠
8月7日 启程
提前一天把同在美西的 Xia0👴从 SD 抓到了河滨,8月7日上午吃过早饭就启程了。15号公路还是比5号耐看不少的,快到 Vegas 时候见到的神秘光棱塔,我们内华达也有自己的东方明珠:
下午两点到了 Rio(疑似 DEFCON 的固定酒店,但离会场还有些远,AIxCC👴住的几家就近很多),想着吃点🀄的就试了附近的洞庭鲜,LA 的洞非常美味,然而遗憾的是 Vegas 这边的洞并不是同一个老板,质量只能说勉勉强强,性价比是完全没有。
Rio 入住也是十分神秘,酒店认为不能把参赛的带灰阔名字登记到系统里,所以给 DEFCON 选手的登记信息都是纯手写的。小折腾了一下之后也是入住了,房间蛮大,带上凯悦的大沙发床感觉住6个人也没什么问题。
午睡起来之后 Xia0 用酒店玻璃做滤镜拍了这张炫酷外景:
之后就是面好多好多来 Vegas 的其他 RePokemonedCollections 家人,见到了 ASU 和 IUB 传奇组的群友,发现每个组的风格都好不一样www,也很感慨 Prof. Fish 能坚持维护这么久的 pwn.college,羡慕 ASU.jpg
晚上一群人吃了酒店楼里味道尚可的日式拉面,因为一直没有 live 的具体安排,吃饭时候大家除了吹水还聊了下 live 怎么上,之前说今年 live 除了 pwn 和 re 还有顶掉去年 web 的 crypto(结果最后并没有 crypto,只有 re 和 pwn)
DEFCON 的 live CTF 是淘汰制,分胜败组,无论如何总计输掉 2 场就会出局,最后按淘汰先后顺序算名次。前几组会同时开,大家做一样的题但还是 1v1,开赛几十分钟会陆续放若干个 hint 。如果 1h 内两队都没解出就进入 Sudden Death,题目换成非常简单的签到提拼手速。
晚上主办方来酒店发了 badage 和赃物袋(帖子和手册),遗憾的是今年的 badage(右)并没有炫酷的 PCB 硅基小生命,和往年看到的比很没有灵魂了(
8月8日 正赛第一天
今年8月8是周五,DEFCON 似乎每年都是8月的第二个五六日
早上赛前队长会议终于公布了第一天的 live 会全是逆向,于是去年赢了逆向 1v1 的 someone 这次继续上。
然后在第二场 live 就见到了 someone IDA 和 r2 双开,用 vim 手搓题解 的炫酷场面
但下一场 live 正赛的题目上了往年 Sudden Death 难度的签到题,动调一下直接出 flag,高估了题目的 someone 👴在本题遗憾离场,结束了全队今天的比赛,下一场是明天的败者组 solo
结果下午的 live 更是有了后续火出圈的场面,BlueWater 选手掏出队里的 MCP 直接自动把题在后台 5 分钟秒了,全程没有任何交互,选手还在前台尝试和 AI 交流逆向程序,后台 MCP 已经完全打通了,赛后主办方专门加时确认了是 MCP 独立完成的挑战而不是队友在后台参与了解题。而做同一题的 SuperDiceCode 和 Friendly Maltese Citizens 则是以 Friendly Maltese Citizens 用时 48 分钟解出结束。
而机器人队的统治还没有到此结束,今年后续的 DEFCON 正赛中 LLM 又若干次展现出了比人类逆向/漏洞分析手更快更准完成逆向找洞写exp全过程的能力…
第一天 AD 刚上题的时候大家还没想着一开始就求助 LLM ,上午第一题是个点歌机,加载了一个附件作为插件所以要逆两个部分,一个是大概会作为系列题目的点歌机本体,另一个插件大概是本题的漏洞点。程序有后门(win)但 patch 只允许在一个纯文本 filters.txt 里加规则。
点歌机本体自带一堆音频处理函数并不是那么好(手)逆,插件在做的是先把 wav 通过 wisper.cpp 转文本检测之后有是否 hey
或者 hacker
,再过一堆音频处理之后再转一次文本,这次有 hey hacker
就可以进后门。
这时候群里的音乐制作人开始用 FL Studio 手调音频但一直效果不怎么理想。
今年主办方加了“隐身模式”,用对应目标得分降低为 25% 的代价换取完全隐身的流量(靶机是每队一组镜像并且不通网,允许 patch ELF 的题选手也没法自己拦流量)
一点多的时候似乎 MMM 拿到了一血,下午2点的时候终于拿到了这题的流量,快速抄下流量打回去,现在场上还没什么强力的 patch 所以抄来的流量也能打全场 (像这种交互都不用改的流量应该能自动重放的,比赛 5 分钟一轮,人工花掉的每个 5 分钟都是丢掉的 1100 分,输.jpg)
然后第一天还放了很多题,以及一个近乎猜谜的 KOH (后来才知道是要过各种签名校验),但每个都要狠狠逆向…
今年似乎每天提前 1 小时结束,晚上 5 点就下班回房间了。虽然今年 Yan 说有可能淘汰赛题(最后并没有)但第一天结束时候 open 但没打通的题目还是非常多的,于是住 Rio 的群友在酒店里的海鲜酒家吃了顿还算可以的中餐就回房间继续上班了。
苯人回酒店之后想着第一天 live 是逆向的话,第二天应该轮到 pwn 了,于是掏出年久失修的宝贝 SAEG 准备最后调一把交互和延迟然后打包起来,第二天不管谁上都能多个自动 pwn 的 bot 打副手。
(结果非常遗憾虽然第二天的 pwn 确实有很多简单题,但只有第一轮和最后一轮是 x86 的,其他都是 ARM 或者 RISCV 架构的 pwn,SAEG 并不能打,人工专家队再输一轮)
8月9日 正赛第二天
早上一开赛 BlueWater 就给大家又整了个大的,直接把 KOH 的所有挑战签名都签出来了,KOH 是解出越少分越多,签下所有挑战直接每轮狂炫上万分。不过遥遥领先的 MMM 屯的 exp 更多,光打全场每轮稳定也是几万分。跟在我们每轮加的分就只在几千分之间浮动(这时候我们还没意识到 infra 已经不太稳定了)。
上午放了点歌机系列的第二题,又是一大坨要逆的逻辑,结果在逆了一个多小时的时候 xia0 发群里了一个链接,GPT-5 挖了一个 UAF 出来,然后再几轮调教之后给好了(包括自动生成 wav 文件部分的)能触发漏洞的 exp。构造一下之后就变成了 leak 和 arbitrary call。
因为 call 的时候寄存器完全不可控,sp 附件也没有可控的数据,(实际上 *($rax + 8)
和 *($rdi + 8)
以及之后的部分是可控的)。xia0 的想法是合并一下把 *$rdi
也变成可控的就可以 call system 了,结果调了十几分钟一直卡在风水上
这时候我在想能不能栈魔法一下拿 rax 或者 rdi 把栈控了,然后 pop ret 就能 ROP 了,然后果然找到了(似乎唯一)一个能用的 gadget:
1 | 0xb157b : push rax ; add dword ptr [rbx + 0x41], ebx ; pop rsp ; pop r13 ; pop rbp ; jmp 0x28430 |
这下大控特控栈了,mempcpy 也不用什么操作就能平滑返回进到 ROP 里,这时候还没一血,赢!
本地直接通了,结果远程一直打不通,再调发现是 flag 的值会影响音频处理的结果,但我们可以把音量设成 0 把随机的部分去掉,这样只要把音量是 0 的时候调通就可以稳定打全场了。
结果调的时候被 Cold Fusion 一血了,用了接近 5h,我们比一血慢了 23 分钟,可惜可惜😭。
这题因为是接近一血的 exp 又很稳定,所以应该能稳定打全场,但快结束的时候忽然每轮只能打几个甚至一个 flag 都打不出,手动打交 flag 发现平台直接接受而不是报 flag 重复,那大概可以肯定是 infra 锅了。
虽然后来复盘有部分原因是主办方的网络那时候也炸了,但一排查还发现了 infra 的别的肯定会丢 flag 的锅,一算发现这两天的 attack 分少说丢掉了 20%,非常恐怖了。
回酒店之后问空白 crazyman 要了一份半手动的 infra 作为备份,以防第二天 infra 再出问题。
第二天最后晚上的时候 Hurrison 发群里两个神秘证书,紧接着 zeroc 和 SinkDev 就把 KOH 全签出来了,一问是用咸鱼花 6.6¥买来黑产泄露的 Google Play Integrity Keybox 签的,非常有生活了。
8月10日 正赛最后一天
今年正赛最后一天时间也很短只有 2 小时,但刚开打不久还没抄几个流量就发现 infra 直接不动弹了,排查是跑的攻击脚本过多机器超载死机了(还好昨天做了灾备),于是等重启的几轮只能靠现场和 saccharide 几个人紧张地跑半自动批量攻击脚本。
DEFCON A&D 中防御的 patch 都是通过 docker 进行并且对其他队伍完全公开的,所以可以直接抄别的队的 patch 过来,当然要也承担 patch 有后门的风险
最后一天的时候 MMM 开始打自己 patch 中的后门,每次打的时候全场防御只有 MMM 得分,所以当轮 MMM 可以把攻击和防御分都拉满,以夸张的速度上分(但 MMM 并不是每轮都打,并且他们似乎确实找到了主办方 check 逻辑的漏洞可以造出通防来,所以很多队都用他们的 patch 希望在 MMM 不打的时候吃一些防御分)
12点10分比赛结束后还不太能知道名次,因为和后一名的 mhackeroni 分差并不大,而 DEFCON 的分数表是延迟的(其实 attack 分应该可以自己计算),流量也是延迟的,所以成绩还是等到下午主办方公布排名才看到。
mmm 和 bw 依旧是遥遥领先,RePokemenCollections 排在了第五名,和后一名只差 1106 分,任何一题晚一轮解出,patch 慢些或者再漏掉一些 flag 或许都是不那么一样的故事了
试着盒了一下其他战队的成分:
1 | #1 CMU & UBC & Taesoo Kim |
但无论如何今年 RePokemenCollections 还是守住了前五的位置,作为赛后小聚,RePokemenCollections 的家人(小猪)们一起去维加斯蛮有性价比的 A.Y.C.E 吃了午餐
最后放一张小猪们的合照:
花絮
DEFCON 每年都有《非官方》团队会组织私密的 CTF after party,今年的 party 有过去一段时间里赞助了非常多 CTF 赛事的 zellic 赞助,有不限量的各种(确实是各种)酒水饮料和披萨零食,还有 zellic 空投的T恤和帖子(以及其他神秘队伍空投的无料纪念品)。
After party 现场是三个大豪斯串起来的场地,非常巨大,有喷水的大泳池,篮球场,舞池和DJ,气氛好到梦幻。
有被红蓝|红黑和 ゼリク 狠狠帅到🥰