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. 如果有智能卡登录功能的话,关闭该功能
原文地址:https://www.cnblogs.com/co10rway/p/8068241.html