DEF CON 30 CTF final 遊記(中)

2022-08-16 作者: Huli 原文 #medium 的其它文章

DEF CON 30 CTF final 遊記(中) ——

上一篇裡面寫到了從台灣到美國的過程,以及對拉斯維加斯的一些心得,這篇就來寫一下 DEF CON 本身以及 CTF 的一些心得。

讓我們先來看一下 DEF CON 的會場長什麼樣子:

會場入口

這是第一天去的時候在門口拍的,就是個很大的會議廳,這只是入口而已,真的議程在其他地方,然後這是今年的 badge:

入場證就是這個

好像是個可以拿來錄音然後做取樣的小玩具,後面要放三顆電池才會動,但因為我聽隊友說如果被金屬碰到一不小心可能會短路然後燒掉(推特上有人講的),所以其實我從頭到尾都沒打開過,到現在也是。

接著既然來講一下 DEF CON,這邊除了有幾間是給議程以外,其他很多間都是給不同的「Villege」,可以想成是很多不同的主題,例如說 Car Hacking Villege:

現場直接一台車

就是在探討各種跟汽車相關的攻擊手法,所以你可以看到超多 Villege,例如說有 Physical Hacking 的,甚至還有衛星相關的之類的。而除了我這次參加的 DEF CON CTF 以外,現場還有各種其他的 CTF,可以說是 CTF 遍地開花。

例如說有一個好像就是社交工程的 CTF,然後現場直接放幾台電話,應該是要你直接現場社交工程XD

或是有一個聽我隊友說應該是現場弄一個會偷資料的 WiFi 之類的,會把偷來的東西打碼以後直接投影出來:

Wall of sheep

總之呢,現場可以看到各式各樣的主題,還滿有趣的。不過因為這次主要是來參賽,所以也沒有聽議程,然後會場也只是隨意逛逛看看有什麼而已。

接著來寫一下這次 CTF 的心得,這次我是跟著 Water Paddler 這個隊伍參賽,而不是台灣聯隊(Balsn.217@TSJ.tw),我們這支隊伍基本上是個國際隊伍,像這次去 on-site 的選手就來自世界各國,跟其他 CTF 隊伍相比,比較像是那種網路上的「公會」那種概念,成員之間彼此都沒見過面,所以這次同時也是網友見面會。。

放在桌上的旗幟

實體的場地大概長這樣:

場地

左邊很亮那個燈那裡是主辦單位坐的地方。

遠方那些一團一團的人,都圍著一個圓桌,最多坐八個人,一張圓桌就是一個隊伍。所以你可以看到隊伍之間距離是滿近的,大聲討論的話可能會被聽到(我以為會遠一點)

然後現場會放很吵的音樂,所以大部分選手都有戴耳機來隔絕音樂。另外還有一點很傻眼,就是開賽以後他們把大門打開,開始放人進來參觀…這個超乎我預料以外,我本來以為是個封閉場所,沒想到開放到不行,變成跟動物園一樣,會有很多會眾走進來參觀。

至於右前方那個桌子則是這次的新賽制:LiveCTF,這個是一對一的電競比賽,參賽選手的畫面會同步到 YouTube 上面,也會有主播跟賽評來講解現在選手的狀況。

參賽的隊伍總共 16 隊,LiveCTF 每次是一對一,然後是單淘汰賽,不同名次有不同分數:

  • 第一名:4011 分
  • 第二名:2674 分
  • 3~4 名:1337 分
  • 5~8 名:668 分
  • 9~16 名:0 分

而除了 LiveCTF 以外的主賽制的分數計算是每 5 分鐘一輪,在這一輪之內你要做到幾件事情:

  1. 保證自己服務不會壞掉(SLA),壞掉 -30 分
  2. 修補漏洞,保護自己的服務不被打下來(Defense)
  3. 打別的隊伍,拿到他們的 flag(Attack)

做到會加分,沒做到會扣分。

服務被打下來,flag 被拿到的話會 -15 分,這 15 分會分配給其他攻擊成功的隊伍,所以一道題目理論上一輪可以拿的最高分數應該是 15*15 = 225 分。

這邊可以看到 LiveCTF 的分數有多誇張,第一名的 4000 分就是你要在主賽事當中打全場打 18 輪,也就是 90 分鐘,在中間完全沒有人可以攻擊以及防禦,才能拿到 4000 分。

第一天剛開賽就放出兩題,其中一題是 web,所以我們這隊的幾個人就開始看 web,是個 Java 的服務,然後光是看懂資料到底怎麼傳的就花了不少時間。

然後主辦單位有提供延遲 20 分鐘的網路封包內容,在某個時刻我們從網路封包裡面發現其他隊伍的攻擊流量,因為是明文的所以可以直接抄來用,「抄別人作業」其實在比賽中也滿重要的,你越早抄到,就可以拿越多分。

而攻擊的隊伍也要想辦法不讓別人抄作業,不然辛苦努力得來的分數都被整碗端去了QQ

第一天裡面官方的 SLA check 會出一些怪問題,例如說服務明明就沒動它,但是卻說 SLA failed 然後被扣分之類的,總之就是小問題不斷。不過 web 那一題雖然我們到最後還是沒有很清楚到底怎麼攻擊,但就是先把感覺會有問題的地方 patch 掉(要 patch jar 好麻煩…),最後應該是防住了大部分的攻擊。

