Cavern.sigma
Welcome to Cavern.sigma
[TOC] 這次是第四次參賽 總算是拿到前三名了 > < ![Scoreboard](https://img.stoneapp.tech/t510599/eof-2024/final/Scoreboard.png) 最後拿到了第一名 感謝隊友們 寫篇文章記錄一下發生的趣事跟題目 ## 每年慣例(?) ~~打 EOF 就要壞個東西~~ [去年](post.php?pid=954)打一打 筆電爆炸讀不到硬碟 今年打一打 PVE 就掛掉了直接開不回來 ## 組隊 今年是第一次改成單人打 Quals -> 晉級後組隊的形式 主辦單位安排了一個媒合活動 照名次讓他排隊伍志願序 並按照志願序問該隊伍是否讓他加入 都沒媒合到再隨機分組 我們這隊最後是這樣的組成: 兩個被我騙去修程安的同學 + 一個去年 EOF 隊友 + 一個 Web 佬 + 剩下媒合進來的 媒合的部分是說要進來就說好 ~~所以整隊的初賽名次其實都靠前~~ ## 賽前準備 我們隊其實直到比賽前一天下午才開始弄 ~~在這之前連訊息都沒傳過~~ 下午把 trello / Discord 等東西創好就沒啥動靜了 (? 後面大概快晚上 11 點才開始弄 wireguard 跟開 VM 剩下東西甚至是到場地才開始架 XD (見 [#Infra](#Infra) ## Infra 今年默默撿了一點 Infra 工作來做 整體架構如下: ![infra](https://img.stoneapp.tech/t510599/eof-2024/final/eof-infra.png) 今年比賽方提供了一台 jumpbox 來連進比賽機器 不過規格只開 2C1G 不太夠用 所以在學校開了一台 VM 來讓大家跑腳本跟其他有的沒的 然後用 wireguard 全部串一起 ### Attack Manager 我們架了 [Destructive Farm](https://github.com/DestructiveVoice/DestructiveFarm) 來自動打 exploit ![Destructive Farm Server](https://img.stoneapp.tech/t510599/eof-2024/final/Destructive%20Farm%20-%20Server.png) 架構分成負責送 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~~ ![team token](https://img.stoneapp.tech/t510599/eof-2024/final/casino/team-token.png) ### 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) 就被海豹問說我們幹了啥 並有以下附圖: ![iftop](https://img.stoneapp.tech/t510599/eof-2024/final/ddos.png) 基本上是 [Patch Diff](#Patch%20Diff) 抓 patch 抓太兇 GCP 就生氣氣了 接下來整天整隊的 outbound 就被限速在 10 Mbps 左右 只要有人載 patch 整隊網路就死光 我整個下午都在顧 iftop 看誰在搞 最後才發現是抓 patch 流量 ![iftop](https://img.stoneapp.tech/t510599/eof-2024/final/iftop.png) 後來翔哥幫我們換 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 最後面的 `}` 其實可以少幾個等等 某個時候的截圖: ![king](https://img.stoneapp.tech/t510599/eof-2024/final/rush_p0pper/king.png) 幸好前面 `fluentpdo` 拚手速拚贏了 最後就穩定在這樣的狀態直到回合結束: ![ranking](https://img.stoneapp.tech/t510599/eof-2024/final/rush_p0pper/ranking.png) 最後這題也是最高分 ## 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 看 ![patch secret](https://img.stoneapp.tech/t510599/eof-2024/final/casino/patch-secret.png) 哇嗚 有野生的寫死 secret 更酷的是他是 Python 3.11 的 pyc 有了 secret 之後就可以任意簽 session 來操作 admin panel 而裡面有 web shell 可以用 又剛好大家都跟他們的 patch 所以可以到處用 XD 策略是每回合進到大家的機器 cat machine token 之後就把他們 service 砍到再起不能 除了不能再被 RCE 以外 也能避免錢被玩走 更甚者能賺很多 SLA 分數 ![service check](https://img.stoneapp.tech/t510599/eof-2024/final/casino/service-check.png) 後面再拿各隊的 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 ![gameover](https://img.stoneapp.tech/t510599/eof-2024/final/gameover.gif) ## 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: --:-- 
現在還沒有留言!