域内渗透之HASH传递(PtH)

域内渗透之HASH传递(PtH)

1.概念

NTLM hash

NTLM 这一名词是由以下单词的首字母拼凑而成的 :

NT:New technologies ( windows 的新技术 )

LAN: 本地局域网 ( Local area network )

M: 管理者 ( Manager )

NTLM hash是指Windows系统下Security Account Manager中保存的用户密码hash

该hash的生成方法:

  1. 将明文口令转换成十六进制的格式
  2. 转换成Unicode格式,即在每个字节之后添加0x00
  3. 对Unicode字符串作MD4加密,生成32位的十六进制数字串

在渗透测试中,通常可从Windows系统中的SAM文件和域控的NTDS.dit文件中获得所有用户的hash,通过Mimikatz读取lsass.exe进程能获得已登录用户的NTLM hash

Net-NTLM hash

NTLM认证采用质询/应答(Challenge/Response)的消息交换模式,流程如下:

  1. 客户端向服务器发送一个请求,请求中包含明文的登录用户名。服务器会提前存储登录用户名和对应的密码hash
  2. 服务器接收到请求后,生成一个16位的随机数(这个随机数被称为Challenge),明文发送回客户端。使用存储的登录用户密码hash加密Challenge,获得Challenge1
  3. 客户端接收到Challenge后,使用登录用户的密码hash对Challenge加密,获得Challenge2(这个结果被称为response),将response发送给服务器
  4. 服务器接收客户端加密后的response,比较Challenge1和response,如果相同,验证成功

在以上流程中,登录用户的密码hash即NTLM hash,response中包含Net-NTLM hash

在NTLM认证中,NTLM响应分为NTLM v1,NTLMv2,NTLM session v2三种协议,不同协议使用不同格式的Challenge和加密算法

所以也就存在不同协议的Net-NTLM hash,即Net-NTLM v1 hash,Net-NTLM v2 hash

从攻击角度来看

  • 可以利用NTLM哈希值进行“哈希传递”攻击
  • 无法利用Net-NTLM哈希值来进行“哈希传递”攻击

2.NTLM和SMB的关系

SMB的认证可以基于NTLM协议或者kerberos协议,前者使用了hash,后者使用了ticket,是构成SMB的PtH和PtT攻击的基础。(PtH和PtT攻击https://www.cnblogs.com/bmjoker/p/10355979.html)比如我们域内渗透中经常提到的黄金票据、白银票据就是基于Kerberos协议的PtT攻击  

NTLM 并没有定义它所依赖的传输层协议。NTLM 消息的传输完全依赖于使用 NTLM 的上层协议来决定,可以是SMB,也可以是TCP,亦或HTTP。

3.跨协议的 NTLM-Relay

前面说过,NTLM 的上层协议基本可以是任何协议(如果上层是基于UDP 的协议的话,可能会不一样),所以这引出了跨协议的 NTLM-Relay 技巧。无论 NTLM 的上层协议是什么,其携带的 NTLM 的三条消息都是由 NTLM SSP 生成的,所以上层协议在 relay 的过程中,是可以被替换掉的。比如从 http relay 至 smb,从 smb relay 至 ldap/mssql 等等。我们只需要将一个协议中的 NTLM 消息取出来,然后原样不动的地放入另一个协议,就完成了上层协议转换的过程。

4.SMB RELAY

mitm Attacker通过不停的转换机器角色来同时欺骗Smb server和Client两端,可以拿着Client的凭据去访问Smb Server中的资源,如果这个凭据的用户权限在smb server中很大,大到可以随意操作smb server,此时凭据再一旦认证成功,随后再立即执行一段shellcode,那Smb server基本也就沦陷了。

利用1

项目地址:https://github.com/SecureAuthCorp/impacket

  1. python smbrelayx.py -h 192.168.1.5 -c whoami
  2. 当目标内网有机器访问恶意smb服务器后,便会抓取对应机器的net-ntlm v2 hash,之后再通过smbrelayx.py脚本拿着这段抓到的hash去尝试重放访问目标机器。
1
net use \\192.168.1.100\c$ /user:"administrator@chinahope.com" "123456"

3

4.同时也可通过这个方法上传可执行文件。如msf或CS生成的exe文件,从而获取便于控制的session或beacon。

1
python smbrelayx.py -h 192.168.22.162 -e test.exe

利用2

  1. 使用CS中beacon导出NTML hash
1
hashdump

2.在登陆令牌中会自动存入刚刚导出的hash,然后使用对应的hash进行登陆。如在192.168.1.3中导出的hash对192.168.1.5进行登陆。当然,前提是在192.168.1.3中到出的用户hash具有对192.168.1.5登陆的权限。