内网渗透|LAPS的使用小技巧

2021-11-19 14:46:54 浏览数 (1)

LAPS

0x01 前提

有一天在路上莫名奇妙捡到一个webshell,既然是爆Ju那就爆久一点,然后我就随手转存下lsass内存。

代码语言:javascript复制
tasklist /svc | findstr "lsass.exe"rundll32.exe C:windowsSystem32comsvcs.dll, MiniDump pid lsass.dmp full

然后再随手导出一哈本地hash好了。

代码语言:javascript复制
reg save hklmsam sam.hivreg save hklmsystem system.hiv

不错拿到了我们喜欢的p@ssw0rd密码,好家伙这不是我自己电脑密码吗?难道这台机器的主人暗恋我?哪有这么巧合的事?!于是我随手一个smb爆破,wmi爆破,好家伙给我爆出来30台机器,这波不是发个大财?然后一想我自己的小域环境不也这样?这可不行,我自己一台一台改?我懒得搞被撸了算了,要不用组策略比如sysvol?这样搞那我还不如不管了。于是我发现了有个东西叫做LAPS

0x02 LAPS是什么

Microsoft 本地管理员密码解决方案 (LAPS为) Active Directory 中的每台计算机提供自动本地管理员帐户管理。安装在每台计算机上的客户端组件会生成一个随机密码,更新关联 AD 计算机帐户上的(新)LAPS密码属性,并在本地设置密码。LAPS配置通过组策略进行管理,该组策略提供密码复杂性、密码长度、密码更改的本地帐户名称、密码更改频率等值。

简单点来说,很多管理员都喜欢用一个密码,那么我一个pth到域控那ntds拿下了,所以LAPS就为每台机器的本地管理员用户设置不同的随机的密码来解决这个问题,LAPS会把每台计算机的本地管理员账户存储在Active Directory中,然后通过计算机相应的属性进行保护,计算机可以在 Active Directory 中更新自己的密码数据,并且域管理员可以向授权用户或组授予读取访问权限。

LAPS的工作是如何的?

LAPS其实可以理解为一条GPO,它会隔一段时间去执行一些操作:

•检查密码是否过期•当密码过期或者说过期前生成一个新的密码•通过密码策略来验证新密码•向Active Directory发送密码,并且把计算机的属性发送过去一起存储•向Active Directory说明密码下次到期的时间,将属性发送过去一起存储•更改管理员的密码

0x03 安装LAPS

[自己去下载吧] https://www.microsoft.com/en-us/download/details.aspx?id=46899,

这里[参考]https://www.opss.cn/1377.html。

Ir9UIg.png

Ir9cZT.png

导入LAPS PowerShell 模块,扩展AD架构增加LAPS扩展

代码语言:javascript复制
Import-Module AdmPwd.PS    #导入LAPS PowerShell 模块Update-AdmPwdADSchema    #扩展AD架构增加LAPS扩展

Ir92oF.png

Ir9fJJ.png

Ir9osx.png

Ir9XJH.png

Ir9jWd.png

IrCCef.png

去掉这个

IrCiTS.png

创建一下OU,组和用户

IrCeln.png

把MSSQL添加到PWAdmin组

IrCMwT.png

然后创建一个计算机OU,把mssql添加进计算组这个OU,点击mssql然后右键移动到计算机即可。

查询“计算机”这个OU有哪些用户组有扩展权限,从下面可以看出一个system和域管理员组可以访问这个OU的扩展权限

代码语言:javascript复制
Find-AdmPwdExtendedrights -identity 计算机 | Format-Table

IrC1kF.png

设置“计算机”这个OU上的电脑拥有扩展属性权限,ms-Mcs-AdmPwd – 以明文形式存储密码;ms-Mcs-AdmPwdExpirationTime – 存储重置密码的时间。设置计算机这个OU的电脑对上面两个扩展拥有读写权限

代码语言:javascript复制
Set-AdmPwdComputerSelfPermission -OrgUnit 计算机

然后设置允许读取“计算机”这个OU上的管理员账号和密码的用户组。

代码语言:javascript复制
Set-AdmPwdReadPasswordPermission -OrgUnit 计算机 -AllowedPrincipals PWAdmin #设置PWAdmin用户组可以读取“计算机”这个OU里面的本地管理员账号和密码

然后设置允许重置“计算机”这个OU上的管理员账号和密码的用户组

代码语言:javascript复制
Set-AdmPwdResetPasswordPermission -OrgUnit 计算机 -AllowedPrincipals PWAdmin #设置PWAdmin用户组可以重置“计算机”这个OU里面的本地管理员账号和密码

然后配置GPO,让客户端通过GPO来更新本地管理员密码

创建LAPS的GPO然后把计算机链接到这个GPO

IrCJp9.png

IrCYlR.png

然后编辑

IrCt61.png

然后就是给客户端安装了,只需要第一个

IrCam6.png

IrCDte.png

然后重启该机器。再验证LAPS

PowerShell查看本地管理员密码,为本地计算机名称

代码语言:javascript复制
Get-AdmPwdPassword -ComputerName <computername>

IrCypd.png

IrCc6I.png

那既然这样子了,我每台机器密码都不一样了,你总pth不动了把,而且我更新密码的时候流量也是加密的。但是这个明文存储挺让我难受的。

0x04 检查是否安装了LAPS

检查DLL是否存在

代码语言:javascript复制
Get-ChildItem 'c:program filesLAPSCSEAdmpwd.dll'

检查DLL的数字签名

代码语言:javascript复制
Get-AuthenticodeSignature 'c:program filesLAPSCSEAdmpwd.dll'

也可以检查CN=ms-Mcs-AdmPwd,CN=Schema,CN=Configuration,DC=redteam,DC=local是否存在CN=ms-Mcs-AdmPwd

IrCgXt.png

0x05 获取LAPS值

IrCRnP.png

IrCOBV.png

IrPAHK.png

0 人点赞