漏洞信息
漏洞名称:Kerberos域用户提权漏洞
漏洞编号:MS14-068,CVE-2014-6324
漏洞原理:
Kerberos协议是一种基于第三方可信主机的计算机网络协议,允许两个实体之间在非安全网络环境(可能被窃听、被重放攻击)下,以一种安全的方式证明自己的身份。
用户在向Kerberos密钥分发中心(KDC)申请TGT(由票据授权服务产生的身份凭证)时,可以伪造自己的Kerberos票据。如果票据声明自己有域管理员权限,而KDC在处理该票据时未验证票据的签名,那么返回给用户的TGT使得普通域用户拥有了域管理员权限。
该用户可以将TGT发送到KDC,KDC的票据授权服务(TGS)在验证了TGT后,将服务票据发送给该用户,而该用户拥有该服务的权限,导致活动目录整体权限控制受到影响,攻击者可以访问域内的资源,且可以将域内任意用户权限提升至域管理级别。
受影响的服务器:Windows Server 2003、Windows Server 2008、Windows Server 2008 R2、Windows Server 2012和Windows Server 2012 R2
漏洞利用
域控Windows Server 2008 R2:test1.test.com
普通域用户Windows7:域账号xiaoming/asdf1234@
本地账户:test/password
Windows7加入域参考https://jingyan.baidu.com/article/908080223b8f1afd91c80f30.html
利用条件:攻击者获取了域内任何一台计算机的shell权限,且知道任意域用户的用户名、SID、密码,即可获取域管理员权限。
利用工具:PyKEY,使用它可以生成一张高权限的服务票据,并通过mimikatz将服务票据注入内存。下载地址:https://github.com/mubix/pykek
ms14-068.py是MS14-068的漏洞利用脚本。参数说明:
-u:用户名@域名;
-s:用户SID(security identifiers,安全标识符,是标识用户、组和计算机账户的唯一号码);
-d:域控制器地址;
-p:明文密码;
--rc4:在没有名为密码的情况下,通过NTLM Hash登录。
查看域控制器的补丁安装情况
首先在域控检测是否有MS14-068漏洞,通过systeminfo命令查看是否打补丁来判断:
微软针对MS14-068漏洞提供的补丁为KB3011780,可以看出域控机器没有安装补丁。
查看用户的SID
Windows7用普通域用户xiaoming登录,查看SID:
SID:S-1-5-21-3081188285-3032033982-3993785026-1105
还可以获取域内所有用户的SID:
查看注入前的权限
访问域控的C盘共享:
提示访问被拒绝。
生成高权限票据
利用exp生成高权限票据:
python ms14-068.py -u 域成员@域名 -s 域成员SID -d 域控制器地址 -p 域成员密码
会在当前路径下生成一个名为TGT_域成员@域名.ccache的票据文件:
清除内存中所有票据
为了使我们生成的票据起作用,需要将内存中已有的Kerberos票据清除,清除工具使用mimikatz,下载地址:https://github.com/gentilkiwi/mimikatz/releases
将高权限票据注入内存
将票据文件复制到mimikatz目录下,使用mimikatz将票据注入内存:
kerberos::ptc “票据文件”
显示Injecting ticket:OK,表示注入成功。
权限验证
再次使用dir列出域控制器C盘的内容:
漏洞防范
1、 开启Windows update功能,进行自动更新
2、 对域内账号进行控制,禁止使用弱口令、定期修改密码等
3、 手动下载补丁包进行漏洞修复:https://technet.microsoft.com/library/security/ms14-068
参考
1、 https://www.freebuf.com/vuls/56081.html
2、 https://mp.weixin.qq.com/s/T4HU6k10m4x5CLNuLuGrfQ