## DEFCON CTF 的辛酸血淚 Turkey, lyc, david942j Note: 各位會眾早安,相信大家如果有follow HITCON粉絲團的都知道,我們每一年的暑假期間,都會去參加defcon ctf競賽,這一比,我們就參賽了六年,藉由這次的議程與大家分享這幾年在defcon參賽的旅程、競賽內容、有趣故事 --- 一路走來的心路歷程 by Turkey Note: 議程共分為三個講師,由我來分享,這幾年一路走來的心路歷程,由 lac 和 david 介紹賽制和有趣的題目 --- 全球最大的駭客會議 - DEFCON ![](https://i.imgur.com/fzTTror.jpg) <aside class="notes"> DEFCON 是全球最大的駭客會議 </aside> ---- 駭客世界盃: DEFCON CTF <aside class="notes"> 現場有大大小小的競賽,其中 DEFCON CTF 最受矚目,有著駭客世界盃之稱,各國隊伍都希望在這個比賽中可以贏得好成績 </aside> ---- 去年冠軍 + 初賽(10) + 種子賽(5) = 決賽隊伍 Note: 如何進入 DEFCON CTF 決賽呢? ---- 長達三年努力,集結台灣駭客高手 ![](https://i.imgur.com/qe48dFi.jpg) Note: 台灣在 2010 2011 的時候就很想打進,我們花了3年的努力,集結台灣駭客高手,在2014 年的 DEFCON CTF 初賽 ---- 在最後一個小時,解出四分題 ![](https://i.imgur.com/JvZeOLD.png) <aside class="notes"> 在最後一個小時,解出四分題 終於贏得了前進 DEFCON CTF 決賽的最後門票 </aside> ---- 成功擠進 DEFCON 決賽 😎😎 Note: 我們終於做到了!! 成功擠進 DEFCON 決賽 ---- DEFCON @Las Vegas ![](https://i.imgur.com/vDvt2XD.jpg) <aside class="notes"> 前往全世界最紙醉金迷的拉斯維加斯 </aside> ---- 這一打,就連續打了六年 ---- 一個戰隊的背後 ---- 後勤團隊是必不可缺的 ---- 廚師👨‍🍳、醫師👩‍⚕️、司機🚌... Note: 我們算是類 國家代表隊 國家代表隊都會有 廚師團 隨行醫師 以及司機 ---- Alan & Turkey POWER!!!!! ![](https://i.imgur.com/AIkcN9K.jpg) <aside class="notes"> 但我們有 POWER Alan 和 Turkey ,兩個人包辦所有的大小事 </aside> ---- ![](https://i.imgur.com/tkZGKSr.png) <aside class="notes"> 這一去就是6次,所以對拉斯維加斯的熟悉程度,都可以開一家當地的地陪團了 </aside> ---- 食衣住行吃喝拉撒 Note: 我們在競賽的角色就是照顧選手的所有事物 ---- 這六年來 ---- 戰力進步以外 ---- Alan & Turkey Level UP 💪💪💪 Note: 我們的經驗值也大大提升不少 ---- 這是第一年我們的房間 ![](https://i.imgur.com/uR3a6Xw.jpg) <aside class="notes"> 美國房間又大又美 </aside> ---- 大戰過後... ![](https://i.imgur.com/XZAQPup.jpg) <aside class="notes"> 猜猜看這張圖有幾個人 清潔人員每次一進到房間,都會深吸一口氣 在整理的時候 因為我們地上滿滿的垃圾 線材 以及躺在地上的人 ,所以都會躡手躡腳的深怕踩到 </aside> ---- 超會整理房間 ![](https://i.imgur.com/r9FDVhp.jpg) <aside class="notes"> 經過多年的經驗,我們變得超~會整理房間 (比讚) </aside> ---- 餐飲上 🥣 ---- 滿足戰隊飲食需求 ---- 拉斯維加斯是個沙漠 ---- ~~美食~~ ![](https://i.imgur.com/C5ipVp9.jpg) <aside class="notes"> 無限pizza 起司 漢堡 可樂 </aside> ---- 😏 如果有八寶粥或牛奶花生就好了...! ---- ![](https://i.imgur.com/MYILcRw.jpg =418x558) <aside class="notes"> 萬里遠征 花費好大一番力氣 在美國 沙漠 找到了八寶粥和牛奶花生 在異地看到熟悉的食物 感動的感覺 真的很難忘 </aside> ---- 更厲害的是,今年帶了 ---- 出國神器 ![](https://i.imgur.com/T0UCioP.jpg =418x558) <aside class="notes"> 加長~~版 大同電鍋 萬能電鍋 想吃什麼丟進去就可以了 而且是加長版 可以一次好幾層一次蒸 </aside> ---- 包子全席 ![](https://i.imgur.com/oK5BcNz.jpg =744x558) <aside class="notes"> 所以早上就有各種口味的包子全席大餐 包子裡面可以夾鮪魚罐頭 水煮肉 還可以配個水煮蛋 讓戰隊可以早上吃到熱騰騰 健康影響的早餐 迎接一整天的競賽 看他們吃的多開心啊 </aside> ---- DEFCON 在售票上 Note: 和其他會議不同 ---- ~~線上報名系統~~ ---- 人 工 排 隊 ---- 凌晨 4 點起床排隊 ![](https://i.imgur.com/EA04v0z.jpg =418x558) <aside class="notes"> 可以編排邊睡? </aside> ---- 亂球攻擊 ![](https://i.imgur.com/4snaHXe.jpg =418x558) <aside class="notes"> 不知哪來的大大小小球,在頭上飛來飛去 </aside> ---- 7 點開賣 ---- 錢 ---> 票 ![](https://i.imgur.com/p4Xc54j.jpg =418x558) <aside class="notes"> note </aside> ---- 英文版的數數... Note: seven eight nine ten eleven ... ---- ... 忘記數到哪 ... ---- 分三個售票匭幫忙算錢 Note: 聽到我們購買張數,分了三個售票匭幫我們算錢 ---- 電路板 badge get!! ![](https://i.imgur.com/66Hn4nf.png) <aside class="notes"> 終於 </aside> ---- 今年的 Badge 長這樣 ![](https://i.imgur.com/Tv6KwCn.jpg) <aside class="notes"> 一塊會發光的玉 </aside> ---- 遲來的... Note: 幹嘛這麼早買票 都會有票不是嗎 ---- Human 紙張 ![](https://i.imgur.com/O0nNgCx.jpg) <aside class="notes"> 拿紙張的 寫著 human 的 badge 來識別 </aside> ---- 讓選手可以舒舒服服的全力競賽 note: 這幾年的腳色就是可以讓選手在競賽旅程中可以一切順利 ---- 六年戰績 2 4 4 2 3 2 Note: ---- 期許有天可以 ---- ## 1 Note: 那個1 ---- 感謝贊助商、台灣朋友的 Support ![](https://i.imgur.com/1AnYHe5.jpg) <aside class="notes"> 足夠的旅費 去參加駭客世界盃 </aside> ---- 讓更多人看到台灣 ![](https://i.imgur.com/26eWAbk.jpg) <aside class="notes"> note </aside> ---- 有更多的年輕人可以為國征戰 note: 站上世界舞台 ---- 歡迎有志青年的加入 🤗 ~~(新鮮的肝)~~ note: 會議最後面會介紹加入hitcon ctf team 的方式,對加入戰隊有興趣的歡迎大家一塊 join 我們 ---- 競賽內容分享 note: 我的後勤經驗分享就到這邊,接下來由 lyc 與大家分享 defcon 的賽制,感謝大家(敬禮), --- ### DEF CON CTF 賽制 by lyc ---- ### Attack & Defense ---- #### 題目(服務)由主辦方設計、各隊維護自己的服務 Note: 題目由主辦方設計,他們將設計好的題目跑在機器裡面,給我們一組 ip/port 代表我們自己的 service 我們要打其他十幾台,然後保護好自己這台 ---- #### 攻擊: capture the "flag" Note: 攻擊的目標跟一般的解題式CTF一樣,讀取對手server上的 flag 檔,再上傳flag內容到主辦方的server上 ---- #### 方式: 拿 shell、任意讀檔 Note: 攻擊時如果能拿shell當然最好,或是有任意讀檔的漏洞可以讀flag的內容 ---- #### 防禦: patch binary Note: 防禦則是要在自己的service上把漏洞補起來,所以找到洞的時候,會有人開始寫 exploit,也要有人開始 patch 一個簡單的patch例子是如果有stack overflow,那就加大stack的size ---- #### 限制: byte limit、主辦方 check Note: 但patch的時候會有一些限制,比如說不能改太多byte,也不能破壞原本該有的功能,比如說要是把所有功能都拔掉,那當然不會被打下來,但這樣的patch就沒有意義了 ---- #### 主要類型: Binary、Web Note: 題目類型大部分都是Binary題,跟少部分的Web --- ### King of the Hill (KoH) ---- #### 題目由主辦方設計,以每隊答案的品質排名計分 Note: 題目由主辦方設計,以每隊答案的品質排名 常見的就是找一個 Binary 相關的技能, ---- #### Example: 寫 shellcode 印出檔案內容,比較誰的短 Note: 比如說要寫shellcode印出某個檔案的內容,最一般的寫法就是open/read/write 但這樣可能就比較長,改用別的syscall,像是 sendfile 可能就可以優化 shellcode 長度 --- ### DEF CON CTF 比賽流程 ---- #### 長達三天 ---- #### 前兩天打 8~10 小時 Note: 前兩天打 8~10 小時 但這只是可以連線到 service,可以開打的時間 ---- #### 晚上繼續做題 ... Note: 晚上還是要繼續找漏洞、寫exploit,等隔天早上一開賽的時候開始攻擊 ---- #### 第三天只打 4 小時 ---- #### 下午 DEF CON 閉幕、頒獎典禮 ---- #### 一場比賽約莫 50 小時 Note: 這樣算下來,三天比賽大概是連續50個小時左右,真的很累 --- ### 計分方式 (since 2018) ---- #### 一回合 5 分鐘,每回合計分一次 Note: 3天下來總共約 250 個回合 ---- #### 攻擊、防禦、KoH 分別計分 ---- #### 攻擊:每把 flag 加 1 分 Note: 每把 flag 加 1 分 總分就是整場比賽拿了多少把別隊的flag ---- #### 防禦:沒有被攻擊,一回合加 1 分 Note: 一個attack defense的題目一回合沒有任何一隊打下來的話,防禦總分加1分 ---- #### KoH:每回合照名次分別拿 10、6、3、2、1 分 ---- #### 攻擊 400 分、防禦 400 分、KoH 200 分 Note: 最後會將三種類別的分數分別normalize成400,400,200 再計算總分 ---- ![](https://i.imgur.com/N3b1ie3.png) <aside class="notes">這是今年的scoreboard,右邊三條是attack/defense/koh的總分,經過normalize才變成左邊的總分</aside> --- ### 賽前準備 ---- #### Attack Manager Note: 因為5分鐘就1個round,而且同時有十幾隊在打,寫出exploit之後還需要有自動化的工具去做攻擊跟上傳flag 我們將這個工具命名為 attack manager ---- #### Binary Patcher Note: Binary patcher是我們上patch的時候用的,讓我們不管是修改binary的assembly或是data都很方便 ---- #### Pcap Analysis / Replay tool Note: 比賽中會可以得到別隊連進我們的service的封包,所以也需要好的工具去觀察別隊的payload,甚至是自動偵測這個封包是別隊的攻擊,也拿去打其他隊 ---- #### Backdoor Note: 有時候patch是可以被別隊下載的,所以我們也會事先準備好後門,如果有別隊傻傻的複製了我們的patch,就可以用後門一直得分 --- ### A&D: aoool Note: 接下來會介紹三個題目,第一個是今年的一題attack defense ---- #### x86-64 ELF Note: 是個我們最喜歡的 x86 ELF ---- #### 跑不起來 QQ Note: 但是我們local根本跑不起來 ---- #### /aoool/etc/default ? Note: 拖進IDA看一看之後,發現他會讀這個/aoool/etc/default當作config去parse ---- #### bison / flex 語法分析器 Note: 但他是用bison/flex產的語法分析器,是個很複雜的自動機,IDA硬看半天看不懂、用 fuzzer 也失敗 ---- #### 上後門 -> 撈 server 上的 config ! Note: 有個隊友這時候想到,我們只要上個後門,讓我們在自己的service上打出特定字串就會噴出config就可以了 ---- ```nginx main { server { server_name "aoool.ng"; location ".*\.png" { root "main/static/"; } location ".*" { root "main/html/"; } } } ``` <aside class="notes">config長這樣,是個類似nginx的config</aside> ---- #### 自己實作的 Web Server Note: binary跑起來之後就可以動態分析程式內容了,是個自己寫的web server ---- #### UF、UC、GET Note: 支援三種http的method,UF就是upload file可以上傳文件,GET可以看到上傳的文件內容、而UC則是update config,可以更改前面所寫的config ---- <pre><code> main { server { server_name "aoool.ng"; <span style="color: yellow">mode osl;</span> location ".*\.png" { root "main/static/"; } location ".*" { root "main/html/"; } } } </code></pre> <aside class="notes">後來找到一個神奇的關鍵字,將config加上這行model osl,就有神奇的事情發生了</aside> ---- ### OSL: OOO Scripting Language ---- #### OSL ```python a = 123; print a; del a; a = "AAAA"; print a; ``` <aside class="notes">OSL的寫法大概像這樣非常好懂,而前面的config加上那行model osl後,只要我們發送GET的檔案內容都會被當作osl執行之後把output噴回來</aside> ---- #### Bug: type confusion <aside class="notes">自己實作的language就很容易有洞,這邊講其中一個type confusion</aside> ---- ```python a = "BBBBBBBB"; a = 3736059631; # hex(3736059631) == 0xdeadbeef print a; # 任意讀 a = "AAAA" # 任意寫 ``` <aside class="notes">這邊變數的型態從字串轉成數字之後就壞掉了,這個print會將0xdeadbeef這個位置的值印出來,而底下這個等於會將0xdeadbeef這邊寫成4個A</aside> ---- #### 一晚寫了 5 種不同的攻擊手法 ---- #### 首殺+唯一打全場 ---- | HITCON⚔BFKinesiS | 257 | | -------- | -------- | |Plaid Parliament of Pwning| 206| |mhackeroni| 180| |Tea Deliverers |180| | A\*0\*E | 176| --- ### KoH: doublethink Note: 接下來講一個去年的 KOH題 ---- #### Polyglot Shellcode Note: 題目是Polyglot shellcode,意思是要寫一份shellcode卻能在多種不同的architecture上執行 ---- #### shellcode 跑在 13 種不同的 architecture Note: 這題題目會將我們的 shellcode 跑在13種不同的architecture上,能在越多architecture上跑起來,就越高分 ---- #### amd64, arm64, mipsel, risc-v ... ---- #### 各種古老架構: lgp-30, pdp-8, ibm-1401, nova ... ---- #### 每種架構都要讀幾百頁的 spec Note: 每種架構都要讀幾百頁的spec找出跟其他架構相容的instruction,超困難 ---- #### PPP 到最後總共串了 8 種 arch Note: PPP 最後串了8種,是全場最多的,比我們多多了 ---- #### We are hackers ---- #### 題目本身有 race condition 的 bug Note: 我們找到主辦方執行這題的環境的script有個race condition ---- #### Hijack process output fd Note: 因為這個bug,我們可以開一隻process去偽造另外一隻process的output ---- #### 只需要會寫 amd64 Note: 結果就是我們只需要會寫最簡單的amd64 shellcode 就夠了 ---- #### Unintended Note: 這個洞是主辦不小心寫出來然後被我們抓到拿來作弊的 但我們在賽中其實一直以為是故意的 ---- #### ![](https://ddaa.tw/images/defcon_26_doublethink_rank.jpg) <aside class="notes">所以在PPP還只串出5個architecture的時候,我們已經11個佔據第一名,刷一波分數了,爽賺</aside> --- ### KoH: dooom Note: 再來我要講一題今年的KOH ---- #### 第二天一開賽,主辦方一隊發一台 ---- ![xbox](https://upload.wikimedia.org/wikipedia/commons/4/43/Xbox-console.jpg) ---- ![](https://i.imgur.com/AaIVYvT.jpg) <aside class="notes">是個古老的遊戲,中文叫做毀滅戰士</aside> ---- #### 站在 OOO tiles 上就可以得分 Note: 站在tiles越久就越多分、每回合最多70分 ---- ![](https://i.imgur.com/iQcOPV2.jpg) ---- #### 但需要正確的角色名稱才能得分 → MITM 竄改封包 Note: 我們原本的角色名稱不對,要改掉才能得分,但我們拿到的firmware已經設定好名字了 我們接了一台 rpi 在中間,藉由man in the middle的方式改封包裡面的角色名稱開始得分 ---- #### 角色無法開槍 → Reversing firmware Note: 開始得分之後我們就想殺掉別隊讓他們不能得分 但這時候就遇到另一個問題是我們的角色無法開槍 經過逆向之後,我們一樣透過改封包的方式讓角色可以開槍 ---- #### 無敵外掛開不了QQ Note: 我們後來嘗試用一樣的方式改無敵,但發現這部分server端會驗,不是我們這邊改就可以了 ---- #### CTF → FPS 電競 ---- #### 被資安耽誤的電競選手 ---- ![](https://i.imgur.com/HQK8xYf.jpg) ---- ![](https://i.imgur.com/VA81Pxk.jpg) <aside class="notes">精通花枝</aside> ---- #### 最強的槍:「Polaric Energy Cannon」 <aside class="notes">這段是他跟我分享的心得,這把最強的槍地圖上有兩把,一把在OOO tiles旁邊,第二把在一個密道內,全場只有他知道怎麼拿,通常其他隊都會去搶第一把,他就慢慢去拿第二把,然後再去把別隊打成智障</aside> ---- #### 其他人找洞的時候,他花了一個小時逛地圖 Note: 那達達為什麼這麼carry呢,我們其他人在找洞 逆向firmware的時候,他都在模擬器裡面逛地圖 ---- ![](https://i.imgur.com/CtqCElW.png) <aside class="notes">這張則是換jeff打的時候,我們在其他地方打比賽的人在slack看到的文字轉播</aside> ---- ![](https://i.imgur.com/kWAhtZ0.png) Note: 可以看到其他隊裡面只有一隊能跟他們互有勝負,充分展現我們隊的電競實力 接下來換david說他這三年打比賽來的心路歷程 --- ## 辛酸血淚 by david942j ---- ### 近三年 ---- ### 2017 ---- #### 主辦花了兩年設計一套全新 architecture ---- ### cLEMENCy ---- ![](https://i.imgur.com/HInxW6N.png =832x602) ---- ### 自定義 instruction set ---- ### 1 byte = 9 bits ---- ![](https://i.imgur.com/bwoUUW4.jpg) ---- ![](https://i.imgur.com/cxIgbM7.jpg) ---- ### <code>int</code> = 3 bytes ---- ### Middle Endian ---- ### <code>mov</code> 17 bits ---- ![](https://i.imgur.com/S0Bivs8.png) ---- ### 以上在賽前 24hr 公布 ---- ### 所有輔助工具淪為糞土 ---- ### 三天的比賽直接變四天 ---- ### 真.駭客松 ---- ### IO Converter (9-bit ↔ 8-bit) ---- ### Disassembler / Assembler ---- ### Binary Patcher ---- ### Backdoor Injector ---- ### Automated Replayer ---- #### DEFCON CTF 2017 Stuff of Shit by HITCON <small><a href='https://github.com/david942j/defcon-2017-tools' target='_blank'>https://github.com/david942j/defcon-2017-tools</a></small> ---- ### 2017 Final Results ![](https://i.imgur.com/5mI2360.png) ---- ### 2018 ---- ### 換主辦單位 ---- ### LegitBS → OOO ---- ### 第一次辦現場賽 ---- ![](https://i.imgur.com/NhWAgQw.jpg) ---- ### 整場比賽心情 ---- ![](https://i0.wp.com/www.techjunkie.com/wp-content/uploads/2018/01/angry-face-meme-2.jpg?w=690&ssl=1) ---- ### 打不出攻擊 ---- ### 做不了防禦 ---- ### 看不到分數 ---- ### 題目死光光沒事做只好睡覺 ---- ![](https://i.imgur.com/JkpSYEw.jpg =744x558) ---- ### 花式出包 ---- ### 網路不通先 delay 兩小時 ---- ### 網路不通先 delay 兩小時 again ---- ### 防禦使用 git 上傳 ---- ### git push Connection refused ---- ### 機器不夠力 ---- ### MIPS 題: pointless ---- ### 一晚準備 3 個攻擊 ---- ### 準備隔天暴打一波 ---- ### 滿懷期待到了隔天 ---- ### 暴打一..秒 ---- ### 機器不夠力 ---- ### 連線即 DoS ---- ### 不需要做防禦 ---- ### 真.pointless ---- ![](https://i.imgur.com/XH8D0EG.png) ---- ### 2019 ---- ### OOO again ---- ### 不期不待不受傷害 ---- ### 出乎意料的有趣 & 穩定 ---- ### Xbox, iOS, LISP machine ---- ### 我們表現也很有趣 (?) ---- ### 超過一半題目由我們首殺 Note: 4/7 ---- ### 50 小時 ---- ### 比賽結束前 4hr ![](https://i.imgur.com/B8wFNKY.png) ---- ### 第三天關閉 scoreboard ---- ### 許多隊伍猜測我們冠軍 ---- ### But.. ---- ![](https://i.imgur.com/fcpb1ht.png) ---- ### 維持冠軍很久 ---- ### 直到「那個題目」出現 ---- ### 風雲變色 ---- ### LISP Machine ---- ### 細節 ---- ### 不要問 不想講 ---- ### PPP 從頭打到尾 ---- ![](https://i.imgur.com/fcpb1ht.png) ---- ### 一題之差 +200 → -200 ---- ![](https://i.imgur.com/xU9MFwr.png =692x558) ---- ## 2020 ![](https://i.imgur.com/8lALZhL.png =673x547) --- ## HITCON CTF 人才招募計畫 ---- ### Contact: ? ---- ### HITCON CTF Quals 12th ~ 14th Oct. --- ## Thank you!
{"metaMigratedAt":"2023-06-14T23:28:37.850Z","metaMigratedFrom":"YAML","title":"HITCON CMT 2019","breaks":true,"description":"The slides presented in HITCON CMT 2019","contributors":"[{\"id\":\"8c1a24ac-ea2c-406e-afdc-a9acd79f263d\",\"add\":4637,\"del\":4209},{\"id\":\"5ac58a72-6296-4458-b01a-5f6b077abfa2\",\"add\":8601,\"del\":2211},{\"id\":\"e90fb084-f3e3-4992-8728-15d9e442ced9\",\"add\":4526,\"del\":661}]"}
    3140 views