0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【セキュリティ】SSTImapとは

0
Posted at

はじめに

SSTI 脆弱性の発見〜自動攻撃までを一気に攻略

SSTI(Server-Side Template Injection)は、テンプレートエンジンがユーザー入力をそのまま評価してしまうことで発生するサーバーサイド脆弱性です。脆弱なサーバーに到達できれば、内部オブジェクトの参照・コード実行(RCE)まで可能になる強力な攻撃ベクトルです。

本記事では、

  • SSTI の調査方法を体系化した SSTImap の考え方
  • GitHub の攻撃ツール SSTImap(自動攻撃フレームワーク)
  • 実行方法・活用シナリオ・エンジン別の挙動

をまとめて解説します。


1. SSTImap(概念)とは?

SSTImap は、CTF・ペンテストで定番の SSTI 脆弱性調査 “思考マップ” のこと。

SSTI を攻略する際のステップは以下の4段階に整理できます:


① 計算できるか試す(サニティチェック)

エンジンの式が評価されるかを調べるための軽いペイロード。

テンプレ テスト例
Jinja2/Twig {{7*7}}
Pug/Jade #{7*7}
EJS/ERB <%= 7*7 %>
Velocity ${7*7}

49 が返れば Jinja2 系の可能性が高い。


② テンプレートエンジンの特定(Fingerprinting)

よく使う判別方法:

  • 構文がエラーになるか
  • {{ [].__class__ }} が評価できるか
  • ${7*7} で動くか
  • { 'abc'|upper } が動く(Smarty)
  • コメントの書式など

これで Jinja2 / Twig / Smarty / Pug / Velocity などが判別できる。


③ オブジェクトアクセス段階に進む

例えば Jinja2 なら:

{{ ''.__class__.__mro__ }}
{{ ''.__class__.__mro__[1].__subclasses__() }}

この“内部 API に触れる”段階が肝。


④ OS コマンド実行(RCE)へ到達

代表例(Jinja2):

{{ ''.__class__.__mro__[1].__subclasses__()[157].__init__.__globals__['__builtins__']['__import__']('os').popen('id').read() }}

これは最終ステージ。


こうした「SSTI 脆弱性を発見 → 分類 → 深掘り → RCE」の流れを整理したものを総称して SSTImap と呼ぶ。


2. SSTImap(ツール版)とは?

GitHub: https://github.com/vladko312/SSTImap

SSTImap はこの SSTImap(思考マップ)を完全に自動化したツールです。

できること

  • 各種テンプレートエンジンの自動判定
  • SSTI の存在確認
  • 既知ペイロードによる自動 Exploit
  • RCE 可能性の最大化

AttackBox では /opt/SSTImap にプリインストール済み

ローカルで使うなら、自分で clone する。


3. SSTImap のインストール手順

① Clone

git clone https://github.com/vladko312/SSTImap.git

② 移動

cd SSTImap

③ 依存関係インストール

pip install -r requirements.txt

これで準備完了。


4. SSTImap の使い方(最重要)

SSTImap は URL と HTTP メソッドを指定するだけで、自動的に:

  • テンプレートエンジン判定
  • ペイロードの調整
  • 攻撃ルートの探索
  • Exploit 実行

までやってくれる。


基本コマンド

python3 sstimap.py -X POST -u 'http://ssti.thm:8002/mako/' -d 'page='

意味:

  • -X POST → POST リクエストを送る
  • -u URL → 対象のエンドポイント
  • -d 'page=' → 注入位置(パラメータ)

▶ 解析の流れ(ツール内部で行われること)

  1. {{7\*7}} など基本ペイロードを送って挙動を観察
  2. Jinja2 / Twig / Smarty / Velocity などを推定
  3. そのエンジン専用の Exploit を送る
  4. 可能な場合は RCE まで試行

まさに SSTI の「全自動攻撃ツール」。


5. 実例:TryHackMe の SSTI 検出

TryHackMe の Mako テンプレートのエンドポイントに対して

python3 sstimap.py -X POST -u 'http://ssti.thm:8002/mako/' -d 'page='

と実行すると、

  • Mako テンプレート特有の挙動を検出
  • ペイロードによるコード実行も試行
  • 成功すれば RCE 結果を返す

という流れになる。


6. SSTImap を使う際の注意点(実務者視点)

実際のプロダクションで使う場合、負荷に注意

テンプレートエンジンに大量のペイロードを送るため、ログにも残るし WAF にも引っかかりやすい。

サンドボックスが硬い場合は限界がある

Twig, Go Template などは設定によってほぼ RCE 不可能な場合もある。

開示責任(Responsible Disclosure)が必要

攻撃者視点のツールなので、使用場所には細心の注意を。


まとめ:SSTImap は “SSTI 攻撃の自動モンスター”

SSTImap(概念)

  • テンプレートエンジンの挙動を段階的に調べる思考パターン
  • 計算 → エンジン判定 → オブジェクトアクセス → RCE

SSTImap(GitHub ツール)

  • SSTI の検出・特定・Exploit を全自動化する Python ツール
  • URL とパラメータを渡すだけで攻撃ルートを探索してくれる

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?