iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 30
6
Security

CTF 的三十道陰影系列 第 30

Day30: [Pwn] 在相同規則下磨練自己的能力,絞盡腦汁比拚成果,從中獲得的經驗才是最寶貴的

前言

終於到了鐵人賽最後一天 XD 自從 angelboy 跟 Orange 的文章之後,瀏覽數開始多了起來,害我也不隨便亂寫了 QQ 我很遵從「今日事、今日畢」的原則,所以每天鐵人賽的主題都是當天才想的 (逃),但今天是從開賽就確定有要寫了 XD
就在上星期的周末,10/12~10/14 ,今年的 HITCON CTF 剛剛結束 (Day12 介紹過 HITCON CTF,大家可以溫故知新),今天就來詳述一下這場賽事經過

HITCON CTF 2019 Quals

Overture

首先要先抱怨,辦一場 CTF 真的是很累、又沒有利益的事 QQ 所以大家每年都會猶豫到底要不要繼續辦 T__T 今年也是猶豫一陣之後,最後大約在 8 月左右確認今年會繼續辦,而且還要重啟 HITCON CTF final,大家就開始分工籌畫各自的工作,以下是辦 CTF 會遇到的一些問題:

  1. 需要 PM 確認賽事進度
    • 由於現在 HITCON CTF team 的成員大部份都畢業了,有各自的工作要忙,因此如果一不小心很有可能就要到比賽前大家才會臨時抱佛腳......XD
    • 為了辦一場高水平的比賽,必須至少要有一個人確認整體進度,並當 PM 叮嚀大家要趕快準備 XD 此外 PM 也要負責一些經費、場地等瑣事的處理,是個充滿打雜感的角色
    • 今年的 PM 由 Orange 在百忙之中抽空擔任,在一面準備 BlackHat + DEF CON + DEVCORE CONF 還要出題的情況,不愧是我們的隊長 (worship)
  2. 需要有足夠多高水平的題目
    • HITCON CTF 已經邁向了第六年,從 HITCON CTF 2015 開始就一直是種子賽資格,並且由第一年的 weight 30.0 的權重,成長到近兩年保持在 90.0 以上的頂級 CTF 賽事,已經成為每年所有 CTF 摩拳擦掌想要挑戰的賽事之一
    • 以前大家還是學生,而且才剛開始出題有很多不少創意,但現在大家只能用業餘時間出題,不敢說超越以前的題目品質,但要保持同樣水平,不得不說是非常困難的任務......
    • 不過有得就有失,雖然大家比較少時間研究 CTF,但也在業界累積了一些經驗,因此也有機會出更 real 的題目
  3. 時間就是金錢,朋友
    • HITCON CTF team 目前已經完全沒有學生成員 QQ 而且畢業之後工作收入普遍都還不錯,出一道題的相對成本跟學生時期相比,是成十倍百倍的增加......
    • 由於大家時間有限,大部分成員只能在 Quals / Final 擇一支援,也是因為這樣去年才決定先停辦 Final,今年打算恢復 final 賽制,導致原本吃緊的人力又更加的吃緊了...冏rz

往年我們都可以準備接近 40 道題,但今年一直到九月底,總共也才登記了 22 道題,其中真正出好了題目還不到一半 = =,也難怪 PM 在 channel 中一直提醒大家 HITCON 快到了,題目要趕快出 ... 我也很擔心今年會不會就這樣砸了招牌 QQ

Prelude

一直到比賽前兩個星期,不得不說大家臨時抱佛腳的能力還是很強的 ,感謝學生時期的訓練 XD 題目開始陸續就定位,但我們的註冊網站還沒好...XD 原因是我們的 fullstack engineer (你猜得沒錯,就是 Lays) 剛好到日本玩樂去了,只能利用晚上回飯店的時間趕工網頁 XD 更尷尬的是 ctftime 上放的註冊時間不知為何放了一個超早的時間,只好趕快修正成預定的一個星期前,希望沒有引起誤會 QQ

