@Author: Patrilic
@Time: 2020-01-08 14:11:00

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:协商

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

5fe17581a5f18b94e056372f40a143b3

type2: 质询

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

type3: 验证

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

0x02 ms08-068

1b4ac4b788cb76a6e198f0892b450ff5

这里需要看一个函数InitializeSecurityContextA

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

函数主体:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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的修复方案也就是利用这个参数进行的
29288cfa28f66aba44e0ab9f73a517f1

当我们存在两个主机进行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后会自动消失

利用流程:
6f8b3a6d4a3d8162d7f0038da8ea9c8d

a4cc7175c7336fa2ce112be224e599ba

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

0x04 漏洞复现

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

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

4b70a636a099df1df6edaa589a7b502a

4293fc2ae9929ce256a093d83abd5268

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

c7d00b80d814559146c3e304fad08fcd
0f90f41771ce981e210e0e55f5a0df6e

Poc提供两个上传路径
4274fad42facd59cf6937337a452c9d9

0x05 引用链接🔗

https://daiker.gitbook.io/windows-protocol/ntlm-pian/4
https://shenaniganslabs.io/2019/11/12/Ghost-Potato.html
https://support.microsoft.com/kb/957097/
http://davenport.sourceforge.net/ntlm.html