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?

SSIT1のWriteUp

Posted at

WriteUp

問題のインスタンスを立ち上げてアクセスすると下記の画面が表示される

Pasted image 20250412100444.png

適当な文字をテキストボックスに入力してOKを押下すると
画面遷移し入力したテキストがh1タグで囲まれて表示される

Pasted image 20250412100507.png

Pasted image 20250412100513.png

SSTIはServer Side Templete Injectionの略でテンプレート構文の脆弱性をついてコードをインジェクションする攻撃手法。

問題のWebサイトが一体どんなWebフレームワークを使っているのかがわかれば
対象に応じたコードをテキストボックスからインジェクションすることでフラグを取得できるはず。

開発者ツールからNetworkタブをみると
ResponseヘッダーのServerにPythonの文字があるのでおそらくテンプレートエンジンはJinja2あたりと検討をつける

Pasted image 20250412101828.png

PythonフレームワークへのSSTI手法をググってみると下記のサイトが見つかった
https://behradtaher.dev/2021/12/02/SSTI-In-Python-Frameworks/#Abusing-Jinja2-to-call-built-in-Python-methods

Pythonの継承階層をたどって、"subprocess.Popen"までたどり着ければ
外部コマンド等を実行することでサーバの情報を取得することができるはず

Pasted image 20250413183744.png

"".__class__.__base__.__subclasses__()
でstrのベースクラス(object)のサブクラスを取得するとPopenが見つかる

Pasted image 20250413183854.png

{{"".__class__.__base__.__subclasses__()[356](["ls"],stdout=-1).stdout.read()}}

subprocess.Popenは357個目の要素なので配列のインデックスに356を指定してlsコマンドを発行する。
Popenの標準出力をとるためにstdout=-1(subprocess.PIPE)を指定してreadする。

Pasted image 20250413185728.png

"flag"というファイルがみつかるので同様にcatコマンドでファイルの中身をみるとフラグが手に入る


下記のサイトにはテンプレートエンジンを判別するチャートが載っていた

また、Flaskアプリケーションの場合、requestなどのオブジェクトを経由することでビルトインオブジェクトにアクセスしosモジュールからpopenを実行する方法もあるらしい

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?