介绍
今年 DEFCON 的决赛名额仍然维持在了 16 个,分别如下
1 | DiceGang [via pwn2win] |
A*0*E
变成了 Katzebin
,也吸纳了新的成员的参与,赛后发现他们竟然在现场的似乎就有80人左右。
pasten 似乎每年都能从 hxp CTF(C3CTF)中获取到 DEFCON Final 的名额,但是在决赛的时候却不怎么好好打。。
国内今年又多入围了 春秋GAME-Nu1L
队伍,可见国内的队伍实力越来越雄厚。
今年 Perfect ⚔️ Guesser 非常猛,拿到了两个外卡赛的冠军。
NorseCode、ooorganizers(怀疑搞事)、StarBugs 似乎是比较陌生的队伍。此外, PwnThyBytes and WreckTheLine 还联合为了 PTB_WTL
。
只是今年没有看到日本的队伍(TokyoWesterns、Binja)入围决赛。
赛前准备
考虑到今年的疫情,我们觉得今年的决赛仍然是会以远程的方式举行,所以大家很早就考虑在决赛的时候聚在一起打比赛,并提前做一些准备。今年我们还拉上了 NESE 等战队的人参与。赛前我们大概分了几个小组
- Bin 组,主要负责二进制逆向与漏洞利用,由 kelwin、brieflyx、我来协调。主要考虑了
- 考虑到 DEFCON Final 的题目大都是大型的逆向,所以考虑准备逆向协作分析(IDArling)工具,但是因为时间的原因咕咕咕了。
- 为了更好地管理 Patch,我们还制定了 Patch 规范。
- KoH 组,主要负责 KoH 题目,由 zzh、mcfx 来协调。
- 平台支撑 & 运维 & Web 组,主要负责比赛过程中网络、平台支撑、web题目,由zTrix、youfu、wdeilim、gml来协调。主要准备了
- Flag submit system、比赛数据可视化等一套系统
除了一些基本的准备,赛前还让大家统一使用了一下平台支持组开发的平台,以便于在比赛过程中快速实现批量攻击。
虽然和去年一样,都是远程比赛,但是今年主办方把比赛时间切换到了拉斯维加斯时区
1 | Capture the Flag Hours (all times local to Las Vegas): |
这意味着我们国内的比赛时间变成了
1 | day1:8月7日(周六)凌晨0点到8月7日上午11点(第一个小时网络配置时间) |
绝大部分时间都是凌晨,所以需要切换时区。此外,为了应对长时间作战的情况,我们把人大概分成了三波,在尽可能确保每个题都有人做的情况下,也确保大家的精力。
本来大家想得好好的,一起去北京打比赛。可是,疫情突如其来,打破了之前的计划,导致不得不临时再次制定计划,最后人员就位于不同区域,主要有
- 北京(人员主要集中在北京)
- 上海
- 美国
- 以及一些零零散散的地方
为了更好地远程协作,我们还开了视频会议。由于疫情原因,我没有去北京,但是为了能够集体协作,我去了上海。
Day1:08 月 07 日
比赛第一天开始时,大家基本都在线。刚开始时,主办方的网络出现了一些小故障,然后比赛稍微延迟了一下。不过这个倒是小问题,大问题是比赛一开始的时候,几乎所有的 AWD 题目都被泄漏了。当时大家人都傻了。。更为刺激的是,看到题目的时候,就更震惊了,一堆vmm
的题目,一个系列,一共 5 道题。当时比赛放出的题目以及泄漏的题目一共有 8 道,要知道 DEFCON Final 一般决赛也就 10 道题左右,这一下子基本上就差不多泄漏完了。虽然第一年 ooo 办比赛的时候也泄漏过题目,但是却没有泄漏过这么多题目。不过或许这也和疫情有关吧。
从另外一个角度来看,原先想好的三波作战就稍微有点被打破了,开始摇人,基本上都投入了战斗,经过分析大概确定了 ooows
系列题目的放题顺序、cooorling、barbmetal、ooopf 等题目的大概意思。后来 ppp 告知了主办方赛题泄漏的事情,主办方说也会做一些调整,并明确说明有题目没有泄漏。虽然主办方说是这么说,但是大家仍然不敢懈怠,所以就分工开始看不同的题目。在大概分析了题目后,我们仍然尽可能维持了原先每一波的计划。
在分析了题目之后,为了协作更加方便,我们上海的几个人(youfu、gwynbleidd、shyoshyo、我)决定做 ooopf 题目,因为这个题目相对来说比较独立。在逆向分析的过程中,虽然也发现了漏洞,但是还没有逆清楚具体解析执行的过程,然额 StarBugs
就打出了一血,这时候立马开始看流量,对流量进行复现,并根据我们发现的漏洞又写出了一个 exp。此外,我们也针对相应的漏洞进行了修复。但是,最后仍然没有完全补上,仍然在被 Katzebin
的独家 exp 打。。
比赛过程中,我们还发现了另外一个可能可以利用的路径,但是在比赛过程中并没有利用成功。
与此同时,KoH 小组也投入了 zero-is-you
,不过最后我们并没有的太多的分数,PPP 在这道题上拿到了800+分,实在是恐怖。。
Riatre
很快发现了 barb-metal
的任意地址读,并迅速打出了一血。在修复漏洞的过程中,主办方给了 hint,然后 Riatre
立马就提交了 patch,但是发现还是能够被打。到了最后,虽然修好了,但是题目 bad 了。
第一天结束的时候,主办方召集了大家,说是发现有队伍在 patch ooopf 时提交了能通过检查,但是会 dos 服务的 patch,并希望大家能够自首。后来我们内部讨论一致觉得不是我们,毕竟我们没乱搞,而且最后结束的时候我们还在被打😭
第一天比赛结束后,我实在是顶不住了,就去休息了。。。当然还有一波新的人在 7 号早 8 点左右投入了战斗,开始搞 ooows 系列的题目。当然,这一阶段主要的题目是 p92021。
(画外音:到了酒店后,我基本上直接就倒床上睡觉了,但是没想到真的热,后来到了晚上想开灯的时候才发现没有插电、空调也没开。。然后开了空调就继续睡了,差一点就睡过了,好在晚上 11 点的时候醒来了。)
Day2:08 月 08 日
比赛第二天开始后的 captain meeting 中,主办方说防守 dos 服务是 PPP 干的,由于 PPP 最初提醒了他们泄题,所以没有过多的惩罚,只是让他们丢失了对应的防守分,但是感觉上 PPP 并不会干这样的事情,调整之后可以很明显看到他们分数变化。
主办方同时说会放出一个新的 KoH,以及ogx,broadcom。
早上一开始没多久,StarBugs 就打出了 ooows-p92021
题目的一血(不过我们有 nop free 的 patch 🦆,这简直和 2019 年的场景一毛一样,写利用真滴难,patch 几秒钟。)后来没多久,这个题目我们也可以打了。
没多久 KoH 题目 www
就被放出来了,这个题目和内网渗透测试相关,PPP 仍然是强势领先。。。他们的分数涨的简直不可思议。不过后来我们队伍也渐渐地听到了怎么玩(在视频会议中听见北京的人的大笑声 23333
我们上海这边基本都投入到了 ooows-ogx
这个题目上,但是由于我们并没有 ooows 系列题目的前期经验,仍然需要了解这个系列的题目具体是如何工作的。cxm
、youfu
分别搭建了这个题目的环境。虽然逆向分析了很久,仍然没有特别搞清楚里面的工作逻辑。在我们分析的过程中,这份宁静又被 StarBugs
打破了,这简直是不可思议。。
我们开始尝试修补漏洞,可以 patch 的 binary 本身就很小,主办方还限制了只能 patch 一个字节,所以说应该比较好 patch。虽然中间有短暂的时间只被一个队伍打,但是后来就又被多个队伍打了。最后全场没有一个队伍可以防御成功,这就离谱。到了这题目快下的时候,我们终于复现了流量。比赛结束后,大概确定这题目应该是修不好的。。
ooows-broadcooom
大概在 5 点左右的时候放了,这显然就是一道作业题。
在第二天结束后,captain meeting 中,主办方公布了最后一天的题目 hyper-o
和另外一个 KoH shooow-your-shell
。显然,最后一天有 3 个作业,而最后一天就只有 4 个小时,每轮 2.5 min,想想也真的是刺激。。同时,主办方也宣布了下一届要换人了(似乎带有一点点遗憾)。
有意思的是,最后的两个作业题是通过 discord 放的(说明主办方也在一直 check 会不会出现锅
然后差不多我们上海地域就差不多就又开始休息了,不过这次就没有回酒店了,而是随便找个地方躺下来休息,毕竟最后一天要冲刺。
Day3:08 月 09 日
Day2 大家大部分人都没有睡太多时间。我们上海这边的为了尽可能方便,选择投到了 shooow-your-shell
这个题目中,并这个题目不需要太多的背景知识。基本上,这个题目很快我们内部就达到了正常意义下的最优解(其它队伍制作的搞笑截图如下)。不过大家还是尽可能地找出一些其它更好的最优解。
同时,我们也考虑了一些策略(当时我们在考虑要不要稳定当老二,因为感觉老大不好当啊,后来意识到老二也不能好好当,所以就索性具体情况具体搞了)。而且,我们感觉主办方的 history 同步总有可能出锅,最后也确实好像出锅了。。
比赛过程中,我们惊讶地看到 StarBugs 用了几个字节就完成了对应的功能,当时总感觉是同步的问题,后来发现很多队伍都这么打了,觉得事情不简单,,最后发现确实可以利用几个字节再次读取内容,执行 shellcode。。。
broadcooom 和 hyper-o 的漏洞利用进展并不是很顺利,不过漏洞都找到了,patch 也都 patch 好了。其中 StarBugs 又再次打了 hyper-o
的一血,Katzebin/PPP 打了 broadcooom
的一血。
比赛结束后,我就立马坐火车回杭州了,毕竟还要继续上班。差不多开始上班的时候,获知了我们是第三名,当时觉得不可思议。感觉上我们可能会苟在第四名,毕竟 StarBugs 那么猛。。。Katzebin 再一次拿到了第一,PPP 拿到了第二。
(据说我们是在最后超过了 StarBugs 跃升为第三的。)
赛后总结
自身队伍
- 我们的平台支撑小组非常给力,快速批量攻击提交,数据可视化等等。
- DEFCON 考察的底层能力、逆向能力仍然欠缺,需要恶补。
- 虽然群里大概有60人,但是真正参与比赛的也就 30 人左右,所以之后考虑拉人还是要考虑找真正会投入的。
- 视频会议沟通感觉还行,但在具体沟通时还会存在一些问题,消息同步不到位导致做一些无用功。
其他队伍
- PPP 和 Katzebin,人力差距悬殊。。
请自行脑补一下 80 人左右的阵容。。
- 赛后才知道 Starbugs 其实是若干支韩国队伍组成的,怪不得这么凶猛。。
1 | r00timentary got 4th place in DEF CON CTF 2021 Finals as team StarBugs (with CodeRed, GYG, SED, and a few more friends). Congratulations to the winners, and we thank @oooverflow for organizing the great CTF! |
DEF CON 比赛
- DEFCON 仍然是非常重视逆向、底层基础的比赛,和国内的风格不太一样。
- 网友对于 DEFCON 29 CTF 的总结。
- oooverflow 四年主办方,结束了,带着一丝伤感。
Zardus
也是感慨良多。
1 | Players, it was an honor to play with you in these four years. |
我第一次参加的 DEFCON Final 比赛就是 OOO 举办的,也是 OOO 举办的第一届比赛,此后每一年也都参加了。虽然,比赛过程中或多或少会出现问题,整体而言,主办方还是非常 nice 的,是真心想把比赛办好的。今年的 virtualization stack 系列的题目更是如此,可能这也是他们想在结束任期内搞一点大的吧。
下一届主办方
会是谁?