DEF CON CTF 29 Final of Tea Deliverers

介绍

今年 DEFCON 的决赛名额仍然维持在了 16 个,分别如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
DiceGang             [via pwn2win]
HITCON ⚔️ Balsn
Katzebin [winner of DEF CON CTF 2020 as A*0*E]
mhackeroni
NorseCode
春秋GAME-Nu1L
ooorganizers
pasten [via hxp CTF]
Plaid Parliament of Pwning
PTB_WTL
r3kapig
Shellphish
StarBugs
Perfect ⚔️ Guesser [via HITCON CTF + PlaidCTF (!)]
Tea Deliverers

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
2
3
4
5
Capture the Flag Hours (all times local to Las Vegas):

- Fri, Aug 6, 10am-8pm, set up begins at 9am
- Sat, Aug 7, 10am-8pm, set up begins at 9am
- Sun, Aug 8, 10am-2pm, set up begins at 9am

这意味着我们国内的比赛时间变成了

1
2
3
day1:8月7日(周六)凌晨0点到8月7日上午11点(第一个小时网络配置时间)
day2:8月8日(周日)凌晨0点到8月8日上午11点(第一个小时网络配置时间)
day3:8月9日(周一)凌晨0点到8月9日凌晨5点(第一个小时网络配置时间)

绝大部分时间都是凌晨,所以需要切换时区。此外,为了应对长时间作战的情况,我们把人大概分成了三波,在尽可能确保每个题都有人做的情况下,也确保大家的精力。

本来大家想得好好的,一起去北京打比赛。可是,疫情突如其来,打破了之前的计划,导致不得不临时再次制定计划,最后人员就位于不同区域,主要有

  • 北京(人员主要集中在北京)
  • 上海
  • 美国
  • 以及一些零零散散的地方

为了更好地远程协作,我们还开了视频会议。由于疫情原因,我没有去北京,但是为了能够集体协作,我去了上海。

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 系列题目的前期经验,仍然需要了解这个系列的题目具体是如何工作的。cxmyoufu 分别搭建了这个题目的环境。虽然逆向分析了很久,仍然没有特别搞清楚里面的工作逻辑。在我们分析的过程中,这份宁静又被 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
2
Players, it was an honor to play with you in these four years.
We hope our successors will be as lucky.

我第一次参加的 DEFCON Final 比赛就是 OOO 举办的,也是 OOO 举办的第一届比赛,此后每一年也都参加了。虽然,比赛过程中或多或少会出现问题,整体而言,主办方还是非常 nice 的,是真心想把比赛办好的。今年的 virtualization stack 系列的题目更是如此,可能这也是他们想在结束任期内搞一点大的吧。

下一届主办方

会是谁?