• MS17-010复现


    很早之前做的了,今天整理看到了,正好腾到blog上。

    ########################分割线##############################

    MS-17-010

    攻击者向 Microsoft 服务器消息块 1.0 (SMBv1) 服务器发送经特殊设计的消息,则其中最严重的漏洞可能允许远程代码执行。

    SMB介绍

    SMB协议是基于TCP-NETBIOS下的,一般端口使用为139,445。NETBIOS协议是一种在局域网上的程序可以使用的应用程序编程接口(API),为程序提供了请求低级服务的统一的命令集,作用是为了给局域网提供网络以及其他特殊功能。Microsoft就使用NetBIOS实现了一个网络文件/打印服务系统,这个系统基于NetBIOS设定了一套文件共享协议,Microsoft称之为SMB(Server Message Block)协议。

    特点总结:

    1. 与操作系统一起开发出来,包含很多Windows中的概念
    2. 推举主browser和备份browser,维护网络中的所有资源列表
    3. 实现文件和打印机的共享

    漏洞原理

    srv.sys在处理SrvOs2FeaListSizeToNt的时候逻辑不正确导致越界拷贝。

    相关代码:

    unsigned int __fastcall SrvOs2FeaListSizeToNt(int pOs2Fea)

    {

      unsigned int v1; // edi@1

      int Length; // ebx@1

      int pBody; // esi@1

      unsigned int v4; // ebx@1

      int v5; // ecx@3

      int v8; // [sp+10h] [bp-8h]@3

      unsigned int v9; // [sp+14h] [bp-4h]@1

      v1 = 0;

      Length = *(_DWORD *)pOs2Fea;

      pBody = pOs2Fea + 4;

      v9 = 0;

      v4 = pOs2Fea + Length;

      while ( pBody < v4 )

      {

        if ( pBody + 4 >= v4

          || (v5 = *(_BYTE *)(pBody + 1) + *(_WORD *)(pBody + 2),

              v8 = *(_BYTE *)(pBody + 1) + *(_WORD *)(pBody + 2),

              v5 + pBody + 5 > v4) )

        {

          *(_WORD *)pOs2Fea = pBody - pOs2Fea; // 这里修改了Os2Fea的Length

    // 初始值是0x10000,最终变成了0x1ff5d

          return v1;

        }

        if ( RtlULongAdd(v1, (v5 + 0xC) & 0xFFFFFFFC, &v9) < 0 )

          return 0;

        v1 = v9;

        pBody += v8 + 5;

      }

      return v1;

    }

    分析:

    首先SrvOs2FeaListToNt首先调用SrvOs2FeaListSizeToNt计算pNtFea的大小。这里SrvOs2FeaListSizeToNt函数会修改原始的pOs2Fea中的Length大小,然后以计算出来的Length来分配pNtFea。最后调用SrvOs2FeaToNt来实现转换。发现判断的逻辑存在问题

    1. 转换完成后,增加pOs2FeaBody然后比较,这样会造成数据类型不正确的逻辑问题,正确的逻辑顺序是先判断后转换。
    2. 由于SrvOs2FeaListSizeToNt中改变了pOs2Fea的length的值,这里使用变大后的值做比较,会出现越界的问题。

    漏洞复现

    攻击机:kali Linux 192.168.11.222

    目标机:Windows 2008 R2 192.168.11.150

    首先,需要下载metasploit使用的smb攻击模块rb文件到相关目录中,由于该模块需要使用Ruby中的一个插件Ruby_smb,也需要使用gem进行下载安装

     

    启动msfconsole,设置目标机、payload、攻击机、目标操作系统,进行exploit

     

    获取meterpreter

     

    之后可以进行截取屏幕、获取摄像头信息和getshell等操作

     

    漏洞修复

    1. 更新官方补丁
    2. 限制137、139、445等端口及源IP
    3. 如果有智能卡登录功能的话,关闭该功能
  • 相关阅读:
    spring-mybatis 事物配置 execution表达式含义
    微信内置浏览器缓存导致链接无法多次访问
    linux学习记录-------解决复制的虚拟机,无法同时上网
    mybatis-select-insert-update-delete
    tomcat 端口被占用
    EFCodeFirst安装失败(包括EntityFrameWork安装),这样解决。。。
    数组的一些操作
    《Java技术》第三次作业--面向对象——继承、抽象类、接口
    java第二次作业
    《Java技术》第一次作业
  • 原文地址:https://www.cnblogs.com/co10rway/p/8068241.html
Copyright © 2020-2023  润新知