NO CTF NO LIFE

Codegate CTF Preliminary 2014 200 dodoCrackme

這是應該是我玩過的CTF裡面最硬的一次 ORZ
大量的 pwnable 和 reversing
根本破壞遊戲體驗....= =
這次跟 217 和 chroot 還有sqlab學長一起參加
跟大大們學到很多招數 :)
希望下次別這麼醬油了 Orz


這題是ELF 64-bit LSB executable
先觀察一下行為

root@localhost's password: 1234
Permission denied (password).

感覺就要先把root password弄到手
先把分析看看binary
用ida打開會嚇一跳
因為是用組語寫的 Orz
function只有一個start
出現很多syscall

查一下資料發現syscall會把call number放在eax
用interrupt去處理動作

 mov    $0x1,%eax
 mov    $0x1,%edi
 mov    %rbp,%rsi
 mov    $0x1,%edx
 syscall

這樣就是呼叫write 1 byte的意思
此外過程中是用inc和dec去控制要輸出的byte
直接看code會看不出密碼
輸出 root@localhost's password:
接著是一些用途不明的code
然後才是syscall read
在syscall的地方下breakpoint
接著把$ebp附近的memory dump出來
發現從0x7ffff7ff8b58開始
每隔16byte就會有奇怪的字元

0x7ffff7ff8b58: 72 'H'

0x7ffff7ff8b60: 0 '\000'
0x7ffff7ff8b68: 52 '4'

0x7ffff7ff8b70: 0 '\000'
0x7ffff7ff8b78: 80 'P'

0x7ffff7ff8b80: 0 '\000'
0x7ffff7ff8b88: 80 'P'

0x7ffff7ff8b90: 0 '\000'
0x7ffff7ff8b98: 89 'Y'

...

所以推測剛剛那段code是用來計算password
不過我就沒有去仔細看到底是不是如我猜想的了

flag: H4PPY_C0DEGaTE_2014_CU_1N_K0RE4