前言
神盾盃是台灣除了技能競賽以外獎金最高的比賽,但限制大學以上才能參加
這次跟 CakeisTheFake 的好夥伴們一起參加,初賽第三名以及決賽第二名
共拿到 90200 元獎金,賺爛了賺爛了

神盾盃初賽
前十名可以進入決賽,進入決賽就保底三萬元獎金
所以如果是為了錢打比賽的話可以單刷進決賽,這樣會拿到最多錢
gochal
就是一個 XOR flag checker,只是用 golang 寫

import base64
b64 = "W257U3hHXURjfERORUlOdUBZRUJSRV9Uc1hjfUpRfwpB"key = (0x1A, 0x2B, 0x3C)
data = base64.b64decode(b64)flag = bytes(b ^ key[i % 3] for i, b in enumerate(data)).decode("utf-8")print(flag)call back
追一下可以發現邏輯寫在 sub_7FF7679F11C0
這邊會讀 flag.txt 然後會跳到寫在 data 段的 shell code

看後面的訊息可以猜這題也是 flag checker

飛去 unk_7FF7679F5040,make function,可以確認就是 flag checker

後面就是老生常談了
TARGET = "8A167732F632676EF2FE0B42DC066342D856895CC6FC5B5AEA582360D27C3962E62A2F14D80C2342C8F41F6E"K = 0x0094E590
t = bytes.fromhex(TARGET)arr = bytearray()for i in range(0, 44, 4): T = int.from_bytes(t[i:i+4], "big") U = ((T - 0x14) & 0xFFFFFFFF) ^ K arr += ((U >> 1) & 0xFFFFFFFF).to_bytes(4, "big")
orig = bytearray(44)for i in range(0, 44, 2): orig[i], orig[i+1] = arr[i+1], arr[i]
print(bytes(orig))NestingZip
給了一個嵌套超多層的 zip 檔,可以寫個腳本解出最後的檔案
import osimport zipfileimport shutil
def recursive_unzip(zip_path): zip_path = os.path.abspath(zip_path)
while True: extract_dir = os.path.splitext(zip_path)[0] with zipfile.ZipFile(zip_path, "r") as zf: zf.extractall(extract_dir)
entries = os.listdir(extract_dir) if len(entries) == 1: candidate = os.path.join(extract_dir, entries[0]) if zipfile.is_zipfile(candidate): print(f"\rzip: {candidate}", end="") shutil.move(candidate, zip_path) shutil.rmtree(extract_dir) continue break
if __name__ == "__main__": recursive_unzip("Nesting.zip")解完之後可以拿到這個 NOTflag.txt
vrq4tqyEs8zIoJLMoIvMk5Oghs+KoJ6gjMycjZrIoLyGncyNvJfMmaDOjKCeoMbPz5ugyJfOkcaCbase64 decode 出來是亂碼,傻住了十分鐘,看檔名才猜到要再做一次 NOT

m - rsa
chatGPT 解掉了,好爽 ㄏㄏ
思路(簡述)
1. 伺服器有一個固定的 3×3 矩陣 A,中心是未知 m,外圈 8 個素數會印出(或印出矩陣 A,中心不是數字)。
2. 每次輸入 ‘y’ 會給一組新的 RSA n 與 c = A^19 (mod n)。
3. 因為 det(A^19) = det(A)^19,且 det(A) 對 m 呈線性(沿中心元素展開),
所以蒐集多組 det(c) (mod n) 用 CRT 還原 det(A^19) 的整數值,取整數 19 次方根得到 det(A);
接著 det(A) = K*m + B ⇒ m = (det(A) - B) // K。
4. 最後把 m 轉回 bytes 看看是不是可讀字串。
cipher restraunt
是一個 python exe,可以拆 pyc 還原邏輯,但沒用
總之可以用不同方法拿到一堆圖片 (A~Z)

exiftool 看圖片 comment 照著提示用 steghide 解,可以集齊這些提示
I am Legendary Utensil, and I can transform ingredients into dishes.
I want to eat the food that the chef made, but he gave me gold coins and asked me to buy the ingredients on the list. The list only says "PRIME". What are these ingredients?
The chef loves prime numbers, and he will use them as ingredient codes.還有這張圖片

答案是要把 P R I M E 五張圖對應的質數(圖片 Title)相乘之後跟沒用到的那張圖片一起丟進 OpenPuff
到底誰想的到 = =

Result
第三名,成功進決賽,好耶 去台南玩囉
其他隊友的初賽 write-up:
- Whale 神盾盃 2025 Qual Writeup - by Whale120
- Naup 2025 神盾杯 Qual - writeup
- rota1001 (還沒寫😡)
- Aukro (還沒寫😡)

