## 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}]"}