pwn最近遊んでいるOverTheWireのBehemothのレベル4がシンボリックリンク攻撃だったのでその攻略めもです。behemothの問題はソースコードは公開されてないので見れるのはバイナリだけです。mainしたときの表示がこちら。dump.処理自体はmain()で完結してます。このプログラムは最初にgetpid(2)で自身のPIDを取得します。sprintf(3)で以下のような形でファイル名を作成してます。pid)そして、fopen(3)でこのファイルを読みこみで開きます。ファイルが無ければ、エラーメッセージを出して終了します。ファイルが有った場合はfgetc(3)で開いたファイルから1byte読み込んで、読み込んだデータをputchar(2)で出力します。/tmp/${pid}が存在すれば、そのデータを出力できるですね。ここで読み込みたいファイルは次の問題へアクセするためのパスワードが書いてある/etc/behemoth_pass/behemoth5です。behemoth4はsetuidされたバイナリなので/etc/behemoth_pass/behemoth5を読むことはできます。ログインしているユーザはbehemoth4なので/etc/behemoth_pass/behemoth5を直接読みことはできません。するかというところでシンボリックリンクが出てきて、/tmp/${pid}が/etc/behemoth_pass/behemoth5を参照するようになっていればプログラムのbehemoth4はパスワードのファイルを読めます。よって、この問題はpidさえ分かれば解決できます。pidをどうやって知るかとろころで、適当にコマンド動かしてそのpidからブルートフォースで/tmp/の下にシンボリックリンクのファイルを作るとか、適当なpidを選んで(1234とか)そのpidになるまで延々と実行するとかもあるんですが、めんどくさいのでpythonのスクリプトでpopenでプロセス起動すればpidがわかるのでそこでシンボリックリンクを作ってしまいます。attackめも最近CTFとか興味出てきたので色々と遊んでます。(1)はてなブログをはじめよう!masami256さんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。