到比賽前幾天 angelboy 終於搞定這次的 Windows Kernel 題 Breath of Shadow,但解題環境異常麻煩 XD 討論後決定讓參賽隊伍寄信過來後,再手動幫隊伍啟用解題環境,為此 Lays 還幫網站加了一個 team token 的新功能,在前一天大家才把整個流程順一遍,可惜最後只有一隊成功用上 XD 而 Orange 出完了三道題之後覺得自己的 web 題出得太少,後來一直出題到接近開題時間的早上十點,終於生出了第四題 Virtual Public Network,算是對自己今年的 Pwnie Award 致敬 XDD

BTW,由於這次我們 Misc 數量偏少,jeffxx 的 EV3 還一度難產 QQ 在前一個星期我把原本打算出的困難 heap 題改成研究有沒有好玩的 Misc 題,最後雖然有想到梗,但一直到比賽開始才成功做出 POC...QQ,在考慮到缺乏驗證的情況下可能會有 unintended solution 拖垮整題品質,就決定還是不放出來了,希望之後有機會可以讓大家玩玩 QQ

以下節錄今年大家的出題狀況:

  • angelboy: 我覺得我出題的巔峰就在 2017 了
  • Orange: 剩不到一個禮拜,一題都還沒出完 QQ
  • jeffxx: 我樂高拚不出來
  • david942j: 我為了出題已經從每天玩變成一整個月沒打薩爾達了
  • ddaa: 我解不出來 angelboy 的題目

March

10/12 早上 10:00 比賽終於開始,大部分的隊伍很快就從 vim 的密室逃脫 - Welcome 之中成功解放 XD,首殺由 TokyoWesterns 獲得,而其他一開始放出的題目有:

  • Virtual Public Network (web)
  • Bounty Pl33z (web)
  • EmojiVM, EmojiiVM, EmojiiiVM (reverse, misc, pwn)
  • Suicune (reverse)
  • Lost Modulus Again (crypto)
  • PoE I - Luna, PoE II - Cord, PoE III - TPU (pwn)
  • dadadb (Windows pwn)

Lost Modulus Again 是除了 Welcome 以外最早被解出的題目,由越南隊伍 pwnphofun 解出,這是一道相對其他 crypto 簡單的 RSA 題 (但我還是不會做)

接著 Virtual Public Network 很快就由 Balsn 解出,接下來解出的也是台灣隊伍 10sec,想必大家都學習過 Orange 的分享 XD 不過其他國際隊伍也陸續跟上,這道題算是對參賽隊伍比較友善的新手題

  • Balsn 可以參考 Day19 的介紹

EmojiVM 系列題 也是大家的喜聞樂見的題目,PPP 很快就拿下 reverse 部分的 firstblood,Tea Deliverers 也解出來 misc 的 firstblood,不過 pwn 的部分相對困難,一直到下午才由 PPP 拿下首殺

  • Emoji 系列題 巧妙的是,三道題沒有順序關係,因此就看先發現哪個 flag 的線索了 XD
  • PPP 可以參考 Day14 的介紹,目前 ctftime 第三名的隊伍
  • Tea Deliverers 有在 Day21 提到,是 blue-lotus 的繼承者 (?),目前 ctftime 上排名第六

跟著被解出的題目是 PoE I - Luna,由美國隊伍 RPISEC 解出,Bounty Pl33z 緊接在後由 justCatTheFish 解出,接下來就到了第二波放題時間 XD:

  • EV3 Player (misc)
  • Lost Key Again (crypto)
  • LazyHouse (pwn)

Lost Key Again 再次由 Balsn 獲得首殺,接著也解決掉 EV3 Player,這兩題都只花了一個多小時就解掉,最後 LazyHouse 在將近 6 hr 之後也被解出,達成了第二波題目的首殺小滿貫 (?),充分展現 ctftime 上排名第一的實力

在這之間 Tea Deliverers 首殺了上一波的 Suicune,不算出人意料,因為他們有連續兩年 FlareOn 挑戰最快通關的成員 Riatre (雖然不知道是不是他做的 XD)

  • Lays 今年第 12 個通關,退步四名 (逃)

