很遺憾的,昨天團體賽失敗了。隊友其實有發出文章,但是存成草稿。真心希望主辦單位能注意到這個問題,畢竟已經不是第一組或第一個這樣失敗的參賽者。
這是一題比較簡單的 Pwn 題。一樣用 nc 連上去拿 flag。
之前看過一個有趣的工具,Pwntools。它基本上是以打 Pwn 來開發的,所以有各種工具,例如連上 nc,等字串.... 感覺這也可以拿來 telnet?
GitHub - Gallopsled/pwntools: CTF framework and exploit development library
不過可惜的是,Pwntools 目前只支持 python 2。
pwn checksec <file>
可以檢查程式是不是有一些針對 pwn 的保護。
[es@es-l tmp]$ pwn checksec ./classic_aa9e979fd5c597526ef30c003bffee474b314e22
[*] '/tmp/classic_aa9e979fd5c597526ef30c003bffee474b314e22'
Arch: amd64-64-little
RELRO: Partial RELRO
Stack: No canary found
NX: NX enabled
PIE: No PIE (0x400000)
以這個來說,一個都沒開。
從上面可以看到有數種保護。
Relocation Read-Only。有分成 Partial 和 Full 兩種模式。
Partial 下,非 PLT 的 GOT 是只能讀,而 .got.plt
是可以寫的。
(PLT 是指 Procedure Linkage Table,像是 puts@plt
就是指說,這函式的位置在編譯時是不知道的,得靠 runtime 動態連結)
Stack Canary。Stack Canary 指的是實驗室裡面的鳥,假設鳥死了就塊陶。
Canary 在程式中是指說,可能在 Stack 某處會放一個數字。這數字在函式返回時會拿來比對,假設不對,代表說 Stack 被溢位了。
下集會提到 NX 和 PIE。