Rating: 1.0
nc で接続し、そのサーバで実行されたバイナリが渡される pwn。
「日記を保存する機能」「最後に保存した日記を表示する機能」がついたバイナリが渡される。
見たところ最初に「flag」という関数を読んでおり、ファイルを open して特定のメモリのアドレス(少なくとも objdump で見る限りハードコード)に書き込んでいた。
バッファオーバーフローさせるのかと思いきや入力はすべて fgets だった。また、 strchr を呼び出して ‘n’ が含まれているとなぜか「rude!」と表示されて終了する仕様だった。
出力を見ると printf だったので、日記の内容を %d とかにするとその時のスタックの一部のデータが出力された。n がブロックされているので、%n が使えず、メモリに書き込むことはできない。
gdb で見たところ、しばらく先に日記の内容があったので、日記の先頭部分に flag のアドレスを書き、あとは %d でしばらく埋めつつ flag のアドレスが来る場所に %s を置くとフラグが表示された。
not in english