[心得] AIS3 EOF 2024 Final
[TOC]
這次是第四次參賽 總算是拿到前三名了 > <

最後拿到了第一名 感謝隊友們
寫篇文章記錄一下發生的趣事跟題目
## 每年慣例(?)
~~打 EOF 就要壞個東西~~
[去年](post.php?pid=954)打一打 筆電爆炸讀不到硬碟
今年打一打 PVE 就掛掉了直接開不回來
## 組隊
今年是第一次改成單人打 Quals -> 晉級後組隊的形式
主辦單位安排了一個媒合活動 照名次讓他排隊伍志願序 並按照志願序問該隊伍是否讓他加入
都沒媒合到再隨機分組
我們這隊最後是這樣的組成:
兩個被我騙去修程安的同學 + 一個去年 EOF 隊友 + 一個 Web 佬 + 剩下媒合進來的
媒合的部分是說要進來就說好 ~~所以整隊的初賽名次其實都靠前~~
## 賽前準備
我們隊其實直到比賽前一天下午才開始弄 ~~在這之前連訊息都沒傳過~~
下午把 trello / Discord 等東西創好就沒啥動靜了 (?
後面大概快晚上 11 點才開始弄 wireguard 跟開 VM
剩下東西甚至是到場地才開始架 XD (見 [#Infra](#Infra)
## Infra
今年默默撿了一點 Infra 工作來做 整體架構如下:

今年比賽方提供了一台 jumpbox 來連進比賽機器 不過規格只開 2C1G 不太夠用
所以在學校開了一台 VM 來讓大家跑腳本跟其他有的沒的 然後用 wireguard 全部串一起
### Attack Manager
我們架了 [Destructive Farm](https://github.com/DestructiveVoice/DestructiveFarm) 來自動打 exploit

架構分成負責送 flag 跟分發 config (題目 IP etc.) 的 server
跟執行 exploit 並傳 flag 給 server 的 client
因為清大之前跳電跳到怕了 所以把 attack manager server 放在 jumpbox (其實也不太吃資源)
VM 只跑 client 以方便隨時跳走 ~~第一天沒多久 VM 就死了 連 PVE Host 一起~~ ~~分開放的決定是對的~~
多虧 @yikuo 贊助了別的 VM 後面才能不用全卡在 jumpbox
### Elastic
感謝 @yikuo 的協助 我們在第二天有了 elastic search 可以看流量 也會自動匯入 pcap
找 HTTP 裡面的 payload 變得方便許多 ~~還意外發現 casino 其實會錄到各隊 team token~~

### Grafana
原本在賽前一天晚上找了 @yikuo 幫忙架 grafana 要來看 service check / score etc.
但是後來發現其實沒啥用 所以被放置了
### Patch Diff
賽前 staff 發了訊息說會有 container image 形式的 patch
我寫了自動 download patch 並找了 @a91082900 來弄自動 `container-diff`
但在中 [GCP DDoS Alert](#GCP%20DDoS%20Alert) 之後被限速限爆所以載不動 patch 然後就放置了
### GCP DDoS Alert
比賽第一天大概下午兩點 (~4 hr) 就被海豹問說我們幹了啥 並有以下附圖:

基本上是 [Patch Diff](#Patch%20Diff) 抓 patch 抓太兇 GCP 就生氣氣了
接下來整天整隊的 outbound 就被限速在 10 Mbps 左右 只要有人載 patch 整隊網路就死光
我整個下午都在顧 iftop 看誰在搞 最後才發現是抓 patch 流量

後來翔哥幫我們換 IP 不過沒啥用 隔天重開一台 VM 才解決
感謝翔哥
## hahamut (AAD)
這題是一開始比賽就放出來的題目 因為那時候都在顧 infra 所以其實沒看 到最後也都沒怎麼看 XD
比賽後期看大家 SLA 都是 down
後來聽 @maple3142 說才知道 service check 會 DROP db
而預期解是有人會透過 patch 上 tcpdump 錄 service check 流量
更多可以看 maple 釋出的 repo: [AIS3-EOF/2024-ad-hahamut-public](https://github.com/AIS3-EOF/2024-ad-hahamut-public)
## rush popper (KoH)
> 出題好麻煩?讓開發者們/參賽者們幫我出 👍
> -- splitline
這題是要路邊撿一個 composer package 裝起來 然後串 POP chain 並 call 指定 function
並且需要在 call trace 中使用到該 package 的 class
觸發點可以是 `__destruct`、`__call`、`__toString`
先比 payload 長度 再比觸發點 最短的就是 king 分數按照該 package 星星數換算
~~這題出現的 POP chain 基本上都是 splitline 題目出過的~~
第一天基本上只有 phpggc 上面的兩個 chain (splitline 放的)
和 `predis/predis` 的 chain (今年程安 web 作業)
剛好解作業這題的五人中有三個都在我們這隊 所以可以很快樂地直接丟上去 (*附個我自己的 [Writeup](https://hackmd.io/@t510599/2023-swsec-hw4#Private-Browsing-Revenge)*
phpggc 雖然有一隊拿走了 但靠 `predis/predis` 第一天賺了不少分數
第二天大家做了作業回來 開場有人丟了 `*/fluentpdo` 的 chain 而且有三個同樣的 package 不同名字
我做的作業倒是都沒用 因為走錯方向 (只是拿 phpggc 的 chain 硬塞 class)
所以改變策略: ~~蹲別人的來撿漏~~
一開始 `predis` 被搶走了 因為我 port 打 48763 別隊換成 1 之類更短的 port
後面找到 `fluentpdo` 可以把裡面的 `a:b` 換成 `a:` ~~不過也沒多久就被搶走了~~
接下來是把所有的 `private`、`protected` 全部都換成 `public` 可以省掉 `\x00`
還很開心的跟隊友講說我把每題都幹下來了
但是 `phpggc` 很貼心的幫我換了行 (多 `\n`) 馬上被搶走了 QQ
這題默默直接變成拚手速遊戲 所以第二天幾乎都在顧這題
被瘋狂互搶的苦主 -> [別隊的 WriteUp](https://blog.ching367436.me/ais3-eof-2024-final/#popper-KoH)
OwO
後面還有 `monolog` 用了 `mixed` 所以 member name 可以是空字串這種鬼東西 (原本我們改成 `a`)
或是 payload 最後面的 `}` 其實可以少幾個等等
某個時候的截圖:

幸好前面 `fluentpdo` 拚手速拚贏了 最後就穩定在這樣的狀態直到回合結束:

最後這題也是最高分
## ICPC (KoH)
這題是讓你寫 shellcode 解一些簡單的程式題
但是每 round 每個隊伍可以各 ban 一個 byte 所以有些 instruction 就不能寫
都是隊友在寫 只有隨便提個建議說可以 XOR shellcode 再解密來 bypass 就好
詳情可以看別隊 [Curious 的 WriteUp](https://curious-lucifer.netlify.app/writeup/ais3_eof_2024_final_icpc_writeup/)
## casino
每隊有一台拉霸機 可以拿自己的 team token 去玩 把機器上的錢贏出來 (機器也有 machine token)
另外還有一個銀行做 verification 金流是讓他處理
題目有分兩個部分 一個是拉霸機介面 另外還有一個 admin panel
拉霸機就是個一般的 flask 而 admin panel 則是用 pyinstaller 包起來的 flask
而且用了 python 3.12 所以 pyc 沒辦法直接 decompile
後來看到某隊的 patch 活得很好 所以挖出來用 pycdc 看

哇嗚 有野生的寫死 secret 更酷的是他是 Python 3.11 的 pyc
有了 secret 之後就可以任意簽 session 來操作 admin panel 而裡面有 web shell 可以用
又剛好大家都跟他們的 patch 所以可以到處用 XD
策略是每回合進到大家的機器 cat machine token 之後就把他們 service 砍到再起不能
除了不能再被 RCE 以外 也能避免錢被玩走 更甚者能賺很多 SLA 分數

後面再拿各隊的 machine token 玩 把錢贏來 ~~偶有太雖被贏錢要認賠的環節~~
雖然第二天的一半才發現以上解法 但最後這題還是拿了最高分
據說預設解是拿 chatgpt 幫你看 bytecode
再用 `python -m app` 並透過 flask 的 `__init__.py` 補洞
賽後問到 patch 出 python 3.11 pyc 的隊伍是用這個工具 decompile 的 -> https://pylingual.io/
甚至是個 web service 超酷
## Pwn2Own
結合了 web + pwn 的題目 東西會包成 firmware 用樹梅派跑起來
原本的功能是顯示目前隊伍分數 兼具主辦拿來送跑馬燈
而目標是讓機器播出指定的影片 (*我的豆花~~~ 30 塊~~~!*)
一開始隊友挖了個 XSS 後 我隨手把影片丟到自己 server 跟寫了 `<video>` tag 給他
還有他們搞出 web shell 後說記得加 `DISPLAY=:0` 來跑 chromium
然後後面再玩了一下 web shell 之後就沒怎麼關注這題了
隔天看隊友搬了鍵盤出來直接切 tty 搞 terminal 跟 gdb 手刻 shellcode 了
更多詳情可參閱[別隊的 writeup](https://hackmd.io/@pwn2ooown/HJK40Xpca)
## 雜記
- 中華電信資安所床很硬
- 中華電信資安所沒有牙刷
- 中華電信資安所宿舍網路甚麼都鎖 只剩 TCP 80/443 最好帶自己網路 or 準備 SSLVPN
## 結語
EOF 好好玩 而且今年人變多了 不用再一人一題顧到累得半死了
但機器可以不要再死了嗎 QQ

## WriteUp 們
- https://hackmd.io/@pwn2ooown/HJK40Xpca
- https://blog.ching367436.me/ais3-eof-2024-final/
- https://curious-lucifer.netlify.app/writeup/ais3_eof_2024_final_icpc_writeup/
- https://taiyou.tw/blog/2024/02/10/ais3-eof-final-2024/
---
默默發現[去年的文](post.php?pid=954)還沒寫 (?
2024-02-06 02:36:01
留言
Last fetch: --:--
現在還沒有留言!