接下來發生了一個插曲,HITCON CTF 的網站慘遭 DoS 攻擊.....= =,兇手根據 IP 來源推測是在 2017 年因為 share flag 被我們 disqualified 的摩洛哥隊伍,導致放題時間延後半小時 = = 這波放出的題目是:

  • Revenge of Welcome (misc)
  • Luatic (web)
  • GoGo PowerSQL (web)
  • EV3 Arm (misc)
  • Netatalk (pwn, misc)
  • Crypto in the Shell (pwn)
  • Very Simple Haskell (crypto)
  • not so hard RSA (crypto)
  • Breath of Shadow (Windows pwn)

這波題目最早被做出的是 Revenge of Welcome,由台灣隊伍 FLAGiarism 解出,這題也是要離開 vim,但 vim 被限制在只能編輯的模式,很像平常工作會不小心按到什麼而無法退出的感覺......XD

約兩小時後被 ToykoWesterns 解出,這是 angelboy 前一個晚上靈光一閃出的題目 XD,不得不說這題的確設計得很有趣,在簡單的 pwn 之後限制只能執行 system(hex_string) 要如何 shell out ? 大家可以思考看看 XD

  • ToykoWesterns 可以參考 Day22 的介紹,目前 ctftime 第四名的隊伍

Very Simple Haskell 沒多久也被 Tea Deliverers 解出,這題也是相對簡單的 crypto 題,但要讀得懂 Haskell 會造成一些麻煩 XD

接著是本次最好玩 (?) 的逆向樂高題 EV3 Arm,這題由韓國隊舞 KaisHackGoN 奪得首殺,這題要從封包裡擷取出 firmware 之後分析樂高做了什麼事情,大家一定要看一下隨題目附上的 影片,此外他們也拿到了 Crypto in the Shell 的首殺

這波的 web 題 LuaticGoGo PowerSQL 都是被俄羅斯的老牌戰隊 Bushwhackers 解出,這幾年他們打得特別兇,目前今年在 ctftime 上佔據第十名

接著由我設計的 Netatalk 也被 r00timentary 拿下首殺,這題是 CVE-2018-1160 的 1day 利用,會在今天的例題詳細說明,Netatalk 在他們解出之後,隔了十幾小時才有第二隊解掉 QQ

  • r00timentaryDay15 有提到過,他們和 DEFKOR 聯隊成 DEFKOR00T 於 2018 年拿下 DEF CON CTF 冠軍,在 2019 年的 DEF CON CTF 也獲得第 8 名的成績

在下一波放題前最後被解出的題目是 not so hard RSA,由 LC↯BC 解出,這題應該是本次第二難的 crypto 題目,最後只有 6 隊成功解出

  • LC↯BC 解出對大家來說絲毫不意外,因為他們隊伍中有可能是目前 CTF 圈最強的 crypto 之王 hellman,之前就在念密碼學博士班,不知道畢業了沒... XD (疑似在多年前也是 ACM 選手)

Symphony

經過比賽時間 24 hr 之後,放出本次 CTF 最後一波題目:

  • Buggy .Net (web)
  • Core Dumb (reverse)
  • heXDump (misc)
  • One Punch Man (pwn)

來自波蘭的 Dragon Sector 很快就解掉了 heXDump,他們到目前為止已經進入前 20 名,慢慢追上了前面領先的隊伍

  • Dragon Sector 有不少成員已經在資安公司上班,發表許多令人佩服的研究,是 2014 和 2018 的 ctftime 年度冠軍,今年排名第二,是 Balsn 是否能奪下年度冠軍的頭號敵人 XD

接著從開場就放到現在的 dadadb 終於被 Shellphish 給解掉,BTW,這題是 angelboy 在今年 WCTF 2019 時解他們成員出的 Windows 題無功而返,進而做出報復社會的舉動

  • ShellphishDay15 有稍微提到,用自己開發的 AEG angr 在 CGC 得到不錯的成績

幾乎跟 dadadb 同一時間,Balsn 也拿到了 One Punch Man 的首殺,這邊發生了小插曲是我沒有在 description 上附上 flag 的位置,但其他道題目有放,這樣著實造成了大家解題的一些困惑 QQ 之後會注意這個問題