總之呢,第一天的比賽是從 11 點到 7 點(表定 10 點到 6 點,但延遲一個小時開始),結束之後主辦單位說中間那些 SLA fail 的東西他們會全部 review 一遍,然後把分數更正。

第一天結束時的公告

第一天結束後,我們隊伍暫居第三名,然後今天的題目第二天都不會出現,所以沒有回家作業。

Day2

第二天的計分板是主辦單位修過的版本,其中有一個隊伍因為昨天用 fork bomb 所以被扣分,不過儘管如此,名次卻比第一天高了一位XD

早上有跟台灣聯隊稍微聊一下,也算是個網友見面會,見到了以前有看過部落格文章的 KaiBro 跟 bookgin

第二天沒有 web 題,不過我在刷後台的時候看到了一個應該是自動排程釋出的服務:「web4ransom」,就想說下午應該會出這個(結果都沒有出)。

而第二天也出現了另一種類型的題目:King of the Hill,這次的題目是這樣的,server 那邊會執行 ./vm offset file1 file2 然後每個隊伍都可以上傳檔案,每一輪的 offset 會不同,看誰的檔案會贏。

至於贏的條件是什麼,就要 reverse vm binary 才會知道了。

計分板長得像這樣:

一樣是每五分鐘一輪。

剛開始的時候大家都是 TIE,接著過一陣子我們發現 Balsn 傳了一個檔案之後直接贏全場,就趕快抄作業拿來用,也跟著贏,接著就有更多隊伍發現,於是沒抄的就變成弱勢了,後來到中場變成大家都抄一樣的檔案,又變回平手XDD

然後主辦單位的 infra 又開始不穩,有幾輪延遲,然後有幾輪結果是 N/A,完全不知道自己到底是贏還輸。

到後半段的時候則是有隊伍開始慢慢把 vm 逆完了,知道規則是什麼,可以寫出在主場必贏的檔案。

然後今天的 LiveCTF 我們輸掉了,所以在這部分沒有分數可以拿。

而這天的其他題目在賽後有說明天會繼續用,這就是寫作業的信號了,今天賽後有很多選手基本上是熬夜沒睡覺在研究那幾題,打算隔天早上大殺四方。

而我們打 web 的有好理由相信今天看到的 web4random 既然昨天沒出,明天應該會出,所以就準備明天再打一題 web。

喔對了,今天結束後我們隊伍依然暫居第三。

Day3

最後一天的比賽只從 10 點比到 2 點,半天而已,總共 4 個小時。

經過一個晚上的準備,有一兩題我們已經準備好 exploit,準備開始拿分數了,一開賽的時候滿順利的,有一輪甚至直接拿到 +300 分,殊不知接下來就悲劇了。

還記得我說過一輪是 5 分鐘嗎?接下來每一輪開始慢慢變長,主辦單位說是因為碰到一些問題在修,所以會延長,而其中某一輪甚至維持了快一個小時…

這就代表原本有 12 輪可以拿分,變成只有 1 輪,對於可以拿分的隊伍來說其實是少了很多分數的。

而這中間主辦單位也有人跑來說我們其中有一題的 patch 雖然有過 SLA,但是不行(???),原因是後台顯示的 SLA 其實只有一半,另外一半是線下做的,要兩個部分都過關才算數。

主辦單位的訊息

然後可能是因為今天從開賽就很混亂,所以主辦單位表示今天不會有任何新的題目,因此昨天盼望的那題 web 也沒了。

round delay 的狀況一直沒有解決,scoreboard 遲遲沒有更新,我們選手自己有個非官方的 Discord 群組,我看到裡面已經有人開始揪下棋跟打 Tetris,因為我那時也沒什麼事情做,所以就進去一起玩(拿了幾次第一名,以前玩Facebook tetris battle 的肌肉記憶還存在一部分)。

結果,玩著玩著到了一點的時候,我隊友突然說比賽結束了!因為主辦單位一直沒有辦法解決 infra 的問題,所以乾脆提早一個小時結束。

主辦單位的公告

於是就在我還在打 Tetris 的時候,我的第一次 final 就這樣在混亂中結束了,而比賽也停在了 tick 196,也出現了一堆選手做的迷因:

source: adamd
source: gallileo

其實滿傻眼的,而且很多選手應該覺得滿幹的,昨天熬夜做的作業就這樣化為塵土,賽後可以看到一堆選手在推特上面開噴,人之常情。

LiveCTF 則是繼續比總決賽,拿了冠軍的隊伍加分之後變成了第三名,我們掉到第四名去,為這次的 final 畫下了句點。

聽說每年的 DEF CON CTF 都會出一些小問題,但今年似乎是出最多問題或是最嚴重的,第三天真的超級混亂。

說實在的覺得滿可惜,雖然前兩天問題不斷但也都覺得還 OK,第三天就是真的大爆炸沒辦法救了。只能期待明年 infra 會穩一點,然後繼續努力繼續加油。


文章版权归原作者所有。
二维码分享本站