return-oriented-programmingpwn会2回目。今回は自力で解けた解けてなかった1。angry_doraemonドラえもんと戦うゲームのようななにか2。ps.txtを置いておかないと動かない。NULL);が呼ばれる。overflowがある。overflow後そのbufferの中身をsprintfする。5番の選択肢で、0x08から始まらない好きなアドレスをcallできる。攻撃には4番のbofだけあれば十分である3。1番のexeclを利用するとropが少し楽になる。canaryが邪魔であるが、sprintfでbufferが表示されることを用いればcanaryを流出させることができる4。bufferは10byteありcanaryの下位1byteは0x00なので11byte書き込めばよい。ebpやreturn先アドレスも読み取れる。>&4");を呼ぶだけ。4はsocketのfdである。>&4\0'p.send(payload)p.sendline('ls')p.interactive()decompile雑6。2016解けてなかったのでそのことを明記libcはuploadされてないだけで本番は与えられていたのかな、と思っていたけどそうではなかったらしい。↩プログラミングを始めたとき、猫でもわかるcでwhile文ぐらいまで読んで、こんな感じの雑なゲームを作って喜んでいた覚えがある。↩5番の明らかなそれはいったい何だったのだろう。他の人のwriteupを見ても使われていなかった。3$回程度の試行で判明するはず。sleep(2);があるが最悪でも30分は越えない。環境によっては複数回に分ける必要があるかも。↩binaryの先頭から訳していってかつ(やる必要がなかった気がしてきて)やる気が単調減少していったのが分かる味わい深いコード。要領良くやりたいですね。