内容简介:今天作为Tea Deliverers一员参加DEFCON 26 CTF。Redbud、Nu1L、ROIS、长亭科技几个员工组成Tea Deliverers,在DEFCON 26 CTF Quals中晋级Finals。DEFCON 21~25 CTF的主办方Legitimate Business Syndicate退休之后原来Shellphish的一些人组成oooverflow接手了。我们推测赛制可能会发生较大变化(往年使用一种零和赛制,被很多比赛的决赛沿用)。参加决赛的队伍从15支增加到了24支:其中,A
今天作为Tea Deliverers一员参加DEFCON 26 CTF。Redbud、Nu1L、ROIS、长亭科技几个员工组成Tea Deliverers,在DEFCON 26 CTF Quals中晋级Finals。DEFCON 21~25 CTF的主办方Legitimate Business Syndicate退休之后原来Shellphish的一些人组成oooverflow接手了。我们推测赛制可能会发生较大变化(往年使用一种零和赛制,被很多比赛的决赛沿用)。
参加决赛的队伍从15支增加到了24支:
1 | 0daysober |
2 | A*0*E |
3 | BFS |
4 | binja |
5 | C.G.K.S |
6 | DEFKOR00T |
7 | Dragon Sector |
8 | HITCON |
9 | hxp |
10 | KaisHack+PLUS+GoN |
11 | koreanbadass |
12 | mhackeroni |
13 | pasten |
14 | PPP |
15 | PwnThyBytes |
16 | r3kapig |
17 | RPISEC |
18 | Samurai |
19 | Sauercloud |
20 | Shellphish |
21 | Spaceballs |
22 | Tea Deliverers |
23 | TeamBaguette |
24 | TokyoWesterns |
其中,A*0*E(浙江大学AAA+上海交大0ops+腾讯eee+复旦大学六星)、r3kapig、Tea Deliverers是来自中国大陆的队伍。BFS、HITCON是来自台湾的队伍。
赛前我又学习了一些radare2,在缺乏实践的情况下发了一些简单的pull requests,改进tab补全、提高switch case的可读性、修复一些bug、改进meson build system等。
8月8日
北京时间8月8日从北京出发的riatre和marche147在Pacific Daylight Time中午到达,随后从SJC出发的我也到达了,因为手机AT&T信号不好没有注意和他们先汇合,独自打车去Caesars Palace,造成多余开销。到达后check in Palace Tower的两间房,在楼下去年吃过几次的北京九号吃推迟的午饭。
Tea Deliverers大部队乘坐Korean Air航班,在首尔转机时前一班延误导致赶不上去Las Vegas的,在首尔多待了一天。他们带着比赛需要的NUC和路由器。因此我们三个人没有办法提前做些准备(riatre称之为“修电脑”)。cxm和ckx也到达了,出去采购。
r3kapig一些队员也在今天到达了。晚上riatre、marche147和我找他们四个队员(Atum、两位天津大学学生、一个参加过ISC’16的USTC学生)吃饭,路上遇到了slipper和Tiffany Bao,原来他们也是主办方oooverflow成员。slipper从对手、联合战队队友、顾问(DEFCON 25 CTF)到主办方:open_mouth:。
8月9日
cxm 9:00领取给比赛选手提供的8个badges(进入会场的凭证),因此同时在赛场的选手只能有8个(其实很多选手更愿意待在酒店,因为现场嘈杂)。今年段海新老师和刘保君给我们提供后勤支持(采购水、食物、订午餐晚餐)。下午采购东西。
从北京出发的大部队晚上到达,在Caesars Palace开了一间Forum Classic Suite。有一间Palace Tower房间因为延迟一天check in被取消了,好在后来升舱了。
下午cxm和ckx去Blackhat会场买T恤衫。riatre和我拿着badge去会场看看。但根据往年经验,DEFCON第一天并没有多少活动,主要活动时间和CTF重叠。
晚上段海新老师请我们在Paris Las Vegas的Le Village Buffet吃饭。作为常年参加DEFCON CTF Finals的选手发现今年熟悉的kelwin、libmaru、eadom不见了,似乎都是新鲜的面孔:ccls用户iromise(参加过ASC’16,现任清华大学学生网络安全技术协会会长)、去年还能回答知乎问题“高中生进入各大CTF的Final是怎样的一种体验?”的Misty、清华大学地球系统科学系的wirefish、网络研究院的ckx、三个经常更换id的web手(chromium1337、kericwy、wupco),友情支援我们的在UC Riverside交换的吴炜。
回去后大家在套房集合,BrieflyX编排了比赛现场和套房采用的网络环境:现场使用NUC,套房放置极路由(OpenWRT,我们对e1000e驱动传输大文件容易出问题的状况已经有心无力,使用了一个USB to Ethernet adapter),两者连接一个美国VPS部署的OpenVPN server。次日获得比赛现场使用的内网地址后,需要修改OpenVPN server设置push route和iroute推送路由(后来据说r3kapig的iroute配置错误导致网络瘫痪了一段时间)。现场和套房选手连接NUC或路由器后能透明访问比赛内网。
kelwin转发我们邮件,因为次日DEFCON 9:00会有很多人排队,goon设置了一个快速通道供CTF参赛选手进入Augustus Room(比赛现场)。
8月10日Day 1
主办方因为网络配置原因延迟了1个小时开赛。投影的大屏幕上有比赛规则链接 http://oooverflow.io/obey 。除了DEFCON CTF决赛传统的Attack and Defense类型题目外还设有King of the Hill (KoH)类型题目。
- Attack and Defense:故意隐藏漏洞的服务,队伍需要找出漏洞、修补服务(抵挡其他队伍攻击则获得防御分)、攻击其他队伍的服务获得flag、提交flag得分(攻击分)
- King of the Hill:根据解的质量得分。第一名每回合获得10分,第二到五名分别获得6、3、2、1分。我们推测这可能会考写最短shellcode、达成最低延迟等。
比赛每5分钟为一轮,每轮每个服务,攻击成功一个队伍可以获得1攻击分,没有队伍攻击成我方服务获得1防御分。总分=40%攻击分+40%防御分+20% KoH分。我们推测攻击分最高队伍获得400分,其他队伍按照比例得分;防御分、KoH分类似。
服务随着被利用程度(与能利用的队伍数目有关)会变色:绿、黄、橙、红,变成红色后可能会下架服务。因为服务器带宽限制、计算资源限制(后来得知本次比赛使用两台服务器,但需要服务24支队伍)和运维复杂性,同时开放的题目不能太多。以往服务往往莫名其妙就下架了,这次有个颜色渐变,是个亮点。
与DEFCON 21~23 CTF Finals不同(24为CGC、25为cLEMENCy,非常规平台),队伍不能ssh各自的gamebox替换服务,需要通过主办方提供的方式(根据主办方发放的private key访问github private repo,后来改成HTTP POST)patch服务。每次patch时主办方会检查合法性。如果patch后影响功能,会被revert。
不允许往其他队伍机器接入网线。如果发现这类不正当行为,可能会被长期ban(>1年)不能参加比赛。
互联网和比赛内网使用同一根网线,但今年主办方没有使用VLAN隔离。riatre和我9:00到达现场,稍晚6人和我们汇合
入场后发现网络不通。因为网络问题主办方推迟到了11:00。最早开放的题目是King of the Hill类型的reverse。每轮每支队伍有12枚coins,投放一枚coin可以玩一次,是个x86-32 x86-64的disassemble选择题游戏,猜指令、指令地址等。有队伍先玩到了90分,我通过r2/pwntools disassemble可以玩到100多分,但不久就有队伍研制出自动化可以弄到600多分。服务端程序明显有bug,有时会有重复选项,有时会有错误选项。
We are at level 4 Time remaining: 60, score: 1960 Lines: 0x8465eae: mov ecx, dword [edx] 0x8465eb0: mov edx, dword [edx+0x4] ?????????: cmp edx, 0xfffffffa 0x8465eb6: je 0x8466010 0xba9fb: 4889740??8 mov qword [rdx+rcx+0x8], rsi Choices (4): 0. '0x8465eb5\x003 b8 35 ' 1. '0x8465eb3\x00b 57 64 \x00[esp+0x1c ]' 2. '0x8465eb2\x009 70 a0 \x00x10ef51]' 3. '0x8465eb7\x009 c8 cf ' 4. '0x8465eaf\x00f 11 b2 ' I think the answer is: 0x8465eb4 Cannot solve: no solution?. Saving...
赛后Fish Wang告诉我应该继续逆向,修复程序的功能,利用隐藏指令简化游戏,不需要大力投入到真正的solver上。
新题pointless
Description: pointless. Flag location /flag. You may patch up to 200 bytes in the pointless binary.
解压下载的 pointless.tgz
后有32位 EM_MIPS
程序,提供了MIPS的 /usr/lib/
/lib/
,可以用qemu-mips执行。我们发现用一些新qemu-user(如2.12)运行时会在 <code_gen_buffer+154742>: movbe ebp,DWORD PTR gs:[ebp+0x0]
处SIGSEGV。
16:20发现新题twoplustwo,没有strip,链接了 libjemalloc.so.1
。
Description: A very shy calculator. Flag location is /flag, and you may patch up to 24 bytes in the twoplustwo binary. Your IP: 10.13.37.22 Port: 6969 Type: NORMAL
% ./twoplustwo welcome to the ooo approved calculation.app approved functionality is limited to printing a duck, repeating a string, adding numbers, multiplying numbers, concatinating strings, exiting, and replacing a single character in your name any unapproved use of this application is not permitted and will be dealt with swiftly OOORPC_HELLO(),2: OOORPC_REPEAT_STRING(string, num_times), 3: OOORPC_ADD_NUMBERS(num1, num2), 4: OOORPC_MULTIPLY_NUMBERS(num1, num2), 5: OOORPC_CONCAT_STRINGS(string1, string1), 6: OOORPC_FIND_REPLACE(needle, replace), 7: OOORPC_EXIT(message) base64([functionidx]\x00[arg?]\x00[arg?]...[yourname])
17:00 reverse能做level 7了 17:30发现能23200分了,但仍然是第三 Congratulations, you have quite some skills you have anything to say in your defense? It was pure luck, I do not deserve this
DEFKOR00T Sauercloud A 0 E都能攻击twoplustwo了
PPP可以全场打pointless。
19:50开放新题KoH类型题目doublethink,同时原来reverse被关闭:
Description: How many conflicting ideas can you hold in one thought? Files available at oooverflow.io/obey/doublethink.tar.gz. Your IP: 10.13.37.22 Port: 9318 Type: KING_OF_THE_HILL
这题很有趣,polyglot shellcode,在现代架构(arm64、amd64、mipsel)上选一, SimH 模拟器支持的若干古代架构上选一个,之后可以任意攻击古代架构或“未来”架构:
available = { 'past': { 'lgp-30', 'pdp-1', 'pdp-8', 'pdp-10', 'mix', 'ibm-1401', 'nova' }, 'present': { 'amd64', 'arm64', 'mipsel' }, 'future': { 'risc-v', 'hexagon', 'mmix', 'clemency' } } all_available = set.union(*available.values()) max_control = len(available['past']) + len(available['future']) + 1
20:00 Day 1结束。zardus召集各个队伍的队长开会。
后来得知很多队伍发现30000/tcp可以访问“DC 26 Admin Interface”,又是一个主办方的bug。推测通过git repo(用于上传patch)可以下载到题目,但好在git repo也挂了,才没有提前泄漏。
8月11日Day 2
9:00入场10:00开赛,但主办方因为网络问题推迟到了12:00。
在北京远程参与的f1yyy研制出了amd64+pdp-1 shellcode,可惜没有派上用场。很多队伍都能攻击3、4个架构,PPP有攻击5个队伍的polyglot shellcode。Dragon Sector甚至有9个,后来看到HITCON有11个。Dragon Sector的一度被主办方查封,但后来恢复。应该是利用了题目漏洞,后来与主办方交涉后判作合法了。赛后记者问zardus自己有没有试过能打多少架构,他巧妙地避开了这个话题,回答说每个架构都试过能打。(但是组合起来就不知道了,PPP的非漏洞正宗5个架构很棒)
12:40看起来twoplustwo补好了。 13:00发现新题oooeditor
Description: The vim vs emacs religious war finally comes to an end. The Order has mandated the use of OOO Editor. Flag location is /flag, and you may patch up to 10 bytes in the oooeditor binary. The binary is available from oooverflow.io/obey/oooeditor Your IP: 10.13.37.22 Port: 8297 Type: NORMAL
这是一个酷似radare2的服务,几乎可以肯定是defcon.org官方网站介绍页面的lzcnt (“one of the principal developers of the radare2 binary analysis framework”)出的。
如果是非Ubuntu 18.04的Debian系环境,没有libgnustep-base1.25,可以 r2 oooeditor -wqc 'w 4 @ 0x4009a7'
把 DT_NEEDED
字段patch成1.24运行。
% ./oooeditor [0x00000000]> ls a.png b.jpg c.elf d.bz2 [0x00000000]> o a.png [0x00000000]> p 4 61 2E 70 6E | a.pn [0x00000000]> p 4 @ 2 70 6E 67 68 | pngh [0x00000000]>
这个服务用GNU Objective-C编译,链接了GNUStep,大家都不了解这个。在北京远程参与的hankein95推荐我们阅读 http://phrack.org/issues/66/4.html 。
我们很快注意到了out-of-bound read/write。15:17发现还没有人修补oooeditor,我就用r2修补了一下。
16:20出现新题poool,混入了区块链元素:
poool Description: pay per share stratum mining pool. You may patch the poool binary. Each team may only submit 5 patches. Choose wisely. Flag location /flag. Flag format: 000[A-F0-9]{45}. Files available at oooverflow.io/obey/poool.tgz. Your IP: 10.13.37.22 Port: 10001
大约有半小时套房内极路由和有线网断开了。
我们能攻击PwnThyBytes的oooeditor
18:20出现新题bew。是使用Node.js框架Express.js的web服务(在DEFCON CTF Finals上非常罕见,传统上只考硬核的二进制攻防)。
Description: Finally the Thought-CyberCrimes Reporting System is up and running. Report your suspects now, because in the new era even thinking about a cybercrime is punishable. You may patch the express-validator.wasm file. Flag location /flag, and you may patch up to 1024 bytes. Download the service from oooverflow.io/obey/bew.tar.gz Your IP: 10.13.37.22 Port: 5080 Type: NORMAL
- 里面用的
node_modules/express-validator
和实际1.0.0版本不同,多了wasm模块node_modules/express-validator/express-validator.wasm
,index.js
也有很多集成wasm到js的代码。 -
routes/data.js
(/report
)可以写入public/suspects.txt
-
routes/suspects.js
(/suspects
)会读取public/suspects.txt
我们把三个web手唤醒。
18:00多似乎所有队伍的oooeditor都修补了。 19:00主办方宣布oooeditor有pcap了(实际上已经没有用了) 19:15主办方宣布DEFKOR00T first blood了poool。每个队伍今天只能修补两次,原因是stratum mining很耗资源(后来得知命题人slipper有个在HT后96核系统上运行2 3分钟的解法,而一轮时间仅为5分钟) 19:20主办方宣布poool 19:27发现PwnThyBytes攻击TokyoWesterns的bew获取了first blood。很快koreanbadass和mhackeroni也能攻击这个服务。
因为开赛浪费了两个小时,主办方把今日比赛从20:00延长到21:00。
20:30出现新题vchat,是个使用 gloox 的XMPP client。
Description: The Order of the Overflow has assigned you a personal virtual assistant. Obey the assistant. You may patch up to 100 bytes in the vbot binary. Files available at oooverflow.io/obey/vchat.tgz **AND AT oooverflow.io/obey/vchat-hint.tgz**. This is a client-server service. The Order runs the *client* on your vulnerable image (on port 2555); the server is on port 5222. Your IP: 10.13.37.22 Port: 2555 Type: NORMAL
21:00主办方召集各个队伍的队长开会。zardus提到了一些问题:
- 开赛推迟
- pointless服务的问题。不过这个名字起得不错,掩饰/解释了这个服务的众多问题。
- 用于上传patch的git服务的可靠性。第一天结束后连夜赶做了portal页面提交patch的功能。
-
防御分计算bug。每轮每个服务没被攻击即可得分,但因为一个bug导致每个服务都没被攻击才得分,会修复。
- was_service_exploited[service.id] = True + was_service_exploited[event.service.id] = True
-
应该还有一些,但我记不起来了
我后来配置了一下XMPP server prosody,不懂XMPP,发现很难和vbot通信,不知道怎么把anonymous模式和starttls调好,倒是发现一个XMPP client profanity 高仿irssi/weechat,看起来赏心悦目。后来BrieflyX弄出一个自制简易server可以与vbot通信了,但众人看不出漏洞。赛后知道gloox cache可以导致use-after-free。
8月12日Day 3
10:00比赛开始,没有队伍能利用vchat。主办方给了vchat的提示,服务端配置是ejabberd。
bew主办方把权限配置错误了,有个队伍把其他队伍的文件改了,也有Denial of Service问题。大约12:00主办方关闭了bew。我们研制的若干个bew exploit浪费了。我们的修复也无效,cxm wupco在修复时偷懒寄希望于主办方使用edit distance判断字节限制,很可惜。
发现新题reeducation,是个带符号和调试信息的Rust执行档。
Description: You have arrived at the OOO re-education center. You may patch up to 16 bytes in the reeducation binary, available at oooverflow.io/obey/reeducation. Your IP: 10.13.37.22 Port: 1221 Type: NORMAL
11:00多出现新King of the Hill题propaganda。用nc连接后显示:
CITIZEN! After years and years of bug-free, flawless service, the tamper-proof tool we use to print our propaganda needs an upgrade. It is time for this gem of programming, marvel of security, guardian of values to get a new face. Help our mission by changing its output to print our brand new message: ORDER THROUGH OBEDIENCE. But of course, your change should not modify the OOO Stamp! Your loyalty will be judged according to the length of the patch (computed as the difference between the original and the submitted propaganda file). ------------------------------------------------------- 1. Download the propaganda software 2. Upload a Base64-encoded patched version 3. Leave and continue your miserable existence
不要用telnet连接,如果发送 1\r\n
会被拒绝请求。
用选项1下载执行档后发现.text .fini和.rodata大部分由计算hash的函数保护,如果变更字串:
- 修改被保护部分,修复hash
- 修改
__printf_chk
的PLT项。我们选择了这种,hook这个函数后用rsi-8!=rsp
、format[0] != 'O'
等方式检测是第几个printf调用,替换字串。riatre娴熟地patch了交了一个版本上去,排到第五,之后又优化了下。我发现了r2waf
的几处问题。
14:00比赛结束,我去了现场,和riatre、misty找其他队伍聊天,顺便推销ccls。比较可惜的是大部分A*0*E选手都没见到,只看到了Azure (eee)。 他提到主办方提交flag也有bug,有的时候提交同样flag会都显示Accept,第一次提交实质上没有计分,可能是因为每轮flag推送的同步问题导致的。Misty开心地加日本人微信。见到了HITCON和BFS几位队员。iromise和陈仲宽(我没有认出来QAQ)讨论资安社团招新难的话题。
混入了一个r3kapig的Atum的集体照
16:30 DEFCON闭幕式,按照惯例最后会宣布DEFCON CTF前三名。但我们去得太晚,被goon引导到Track 3,后来被告知“sorry”,只好回套房看电视上的dctv (DEF CON TV)。今年dctv成为DEFCON一个新的 部门,在六个酒店播出:Caesars、Flamingo、Paris、Bally’s、Harrah’s。一些网络设备用了FreeBSD,但主办方的玩笑(比赛突然变成FreeBSD+ipv6)并没有发生。DEFCON 27将会在Paris、Bally’s和Planet Hollywood三地分布式运行。DEF CON China将继续举办。
BrieflyX总结说,今年每天都很困,不过好的方面是网络没有出大问题。晚上我们在Joes Seafood Prime Steak & Stone Crab吃饭。
21:00多段老师和刘保君给我们道别,要去赶USENIX Security’18了。
23:20 scateu来探望我们,接见了几位清华大学学生网络安全技术协会同学,介绍了他在Blackhat上的演讲,分享了一些段子,给我们带了几个ASRC的骰子,谈论清华大学的修车铺和小卖铺,谈论自己未来安全研究的展望,畅谈到近1:00才回去。
8月14日
早上吃了两个HITCON送的凤梨酥作为早饭(感谢~昨天下午送的,因为准备仓促,没有回礼,很监介。。。)一些队友今日回去,我去San Jose International Airport,riatre和marche147乘坐Delta Air,在Seattle转机回北京。我因为和iromise又检查了下套房众人落下的东西,离开得稍晚了,就被抛下了:sob:又只好独自打车到机场,好在在机场碰头了,还遇到了A 0 E (0ops)的谭凌霄。大部队乘坐Korean Air,还有几个报了旅游团在Planet Hollywood住两天再回去。Misty和HITCON乘坐同一个Korean Air航班。我第一次在SJC出发离开,发现有个ride-sharing app的通道。
主办方的过失很多:
- 网络环境配置。Day2开赛时间拖延了两个小时有点长,以前legitbs从没有拖到过两小时。
- 不慎暴露的Admin interface。
- patch上传机制。git repo看起来很酷,但用git post-commit hook实现的话容易出问题。稳健的HTTP POST挺好的,还方便限制提交次数。
- 分数计算bug。还好数据库记录了原始事件,方便重新计算。
- 不注意sandbox隔离。
- 没有注意服务的资源消耗
- bew Denial of Service很难防。Node.js的单进程模型在攻防里不好,服务容易被搞坏。后来主办方改成不停重启node,又会导致大量资源消耗。
- 慎用qemu模拟运行的程序。qemu-mips运行的pointless消耗大量资源。听说主办方原来出了一道x86_64的,但后来有人灵机一动把它改成了32位MIPS。据说PPP利用leak时,曾发现服务端不对劲(x86_64没有被题换成MIPS),之后主办方才修复。
- poool。消耗资源的stratum mining(运行2 3分钟的解法,而一轮时间仅为5分钟)。我不懂blockchain,以后再看看这里怎么补充。
但他们扛下legitbs离开后主办方的大旗,很不容易,为比赛带来新的赛制(血液),感谢他们的辛勤劳动。希望以后能办得更好。
我们自身的问题:
- 航班延误一天给大家带来时差影响。很多人昏昏沉沉的,不能发挥最佳状态。我虽然没有时差影响,但仿佛水土不服(旁白:请不要找借口)
- 准备不足。去年(cLEMENCy)提前一天知道规则,做了很多准备,如git repo。今年有所欠缺。
- 今年Day 1结束后没有总结。
每年八月,放下手头的工作,在Las Vegas见故交新知,并肩作战,折腾平时不想折腾的软件,速成平时用不到的技能,继续发光发热(与其让生命生锈),享受这段时光。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 祝福我吧各位!我要参赛了...
- “智慧中国杯”参赛展示|Shun:活得
- AI Challenger 2018 机器翻译参赛总结
- 中数经纬:爬虫大赛优秀工程师参赛感言
- 第三届“达观杯”文本智能算法大赛参赛指南
- 吸引 7198 支队伍参赛,看 Kaggle 信用预估比赛冠军方案
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
JavaScript
David Flanagan / O'Reilly Media / 2011-5-13 / GBP 39.99
The book is a programmer's guide and comprehensive reference to the core JavaScript language and to the client-side JavaScript APIs defined by web browsers. The sixth edition covers HTML 5 and ECMA......一起来看看 《JavaScript》 这本书的介绍吧!