From Zero To X

zTrix's Blog

DEFCON 23 CTF 战记

by Wenlei Zhu (zTrix@blue-lotus)

又一年 DEFCON CTF 已经结束,最终成绩仍然没有完全公布,在这里先发一些赛场见闻和独家爆料。

今年大部队分别在 8 月 3 日与 8 月 4 日两天出发,巧的是,我们 4 号部队在 UA888 航班又遇到了前去 blackhat 收集段子素材的教主 tombkeeper,于是在 3 号部队航班取消推迟一天的情况下,我们 4 号部队居然坐着由教主镇守的更稳的飞机提前到达。

7 号早上 10 点,所有队伍就位配置环境,依然是只给一根网线一根电源线。今年的准备终于是完全充分了,速度布线、配置 VLAN 999、配置 VPN,第一次在比赛开始前就完成了配置任务。自 所选的 VPN 方案、通信方案、文件共享方案工作良好,我们自己开发的几套工具也一切就绪。

去年的平台就已经是 ARM 上使用 qemu 的多架构了,今年猜不到具体平台,但是估计一定也是多架构。接近 11 点的时候,终于可以访问 gamebox,gamebox 的架构是 x86-64。

比赛的初始分数似乎是一个非常神奇的数字: 12033,不知道是如何计算出来的。

defcon 23 scoreboard

首先放出来的第一题是 rxc。一道 x86-64 架构的 C++ 的题目,逻辑相当复杂,逆向工作极大,通信也是二进制协议,上手都不知道如何交互。

于是所有队员都在艰难分析 rxc,进展缓慢。到了下午 14:57 分,也就是刚刚放出题目不到 4 个小时,DEFKOR 已经开打,主办方 announce 了 First Blood,DEFKOR against PPP,一个非常炫酷的 3D 动画效果。 现场惊呆了,按照正常功防比赛策略,第一个写出 0day 攻击的一般不打最强的对手,防止他们太快学习流量掌握 0day,而 DEFKOR 上来就毫不留情吊打两届 DEFCON 冠军 PPP,这是挑衅?(后来才想起来应该是因为 PPP 的 IP 是 1,他们可能只是按顺序打的)。

于是接下来半天发生的事情基本上就是 DEFKOR 吊打各国选手。除了 HITCON 速度很快地写出 replay 之外,其他各队用了一整天的时间,在能看到 DEFKOR 流量的情况下,仍然写不出 exp 出来,只能眼睁睁的看着 DEFKOR 分数飙涨。

第一天的分数变化趋势画出图是这样的(图片来自 maskray):

defcon 23 scoreboard

(如果去过 BCTF 或者 XCTF 决赛的话,大家会对这样的曲线图感到熟悉 23333333)。

由于韩国队伍来自 Best Of Best 国家培养计划,我们都戏称这是韩国网军屠杀手无寸铁的各国业余爱好者。

第一天还放出了 ombdsu、tachikoma 和 hearye,ombdsu 是一道 mips 的服务,tachikoma 是一道 i386 的服务,而 hearye 是一道 ARM64 的普通题目(非服务,做题得一次性分),主办方说 you should solve as soon as possible,我们没有在意,放到了第一天晚上去解,结果第二天写好 exp 准备提交的时候,发现主办方已经关闭了题目,说只允许第一天提交。损失不少分数。不得不吐槽主办方在这样的事情上过于模糊。

第一晚的分析之后,我们写出了 rxc 的 exp,ombdsu 有 replay 和 exp 都可以用,三个服务都做了 patch,8 号早上一开,果然现场十分混乱,打成一片。

第二天实际上并没有太多精彩的场面,大家能利用的东西都差不多,所以我觉得分差没有拉开。差距仅仅体现在有的队伍 exp 能多打几个,有的队伍服务修补的好少丢分上面。在各种努力之下,我们从第八名上升到了第六名,0ops 也在我们后面紧追不舍,超过了不少队伍。