神盾盃決賽
進決賽的又是一堆老熟人,忘記誰提的絕妙點子:大家一起包棟民宿
我剛好有 Agoda 白金會員,所以就幫忙訂,結果訂到一間離會場超遠的💀
總之我們四隊的人就一起住,剛好還順便練習了 GCC 面試(決賽和面試撞期)

決賽的賽制是 霸主攻防+滲透
霸主攻防就是 pwn / prompt injection,霸主可以上 patch / 下防禦 prompt
主要算分是看滲透,霸主攻防影響的是額外獎金跟分數倍率
Day 1
發現沒帶 RJ45 轉接頭,只好 UberEat 送過來
一條 600 的轉接頭,開局直接 -600
甚至不是馬上送,送到都已經下午了 = =

直接被硬控半天,只能去看 pwn,幸好第一天的 pwn 都是常見的洞
寫了一個 cmdi 的 exploit 之後就只負責把哪裡有洞整理成 List 丟給隊裡的 pwnGPT,拿到網路線之前真的太坐牢了,debug 還要跑去看隊友電腦
(沒內網,跟 pwnGPT 對話 辛酸畫面流出)

這個 cmdi 爽到 12:30 左右就被 patch 掉了
後面就是一直 exploit -> patch
只好一直吃小點心,又要到飯了

prompt injection 拿了之前收集的 prompt 去戳都失敗了
但幸好只 delay 1 回合,等有人成功再抄作業就好了
終於拿到網路線之後去看滲透,接手的時候鯨魚已經 access 兩台 warmup 獨立靶機,但其中一台不知道怎麼提權

上去翻垃圾很久都沒想法,後來想說再看一下 LINPEAS 好了
然後就看到一個 root cronjob,然後檔案可寫 超ㄏ
總之快樂提權、把那台上的 flag 都撈一撈之後 Day 1 就差不多結束了

Day 2
第二天都在跟鯨魚打 AD Set,因為 AI 達人 Aukro 把 AI 題拿捏了
Initial Access 要打 Blind XXE,我是一點想法都沒有🤡
幸好台大林同學很強,我還在點心區做奶精奶茶的時候他就打進去了
翻這台 WEB01 可以拿到連 DB01 的 credential,然後 DB01 可以 link 到 DB02
目前為止就有好幾把 flag 能拿了,帥帥帥
但沒出意外的話就要出意外了,開始卡關
- WEB01 提權完了,在 DMZ 外面摸不到其他台
- DB01 找不到提權路徑
- DB02 找不到提權路徑
只好忍痛開錦囊(有 quota 可以問主辦單位拿提示)
原來是 DB01 link 到 DB02 還可以再 link 回來,此時就是 DB01 sa 了
此時我就滑壘中離了,因為忘記要面試 GCC ㄏㄏ
城市老鼠般躲到旁邊的樓梯間偷偷面試,問題是樓梯間用了感應燈
自我介紹的時候燈一直暗掉,我又沒有開視訊鏡頭,面試老師那邊聽起來就是我一直卡詞講不好,但其實是因為眼前一片黑我在邊嘗試開燈邊講
無助的像是剛出生的小鹿一樣,最後也理所當然地沒錄取😭賠了夫人又要當一年兵
面試結束,回來之後還是沒啥想法,一直困在瀏覽器紀錄的 rabbit hole,鯨魚也把該拿的 flag 都拿完了(很多)
後來我就回 WEB01 繼續翻垃圾,發現有個 IDOR 的 flag 漏拿了
體驗了一把垃圾堆裡撿到錢的快感
我們的垂死掙扎就是不停開錦囊,但都沒甚麼用了
止步於 DB02,拿不到 shell QQ
後來問了隔壁牛肉湯,說是用祖國人寫的工具可以掃到 DB02 的 sa 弱密碼,牛逼666
結束之前麒升學長還打了一個沒人打的 pwn 帥帥帥(然後就被 patch 掉了,霸主不講武德)
幸好最後我們是第二名,耶

其他隊友的決賽 write-up:
- Whale 神盾盃 2025 Qual Writeup - by Whale120
- Naup (還沒寫😡)
- rota1001 神盾盃 2025 write-up
- Aukro (還沒寫😡)
後記
今年神盾是我參加過覺得題目品質最優的決賽
有趣又能學到東西,難度也不會過高
不過收穫最大的是從隔壁組聽到 DCSync 的笑話,真的超好笑
DCSync = Discord Sync
隔壁組都是綠色勾勾的紅紅實習生跟打 pwn2own 拿過幾萬美金的大駭客
反觀我們這組都是乖寶寶好學生,我覺得輸的不冤😤
(反串要註明)
離開台南之前我們吃了炸串吃到飽當慶功宴,耶