r00timentarynbz 接著分別拿到 Core Dump 的 firstblood,後者的解題隊伍只有 3 隊,是今年 HITCON 最難的 crypto 題 XD

10sec 首殺了 Buggy .Net 反超 BalsiFox,就此成為台灣隊伍的第一名 (Balsn 算國際隊伍 XDD) ,之後又解了 穩定自己的定位到結束

至此為止魔王題剩下從一開始就放出的 PoE 系列題Breath of Shadow,因此我們陸續放出了第一次 hint ... 但顯然是沒什麼效果 XD 就當大家以為為了 Breath of Shadow 做的前置作業 (team token, request wesite, setup script) 都白費之時,LC↯BC firstblood 了 Breath of Shadow,讓 angelboy 感激到痛哭流涕 (X)

  • 然後 angelboy 發現自己的封包是錄 service port,但因為這題是 local privilege escape,參賽者會用別的方式把檔案抓進 VM,所以錄 service port 一點幫助都沒有 XDD,後來大家開始研究要怎麼把 exploit 安全的從 Windows VM 裡尻出來......
  • 不能怪我們太過小心,是 LC↯BC 真的是 CTF 搞事王,太多黑歷史......XD

最後的八小時就沒有人再解出新題目,PoE II - CordPoE III - TPU 成功做為大魔王守擂到最後 XDD

Rhapsody

但真正刺激時候才開始......XD 接下來這八小時之間每過幾分鐘就有隊伍解出題目,導致排名撲朔迷離,沒有到結束之前都不知道到底哪些隊伍能進前十名得到決賽資格,而一直處於領先地位的 Balsn 也開始岌岌可危,KaisHackGoNr00timentaryToykoWesternsPPP 等隊伍都幾乎一度要超車,以為 Balsn 就要幫助台灣守住冠軍時,中國隊伍 A*0*E 在最後四小時左右一口氣解出 Netatlak, dadadb 兩道難題,最後再解掉 LazyHouse 成功反超拿下最後冠軍......

  • A*0*E 是從 XCTF 聯賽培育出的大聯隊,分別由 0opsAAAeee****** 等隊伍成員集結而成,0ops 有在 Day21 提到過

而除了冠軍爭奪戰以外,決賽門票也是異常精彩,基本上最後八小時後五名可以說是大洗牌......,原本一度要超越 Balsnr00timentary 竟然掉出了前十名,率先解出 dadadbShellphish 也因為該題經過動態分數下降的原因,也掉到了淘汰區邊緣

這是 !SpamAndHex 的成員在約結束前半小時的 tweet:

但後來 RPISEC 送了一題 One Punch Man 把第十名的 Shellphish 給擠了下去,可是才沒高興多久,Dragon Sector 又在最後十分鐘時解出 GoGo PowerSQL,將原本第 10 名的 RPISEC 給踢出了決賽名單外,最後成功拿到決賽門票......XD

10:00:02   itszn curse you dragon sector
10:00:11 Redford itszn: sorry :D
10:00:22 Redford but that's valis fault!
  • 有個小插曲是,Shellphish 在最後十五分鐘時申請了 Breath of Shadow 題目的嘗試,可惜最後 exploit 似乎並沒有拿到 flag,如果拿到又會再次回到十名內把 r3kapig 給擠出去......XD

這 48 小時的激鬥可以到 HITCON CTF 的網站看分數趨勢 XD

結語 && 人才招募

從前面提到的三個難題,應該大家可以理解辦 HITCON CTF 其實對大部分的成員來說沒有任何的實質利益,之所以還願意繼續辦,只是因為大家真的是喜歡 CTF,沒有在工作後忘記初衷,同時也不希望 HITCON CTF 這些年建立的品牌就這樣消失在歷史洪流 QQ 但大家也真的快撐不下去了 T___T

標題「在相同規則下磨練自己的能力,絞盡腦汁比拚成果,從中獲得的經驗才是最寶貴的」,一直以來都有聲音質疑打 CTF 只是遊戲,並不代表反映在資安上的真正的成就,我同意一半,CTF 的確大部分只是出題者設計過的情境,真實世界的 exploit 並不一定這麼剛好能 leak data 之類的,但在學習 CTF 的路上,其實就像做數學練習題一樣,可以熟悉加減乘除乃至三角函數,而能不能真正應用在現實上,就是八仙過海、各顯神通了

