域渗透就是基于windows域环境的渗透,而域渗透涉及到的技术,如哈希传递(PTH)票据传递(PTT)委派攻击等,都是基于域环境下的认证机制来实现的,这也是为什么要了解Windows认证机制的原因之一
Windows的认证包括三个部分,用户直接操作计算机登陆账户(本地认证),远程连接到工作组中的某个设备(网络认证),登陆到域环境中的某个设备(域认证)
参考:zresx
参考:3gstudent
本地认证十分简单:用户输入密码,系统收到密码后将用户输入的密码计算成NTLM Hash,然后与sam数据库(%SystemRoot%\system32\config\sam)中该用户的哈希比对,匹配则登陆成功,不匹配则登陆失败
NTLM哈希是一种单向哈希算法,Windows将用户的密码计算成NTLM哈希之后才存储在电脑中
大致的运算流程为:
用户密码->HEX编码->Unicode编码->MD4
本地认证中用来处理用户输入密码的进程即lsass.exe,密码会在这个进程中明文保存,供该进程将密码计算成NTLM Hash与sam进行比对
在渗透测试中,通常可从Windows系统中的SAM文件和域控的NTDS.dit文件中获得所有用户的hash,通过Mimikatz读取lsass.exe进程能获得已登录用户的NTLM hash
网络认证即在工作组环境下远程登陆另一台电脑所采用的认证机制
Net NTLM的认证过程分为三步,也叫挑战响应机制:
协商:双方确定使用的协议版本,在NTLM认证中,NTLM响应分为NTLM v1,NTLMv2,NTLM session v2三种协议,不同协议使用不同格式的Challenge和加密算法
所以也就存在不同协议的Net-NTLM hash,即Net-NTLM v1 hash,Net-NTLM v2 hash
质询:挑战(Chalenge)/响应(Response)认证机制的核心
1.客户端向服务器端发送用户信息(用户名)请求
2.服务器接受到请求后,判断本地用户列表是否存在客户端发送的用户名,如果没有返回认证失败,如果有,生成一个16位的随机数,被称之为“Challenge”, 然后使用登录用户名对应的NTLM Hash加密Challenge(16位随机字符), 生成Challenge1保存在内存中。同时,生成Challenge1后,将Challenge(16位随机字符)发送给客户端。
3.客户端接受到Challenge后,使用自己提供的账户的密码转换成对应的NTLM Hash,然后使用这个NTLM Hash加密Challenge生成Response,然后将Response发送至服务器端。
验证:在质询完成后,验证结果,是认证的最后一步。
服务端收到客户端发送的Response后,与之前保存在内存中的Challenge比较,如果相等认证通过
其中,经过NTLM Hash加密Challenge的结果在网络协议中称之为Net NTLM Hash(不能直接用来进行哈希传递攻击,但可以通过暴力破解来获取明文密码)
> net use \\192.168.217.129 /u:administrator hongrisec@2020
The command completed successfully.
抓包发现前4个包是协商协议版本,从smb转为smbv2
本地发送质询包,远程机器响应携带Ntlm Server Challenge为
8f69a97378430a53
0822a40326fd8eab
fafc5895fbeff4fb303acf5c74b1424d01010000000000006727da877d95d6010822a40326fd8eab000000000200060047004f00440001000800530054005500310004000e0067006f0064002e006f00720067000300180073007400750031002e0067006f0064002e006f007200670005000e0067006f0064002e006f0072006700070008006727da877d95d60106000400020000000800300030000000000000000100000000200000bebc059df5e1e64f315030ef88a55e04436ab8b916550a10918f2f854dc9144b0a001000000000000000000000000000000000000900280063006900660073002f003100390032002e003100360038002e003200310037002e003100320039000000000000000000
下面,使用Hashcat对该Net-NTLM hash进行破解
NTLMv2的格式为:
username::domain:challenge:HMAC-MD5:blob
注:
challenge为NTLM Server Challenge,domian由数据包内容获得(IP或者机器名)
HMAC-MD5对应数据包中的NTProofStr
构造的数据如下:
administrator::god.org:8f69a97378430a53:fafc5895fbeff4fb303acf5c74b1424d:01010000000000006727da877d95d6010822a40326fd8eab000000000200060047004f00440001000800530054005500310004000e0067006f0064002e006f00720067000300180073007400750031002e0067006f0064002e006f007200670005000e0067006f0064002e006f0072006700070008006727da877d95d60106000400020000000800300030000000000000000100000000200000bebc059df5e1e64f315030ef88a55e04436ab8b916550a10918f2f854dc9144b0a001000000000000000000000000000000000000900280063006900660073002f003100390032002e003100360038002e003200310037002e003100320039000000000000000000
新建字典添加hongrisec@2020
Hashcat参数如下:
hashcat -m 5600 administrator::god.org:8f69a97378430a53:fafc5895fbeff4fb303acf5c74b1424d:01010000000000006727da877d95d6010822a40326fd8eab000000000200060047004f00440001000800530054005500310004000e0067006f0064002e006f00720067000300180073007400750031002e0067006f0064002e006f007200670005000e0067006f0064002e006f0072006700070008006727da877d95d60106000400020000000800300030000000000000000100000000200000bebc059df5e1e64f315030ef88a55e04436ab8b916550a10918f2f854dc9144b0a001000000000000000000000000000000000000900280063006900660073002f003100390032002e003100360038002e003200310037002e003100320039000000000000000000 password.list -o result.txt --force
说明:
-m: hash-type,5600对应NetNTLMv2,详细参数可查表:https://hashcat.net/wiki/doku.php?
-o: 输出文件 字典文件为password.list
–force代表强制执行,测试系统不支持Intel OpenCL
成功破解出登录的明文密码,输出如下图
工作组环境和域环境下Net NTLM认证过程因为有DC(域控制器)的参与流程略有差异,不过不影响进行哈希传递攻击