主办方第二天声称也是有像第一天 hearye 一样的 extra challenge 的,结果到了结束也没放,我们以为是跳票了,后来去问了一下才知道,原来只有第一天做出来 hearye 的队伍前 4 名才有姿格拿到这道 extra challenge。

对于我们而言,第二天的 19 点 13 分到 19 点 31 分是最黑暗的时刻,原因是某个队友不慎踢掉了总电源,所有设备包括网关路由器在内全部掉电,损失了 3 轮的 FLAG,不知道造成了多少影响。此事需黑十年。

第二天还放出了三道新服务,hackermud, irkd 和 badlogger,但是当天没有 0day 出现。

终于到了 9 号,最后一天到了。一个晚上的分析早已经精疲力竭,虽然 hackermud 和 irkd 没有收获(甚至逆向都没完全完成,漏洞更不知在何处),好在我们有 ARM windows 10 题目 badlogger 的 exp 可以工作。

到了现场主办方突然宣布最后一天的一轮时间改为 2.5 分钟,让第三天更有悬念。一开场又是 DEFKOR 的 badlogger first blood 3D 动画,我们比较着急,因为 badlogger 已经写好了,但是发现远程还是打不了。

于是大家对 badlogger 的 exp 各种调试和优化,一直到邻近结束才终于打成,但是也仅仅只有十来个 flag 而已,非常遗憾。

最终比赛在劲爆的 The Final Countdown 中结束,全场 high 翻。

赛后的闭幕式宣布了前三名,DEFKOR 力压 PPP 夺冠,PPP 屈居亚军,0daysober 第三。

爆几个料(都是江湖传言,不保证真实性):

  • 关于 DEFKOR 江湖传说所有的题目和 exp 都是 lokihardt 一个人做的。lokihardt 在 pwn2own 一个人攻下了三大浏览器,可能觉得不过瘾,又来 DEFCON CTF 吊打。实际上仅仅第一天的 rxc 就领先了其他队伍 7000 多分,基本就奠定了冠军。
  • PPP 实际上第二天就写出了 irkd 和 badlogger 的 exp,但是 badlogger 主办方一直在调试于是没有打成,irkd 更是悲惨,ricky 很早就写出了 exp,然后第三天 irkd 改 listen 在了 localhost,但是没人告诉 ricky 这件事情,他一直以为这题主办方还在调试。当比赛结束我们告诉他这件事情的时候,ricky 当着我们的面跳了起来,懊悔不已。
  • 比赛中间在电梯里面遇到 geohot 的时候,就听见他在那说,rxc 这题我花了一晚上才搞定,那个韩国人居然只用了 4 个小时就搞定了,太神奇了!ricky 在一旁附和表示赞同!他们出了电梯之后,电梯里面剩下的人笑了笑,说,他们都是疯子!
  • HITCON 居然在 ombdsu 放出很久之后,不知道这道题目的存在。然而这比不过 0ops,0ops 一直到当天晚上回 hotel 分析都不知道这题的存在,直到从诸葛老师的微博上才知道有这道题目。23333333333
  • dragon sector 和 0daysober 的通用防御都有点无耻了。我们的 exp 可以任意执行 shellcode 或者 ROP,可以读任意文件,就是读不了 flag 文件。不知道他们做了什么样的防御措施,我们只能从 /proc/pid/maps 里面看到一个 librxc.so,并且不能完全 dump 下来。
  • 主办方今年是第一次出 windows 题目,所以各个方面处理的相当不完善。中间 lbs 的人还跟我吐槽,说 You know that, because windows is “awesome”!
  • 明年 DEFCON 的主题是 The Rise of the Machines,会有 CGC 的决赛一起打。据说到时候会让人类冠军和机器冠军对打,上演人机大战!

附 Lokihardt pwn2own 夺冠的采访视频:

注意一个主持人采访 Lokihardt 的时候,后面站着一个人,是 PPP 的队长 brian。

Comments