很早之前做的了,今天整理看到了,正好腾到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. 如果有智能卡登录功能的话,关闭该功能

MS17-010复现的更多相关文章

  1. NSA Fuzzbunch分析与利用案例

    Shadow Brokers泄露出一份震惊世界的机密文档,其中包含了多个 Windows 远程漏洞利用工具.本文主要介绍了其中一款工具Fuzzbunch的分析与利用案例 1 整体目录介绍 解压EQGR ...

  2. 2018-2019-2 20165319 《网络对抗技术》 Exp5:MSF基础应用

    实验内容 metasploit中有六个模块分别是 渗透攻击模块(Exploit Modules) 辅助模块(Auxiliary Modules 攻击载荷(Payload Modules) 空字段模块( ...

  3. MS17-010 漏洞研究——免考课题 20155104 赵文昊

    免考实验与研究--MS17-010漏洞研究 研究内容 ·MS17-010漏洞的来源 ·MS17-010漏洞的攻击实例 ·MS17-010漏洞原理分析 ·MS17-010代码分析 写在前面:这次对一个漏 ...

  4. 【译】使用OpenVAS 9进行漏洞扫描

    本文译自Vulnerability Scanning with OpenVAS 9 part 1: Installation & Setup系列,本文将融合目前已经发表的四个部分. Part ...

  5. WinRAR 代码执行漏洞复现

    影响版本: WinRAR < 5.70 Beta 1 Bandizip    < = 6.2.0.0 好压(2345压缩)    < = 5.9.8.10907 360压缩    & ...

  6. 漏洞复现:MS17-010缓冲区溢出漏洞(永恒之蓝)

    MS17-010缓冲区溢出漏洞复现 攻击机:Kali Linux 靶机:Windows7和2008 1.打开攻击机Kali Linux,msf更新到最新版本(现有版本5.x),更新命令:apt-get ...

  7. 逆向与反汇编实战(一)--PEiD分析复现

    1.准备 简介: PEiD(PE Identifier)是一款著名的查壳工具,其功能强大,几乎可以侦测出所有的壳,其数量已超过470 种PE 文档 的加壳类型和签名. 整个过程需要测试文件成品:htt ...

  8. 51nod 算法马拉松18 B 非010串 矩阵快速幂

    非010串 基准时间限制:1 秒 空间限制:131072 KB 分值: 80 如果一个01字符串满足不存在010这样的子串,那么称它为非010串. 求长度为n的非010串的个数.(对1e9+7取模) ...

  9. 数据终端设备与无线通信模块之间串行通信链路复用协议(TS27.010)在嵌入式系统上的开发【转】

    转自:http://blog.csdn.net/hellolwl/article/details/6164449 目录(?)[-] 协议介绍 模块协议介绍 1            命令包格式 2   ...

  10. C++复现经典游戏——扫雷

    国庆小长假,当大家都去看人山人海的时候,我独自一人狂码代码.这两天想要实现的内容是Windows上的一个经典游戏——扫雷.相信90后和一些上班族对此并不陌生.然而,从win8开始,扫雷就不再是Wind ...

随机推荐

  1. .netCore2.0 程序集DI依赖注入

    传统的依赖注入确实简单,但是随着项目的扩展随之而来的问题又来了,因为传统的注入是单个类和接口注入的,加入项目的接口和类增加到了上百个的话,就需要在Startup.cs中复制注入上百次,虽然能解决问题, ...

  2. 删除trigger 禁用触发器 启用触发器 查看触发器

    删除trigger drop trigger 触发器名 on 在那个表上 禁用触发器 Alter Table 表名 disable trigger 触发器名 启用触发器 Alter Table 表名 ...

  3. golang学习之生成代码文档

    go doc 工具会从 Go 程序和包文件中提取顶级声明的首行注释以及每个对象的相关注释,并生成相关文档. 一般用法: go doc package 获取包的文档注释,例如:go doc fmt 会显 ...

  4. 记一次使用cmd执行java文件遇到的坑...包括“使用java命令运行class文件提示“错误:找不到或无法加载主类“的问题”

    今天写了一个java文件,类似聊天软件的东西.在eclipse里输入输出显得没感觉,于是乎就准备在cmd里输入和显示输出.如下图,我准备运行的是ChatDemo.class文件.路径是:D:\work ...

  5. 【原创】MapReduce实战(一)

    应用场景: 用户每天会在网站上产生各种各样的行为,比如浏览网页,下单等,这种行为会被网站记录下来,形成用户行为日志,并存储在hdfs上.格式如下: 17:03:35.012ᄑpageviewᄑ{&qu ...

  6. JavaWeb中Servlet和JSP的分工案例

    jsp和Servlet的分工:   * JSP:     > 作为请求发起页面,例如显示表单.超链接.     > 作为请求结束页面,例如显示数据.   * Servlet:     &g ...

  7. 日常捕获的野生知识 - javascript获取屏幕大小

    刚刚接触JavaScript,涉及到 document , window 的一些基本知识不是很了解,今天为了一个屏幕大小折腾了半天,幸好找到了很好的例子学习. 代码如下: <html> & ...

  8. Spring boot 使用WebAsyncTask处理异步任务

    上文介绍了基于 @Async 注解的 异步调用编程,本文将继续引入 Spring Boot 的 WebAsyncTask 进行更灵活异步任务处理,包括 异步回调,超时处理 和 异常处理. 正文 1. ...

  9. ie6 浏览器的bug

    1.IE6不支持连续类的交集选择器 1 #box.box.box1{ 2             width: 200px; 3             height: 200px; 4       ...

  10. WCF传输协议

    典型传输协议下的(1)HTTP和HTTPSHTTPS(安全超文本传输协议).它是为了在WWW上解决安全的数据传输而设计的.HTTS是采用了SSL的HTTP,SSL是一种加密协议.它们默认的端口号分别是 ...