話說回來,雖然 CTF 現在入門有點痛苦,但是希望大家也不要輕易放棄,從中真的可以學到不少東西 :D 最後歡迎對 CTF 有熱情,而且覺得自己已經學習了一定程度,只是找不到隊友的人可以找我們問問,說不定有機會成為隊友 (?)

  • 有隊伍的人其實也可以來問 (被揍

0x1d: HITCON CTF 2019 Pwn 371 Netatalk

今天是要老王賣瓜介紹自己出的題目 Netatalk XD

其實不是第一年在 HITCON CTF 出題,由於有正職在身,沒有時間從頭設計題目,因此都會盡量從跟工作有關聯的方向設計題目,今年這題其實也是在去年工作時處理 Insident Response 時遇到的 case,但經過深入研究後,發現了這個 CVE 有原揭露者沒想到的 exploit 方式,是我到現在出題為止最滿意的一題,從迴響上來看也是最好的一題 XD

內容請直接參考我的 blog,這篇文章已經突破 9000 字了,這邊再放出題的心路歷程大家也看不下去吧...XD


上一篇
Day29: [Pwn] 剩下的,就是你們的事了
下一篇
Day-1: [Misc] 想要教別人什麼東西時,大體上理由只能分成兩種:想傳達自己的成功……或想傳達自己的失敗
系列文
CTF 的三十道陰影31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
1
K1a
iT邦新手 5 級 ‧ 2019-10-15 23:35:07

完結灑花(?
特地為了訂閱這系列註冊帳號的路過
覺得這個系列超有趣的 不考慮明年再寫一波嗎(X

ddaa iT邦新手 5 級 ‧ 2019-10-16 02:54:03 檢舉

感謝支持 XD
明年沒有題材好寫啦 QQ
BTW,文章有稍微更新後半段的內容,記得回來再看一次

0

恭喜~身為 Orange 高中學弟,曾經被說過不錯喔密碼很複雜喔QQ雖然一直沒有正經地入門但一直覺得資安很有趣,而且又被你寫得更有趣!

ddaa iT邦新手 5 級 ‧ 2019-10-16 02:55:34 檢舉

感謝不嫌棄 QQ
後面瀏覽數開始多的時候比較有認真寫,不然前面就只是當自己的讀書筆記...XD
BTW,文章有稍微更新後半段的內容,記得回來再看一次

0
yanfen
iT邦新手 3 級 ‧ 2019-10-16 09:46:50

文筆超流暢,好好看喔。

1
yanfen
iT邦新手 3 級 ‧ 2019-10-16 09:46:51

文筆超流暢,好好看喔。

0
sixwings
iT邦研究生 4 級 ‧ 2019-10-16 12:32:46

參賽立馬變成砲灰orz
可是看到排行榜覺得莫名熱血,可以跟世界上的好手們競爭的感覺!
很喜歡看戰報,也希望下次比賽能解出一題

ddaa iT邦新手 5 級 ‧ 2019-10-17 05:21:13 檢舉

拍拍,剛開始都這樣子 QQ
我一開始也都解不出來,大約是打到第三場 CTF 才第一次解出題目

0
阿展展展
iT邦好手 1 級 ‧ 2019-12-10 06:34:01

恭喜完賽!!
恭喜獲得佳作/images/emoticon/emoticon42.gif

0
annn
iT邦新手 5 級 ‧ 2022-09-22 12:30:31

最近剛進入資安職場的萌新
onboard之後,發現前輩們都on-site了..
資料翻過一次又一次
很無聊來網路上翻翻文章
結果看到了作者大大系列的文章
結果默默地看完了 (不小心當成小說在看XD
第一次看完完整系列~~
所以辦了個帳號...
就為了留下足跡XD
以此證明一個被放生的菜鳥在還沒進入戰場前的悠閒

我要留言

立即登入留言