Ghost Potato 复现(Cve-2019-1384)

[toc]

0x00 前言

11月份的时候shenaniganslabs发了博文,讲了关于CVE-2019-1384的漏洞详情
https://shenaniganslabs.io/2019/11/12/Ghost-Potato.html

这同样是一个Potato系列的漏洞,简单来说就是绕过了MS08-068的修补方案,实现本机的NTLM反射,达到提权的目的。

0x01 NTLM 认证过程

要搞清楚NTLM反射,首先来回顾一下NTLM的认证过程。

NTLM认证基于C/S验证机制,由三种消息组成: 协商,质询,验证

type1:协商

主要是客户端向服务器客户端支持和服务器请求的功能列表

type2: 质询

服务器向客户端发送服务器支持的功能列表,并且同时发送一个16位的Challenge, 并且同时发送服务器的各类信息于Target Info字段

type3: 验证

客户端收到Challenge后,使用自身的NTLM Hash加密Challenge得到Response,将Response发送给服务端.然后服务端在本地调用用户NTLM hash加密Challenge后,与Response进行对比。

0x02 ms08-068

这里需要看一个函数InitializeSecurityContextA

这个函数属于sspi.h, 关于SSP的作用就不再赘述了

函数主体:

SECURITY_STATUS SEC_ENTRY InitializeSecurityContextA(
  PCredHandle    phCredential,
  PCtxtHandle    phContext,
  SEC_CHAR       *pszTargetName,
  unsigned long  fContextReq,
  unsigned long  Reserved1,
  unsigned long  TargetDataRep,
  PSecBufferDesc pInput,
  unsigned long  Reserved2,
  PCtxtHandle    phNewContext,
  PSecBufferDesc pOutput,
  unsigned long  *pfContextAttr,
  PTimeStamp     ptsExpiry
);

可以看到存在一个pszTargetName参数, ms08-068的修复方案也就是利用这个参数进行的

当我们存在两个主机进行SMB通信时,A向B发送了type1请求,同时他将自己的pszTargetName设置为cifs/B, 当拿到type2的challenge时,向lsass进程中写入缓存 -> (Challenge,cifs/B)。 而后A向B发送type3,B收到response后,会到lsass中去寻找是否存在缓存(Challenge,cifs/B), 因为只有A主机写入了缓存,所以如果A和B不是同一个主机,那么肯定B主机不存在缓存,认证成功。

0x03 cve-2019-1384

这个漏洞主要是绕过了缓存的限制,因为lsass中的缓存(Challenge,cifs/B),在300s后会自动消失

利用流程:

经过315s后,再发送type3, 那么到时候lsass中的缓存已经消除,可以成功认证本机器

0x04 漏洞复现

作者原文中提供的Poc: impacket-ghostpotato

由于他给的Poc只支持HTTP协议,所以我们使用IE浏览器进行访问即可
配合responder的LLMNR投毒
responder -I eth0 --lm

上传rat文件到WIndows启动目录,用户下次登录时自启动



当然,如果直接执行命令是system权限的

Poc提供两个上传路径

0x05 WebDav

在复现WebDav的攻击形式时,我发现了一些以前不知道的东西,因为原作者是通过WebDav进行攻击的,所以给俺也来一个。

参考这篇文章 -> https://www.n00py.io/2019/06/understanding-unc-paths-smb-and-webdav/
我们知道了Windows在使用UNC路径的时候,会先通过SMB协议进行访问,如果没有成功,会切换到WebDav进行访问

没什么问题,但是之前通过Windows Server 2008进行测试时,我发现只会通过SMB协议,而不会通过WebDav

这个问题困扰了我蛮久的,最后查阅了一些资料后,我觉得是因为一个注册表项WebClient

位于\HKEY_LOCAL_MACHINE\SYSTEM\CureentControlSet\services\WebClient

WebClient提供了WebDav的Service,也就是说进行Webdav的连接离不开WebClient组件,而WindowsServer2008默认是没有这个东西的,所以也就不行了

利用WebDav进行SMB反射

0x06 引用链接

点击收藏 | 0 关注 | 2
登录 后跟帖