TDUCTFに作問参加した

こんばんは. hhc0nullです.


反省
TDUCTFに作問側で参加しました.


pwnの問題
さて, CTFの問題の方ですが僕の勉強不足で「解こうと思えば解けるけど不親切設計な問題」になってしまったのであまり公開する気がしませんが需要があるみたいなので晒します. もう成長の記録として考えたいです.
ROPUZZLE-REXはGOT周辺の修正版を載せました.
URL: https://www.dropbox.com/s/q4cw46whzroky7y/TDUCTF2015_pwn.zip?dl=0


それぞれの問題について
fwrite/freadを使ってたり, read/writeになってるのにsetbuf(stdout, NULL); setbuf(stdin, NULL);してたりもうダメ.


shellcode for newbie
想定: shellcodeを送ってシェルを取れることを知ってもらいたかった.
反省: setbuf(stdout, NULL); setbuf(stdin, NULL); をし忘れててダメだった. そもそも全体的にread/writeでやるべき.


ret2libc for newbie
想定: データの領域が実行不可でもret2libcとかいうのを使えば逃げられるよ.
反省: いやそもそもret2pltじゃん? 深夜に作ったのが悪い……


rop for newbie
想定: ROPというのがあって, pop eaxはalarm(x); alarm(0);で代用できます.
反省: なぜかI/O周りがダメで勉強不足……

In a new stage
想定: ROPのときと違って使えるバッファが小さいけど, stagerという発想もあるんです.
反省: よく見るとこれはread/writeだ.


Charlotte
想定: はじめてのFSB.
反省: もう迷子. 無駄が多い.


She'll code it after school today
想定: 一番最初に作ったやつでshellcodeの問題のつもり. 以前, "lea -0x4(%ecx), %esp"とかで唸ったことがあったのでそれを意識した.
反省: 深夜作業ダメ. そもそも英語できないのに無理するな.


Enter to a Tailor House.
想定: FSBでシェル取ってみましょう.
反省: Charlotteに同じ.


ROPUZZLE-REX
想定: ROP中心のパズル. 0xXXXX8000にmmapされれば0xXXXX80cdに"mov [eax], ax"でint $0x80を置けるのでsyscall呼べる.
反省: 手動でGOT周辺を埋めてたのでmemsetを消し忘れて地道にシェルコードを置けるようになってしまった. そもそもhandlerでkill()する意味がないのに何をやってるんだ深夜の僕. もうガバガバ.


作問の教訓
作問の経験をもっとすべき.