Link: https://2019.justctf.team/
這算是我第一場(比較認真打的)CTF 比賽,於是來發一個公開的 writeup 吧!
我和 3 個同學組隊參加這場比賽,順便當成計算機安全課程 Final CTF 的賽前練習。
Sanity check
這場比賽的簽到題,雖然說是簽到題,雖然算是簽到題但 flag 也沒那麼好找啦!discord 上面就有一些人哀嚎解不出這題 😂。
這題的 flag 其實就是在比賽規則中寫的範例 flag:justCTF{something_h3re!}
,還好我看規則時有試著把範例 flag 貼上去看看,所以沒被這題卡住 :) 。
Will it stop?
題目大意
這題的概念大概是:把你的 code 傳上對方的伺服器,然後它會幫你編譯。就 PDF 中的故事而言,它理論上還會在伺服器上執行你的程式,但實際上假如你上傳一個能夠成功編譯的程式碼上去,linker 會報錯(根據 discord,這是正常的),所以這題是要你在 compile 階段去攻下 flag。
解題過程
這是我一開賽就看的題目,那時候也沒注意到這題的難度被歸類為 Medium 而非 Easy,覺得有趣就看了。
看到這題我就馬上想到用 #include "path/to/flag"
的方式來讓我輸出機器上的檔案,然而我卻猜不到 flag 在哪裡。根據題目中的提示,flag 在使用者的家目錄,然而我卻沒辦法猜出使用者名稱,我試著研究了一些 GCC 的 pragma,沒有一個能夠幫助我找到使用者名稱或工作目錄等有用的資訊。
星期六晚上回來和隊友討論這題(當天下午有別的事情就沒參賽),隊友建議我看看 /etc/passwd
,於是就輕鬆看到了以下資訊(使用者名稱):1
2
3
4
5
6
7
8
9
10How many lines does your C program parsing a Python code have?
1
Write your program now:
#include "/etc/passwd"
Ok, let's build it!
In file included from <stdin>:1:0:
/etc/passwd:1:8: error: expected '=', ',', ';', 'asm' or '__attribute__' before ':' token
aturing:x:1000:1000::/home/aturing:/bin/sh
^
COMPILATION FAILED
起初,我其實嘗試過 include /proc/self
底下的東西,但找不到檔案,接著就沒繼續嘗試 include 系統文件了。果然有隊友討論很重要,否則這題卡在這點上就太虧了!