当前位置: 首页 > news >正文

横向移动(中)

横向移动(中)

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 方法 地址 监听器名字

image-20250716214641624

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

image-20250428194921128

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认证

http://www.lryc.cn/news/590742.html

相关文章:

  • 使用YOLOv11实现水果类别检测:从数据到模型训练的全过程
  • 每日钉钉API探索:getAuthCode实现免登授权
  • 测试工作中的质量门禁管理
  • Maven入门指南:生命周期、阶段和执行顺序详解
  • 基于FPGA的IIC控制EEPROM读写(1)
  • 项目流程管理系统使用建议:推荐13款
  • 华为OD机试_2025 B卷_完美走位(Python,100分)(附详细解题思路)
  • ES组合使用must与should时的注意事项
  • 【LeetCode刷题指南特别篇】--移除链表元素,调试技巧,链表分割
  • Linux4:线程
  • TRAE + Milvus MCP:用自然语言 0 门槛玩转向量数据库
  • OpenVela之 Arch Timer 驱动框架使用指南
  • UltraISO编辑ISO文件
  • Karate(Java)接口自动化测试框架
  • 二刷 黑马点评 分布式锁-redission
  • 基于Canal实现MySQL数据库数据同步
  • Alamofire 网络请求全流解析,通俗易懂
  • ai 编程工具,简单总结
  • Python脚本批量修复文件时间戳,根据文件名或拍摄日期
  • 达梦数据库CASE_SENSITIVE大小写敏感差异比较
  • 字段级权限控制场景中,RBAC与ABAC的性能差异
  • 【机器学习【6】】数据理解:数据导入、数据审查与数据可视化方法论
  • [NOIP][C++] 树的重心
  • 嵌入式单片机开发实战指南: 从RISC-V到TinyML全栈技术
  • 筑牢网络安全防线:DDoS/CC 攻击全链路防护技术解析
  • 权限隔离设计中实现字段级别的动态隐藏
  • 工作第一步建立连接——ssh
  • 【JavaScript】从事件流到事件委托
  • 再探多线程Ⅰ--- (创建思路+核心方法+代码样例)
  • [Mysql] Connector / C++ 使用