[内网攻防]域控权限维持

2021/04/15 07:40
阅读数 179


 在我们取得域控账号密码后,防止密码被改失去权限会使用隐蔽后门一系列手段来维持我们取得的域控权限。把恶意文件放在Windows启动项目录中是最简单的方式,但是隐蔽性差,较主流的域控权限维持方法通常有三种,分别是:①Golden Ticket、②Skeleton Key、③组策略(Group Policy)。

0x00 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.com\c$
P**ec.exe \\dc.pentestlab.com\ cmd.exe

          访问C盘目录文件,执行效果分别如下。

以域管理权限执行cmd.exe,执行效果分别如下。


0x01 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.com\c$

查看域控C盘目录文件执行效果如下图所示。

 如果想更改主密码mimikatz为其他密码,可以自行修改mimikatz源码中的Skeleton Key模块。

6.防御措施

  • 重启服务器,使得被注入到 lsass.exe 进程主密码失效。

  • 域管理员用户要设置强密码,确保恶意代码不会在域控制器中执行。

  • 在所有域用户中启用双因子认证,例如智能卡认证。

  • 启动应用程序白名单(例如 AppLocker),以限制 mimikatz 在域控制器中的运行。

0x02 Group Policy

       组策略(Group Policy)是微软Windows NT家族操作系统的一个特性,它可以控制用户帐户和计算机帐户的工作环境。组策略提供了操作系统、应用程序和活动目录中用户设置的集中化管理和配置。组策略的其中一个版本名为本地组策略(缩写“LGPO”或“LocalGPO”),这可以在独立且非的计算机上管理组策略对象。

      域组策略和执行脚本存放在域控制器的SYSVOL目录下所有域用户均可访问它们,但只有高权限用户有修改权限。在登录域时,域账号会查询并执行属于自己的域组策略及执行脚本。在域组策略中,我们可以添加计划任务等让域内主机执行目标文件。

       按照以上的思路,如果低权限用户具备SYSVOL目录的修改权限,就可以进行域控制器的权限维持。
       接下来,我们对组策略后门进行测试,具体步骤如下。

1.域共享文件

           查看域控制器共享文件,此时执行如下命令:

whoami
net view \\dc.pentestlab.com
dir \\dc.pentestlab.com\SYSVOL

           查看域控制器共享文件执行效果如下图所示。


2.修改权限

           在域控制器的SYSVOL目录下添加zhangsan用户的控制权限,添加控制权限如下图所示。


3.验证成功

           向域控制器的SYSVOL目录内写人文件并进行文件目录和类型的查看,此时执行的命令如下:

echo "demo" > \\dc.pentestlab.com\SYSVOL\alice.txt
dir \\dc.pentestlab.com\SYSVOL\
type \\dc.pentestlab.com\SYSVOL\alice.txt

           写入并查看文件目录和类型执行效果如下图所示。

           到这一步,已证明普通用户zhangsan拥有了对域控制器SYSVOL目录读写的权限。之后,我们可以修改组策略,实现隐蔽后门。

4.组合拳MS15-011

        对于已加入域的基于 Windows 的计算机上的组策略服务会自动尝试从以 \<域>\SYSVOL  开头的通用命名约定下载更新后的安全策略。它会运行被配置为在适用的组策略对象 (GPO) 中运行的所有脚本。这些脚本通常存储在以  \<域>\NETLOGON 开头的 UNC 路径中。如果应用程序发出的 I/O 请求中包含通用命名约定  (UNC) 路径,则这些请求会传递到多 UNC 提供程序 (MUP)。MUP 会选择一个 UNC 提供程序来处理此 I/O  请求,并将此请求转发给选定的 UNC 提供程序。选定的 UNC 提供程序会处理此请求,并将结果传递回发出此请求的应用程序。

        漏洞作用原理:如果恶意方可以欺骗、篡改或重定向 UNC 提供程序与目标服务器之间的通信,则恶意方可能可以让组策略执行具有恶意企图的程序或脚本,而不是系统管理员选择的脚本,亦或者可以同时执行这两种脚本。

        具体地,利用MS15-011漏洞进行权限维持。Windows域成员机器每间隔 90min+random()*30min 就会向域控制器请求更新组策略,并以GPT.ini文件中的版本信息来判断是否正在使用最新的域策略。

        如果GPT.ini的版本信息较低,城成员机器会请求GptTmpl.inf文件(该文件位于“组策略”文件夹下的 SYSVOL文件夹中:/SYSVOL/domain/Policies/{31B2F340-016D-11D2-945F-00C04FB984F9}/MACHINE/Microsoft/Windows NT/SecEdit/)的策略进行更新。为了利用该漏洞,我们需要修改Version的值,修改Version的值如下图所示。

        我们将利用默认域组策略GUID:{31B2F340-016D-11D2-945F-00C04FB984F9}进行权限维持。域策略中的文件GptTmplinf(目录为 C:WindowsSYSVOLdomainPolicies(31B2F340-016D-11D2-945F-00C04FB984F9}\MACHINE\Microsoft\Windows NT\SecEdit\GptTmpl.inf)用于存储组策略的配置,如密码复杂度是否启用、密码最长期限、最短密码长度等,具体如何操作GptTmpl.inf如下图所示。

        其中有一项是注册表,我们可以把注册表项已有的配置信息替换为指定的恶意配置信息,等域成员机器更新组策略时,组策略文件就会被下载到域成员的机器中执行并修改注册表的内容,执行指定的恶意程序。


 我们需要修改[Registry Values]项为:

MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\cmd.exe\Debugger=1,C:\Windows\System32\calc.exe

修改内容情景如下图所示。

这段攻击代码用到了映像劫持(Image File Execution Options)技术。简单来说,就是打开A程序的同时会执行B程序。当域成员机器更新完组策略后,会运行cmd.exe和calc.exe程序。你可以根据需求对cmd.exe和calc.exe程序进行修改。

 未更新组策略时的注册表项如下图所示。

已更新组策略后的注册表项如下图所示。





往期精彩


登陆页面的检测及渗透

渗透实战篇(一)

渗透测试信息收集的方法

常见Web中间件漏洞利用及修复方法

内网渗透 | 流量转发场景测试

Waf从入门到Bypass

实战渗透-看我如何拿下学校的大屏幕

技术篇:bulldog水平垂直越权+命令执行+提权

渗透工具实战技巧大合集 | 先收藏点赞再转发一气呵成


感兴趣的可以点个关注!!!

关注「安全先师」
把握前沿安全脉搏



本文分享自微信公众号 - 安全先师(gh_d61f62dd440d)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部