20145330 《网络对抗》 Eternalblue(MS17-010)漏洞利用工具实现Win 7系统入侵与S2-045漏洞的利用及修复

加分项目:

PC平台逆向破解:注入shellcode 和 Return-to-libc攻击实验

http://www.cnblogs.com/20145330swx/p/6514359.html

摘要

本次免考项目分为两个模块:Eternalblue(MS17-010)漏洞利用工具实现Win 7系统入侵与S2-045漏洞的利用及修复

Eternalblue(MS17-010)漏洞研究内容:

研究背景

代码模块介绍

漏洞代码分析

复现工具说明

测试环境准备

复现详细步骤

  • FuzzBunch环境设置

  • 用EternalBlue攻击入侵Windows 7

  • 使用Empire生成恶意DLL文件(Payload)/使用msfvenom生成DLL

  • 使用DoublePulsar向目标系统中注入Payload文件

漏洞防范方法

Apache Struts2(S2-045)漏洞研究内容:

漏洞介绍

漏洞范围分布图

影响范围

不受影响的版本

快速检测方式

漏洞危害

漏洞复现

临时修复方案

主动防御方案

MS17-010

研究背景

影子经纪人(Shadow Brokers)最近陆续曝光的NSA网络武器令人震惊,尽管这些工具是否出自国家级别黑客团队之手尚不清楚,但至少存在一个可以说明问题的事实:这些漏洞利用工具都能有效运行,且具有一定程度的威胁杀伤力。在此,我用NSA的两个大杀器演示对Win 7系统进行漏洞利用和入侵控制的过程复现。

MS17-010漏洞是指攻击者利用该漏洞,向用户机的445端口发送精心设计的网络数据包文,实现远程代码执行。

移植MS17-010漏洞利用代码模块介绍

Metasploit集合了大量的系统漏洞利用代码,但并不是拥有所有的漏洞代码,所以Metasploit有一个非常强大的功能,它允许使用者开发自己的漏洞模块,MS17-010的漏洞利用模块Metasploit虽然还没有集成,但是网络上已经有相应的渗透模块了,这些模块可能是用各种语言编写的,比如perl、python等,Metasploit支持各种不同语言编写的模块移植到其框架中,通过这种机制可以将各种现存的模块软件移植成为与Metasploit兼容的渗透模块。

MS17-010漏洞代码分析

http://bobao.360.cn/learning/detail/3738.html

复现工具说明、漏洞介绍

实现复现需要用到两个工具:

  • 一个为针对微软才刚刚修复的MS17-010漏洞后门利用程序–EternalBlue该漏洞利用程序影响Windows 7和Windows Server 2008大部分版本系统,无需认证权限就能实现系统入侵控制;
  • 另一个为可以远程向目标控制系统注入恶意DLL或Payload程序的插件工具DOUBLEPULSAR。

综合利用这两个工具,入侵攻成功之后,我们可以实现对目标系统执行Empire/Meterpreter反弹连接控制。

在此过程中,我们还需要用到NSA使用的类似Metasploit的漏洞利用代码攻击框架FUZZBUNCH。

当然,我们首先还得把Shadow Brokers泄露的工具下载到系统中来。( https://github.com/misterch0c/shadowbroker

  • 泄露文件说明:

Windows文件夹:

其中Windows目录下的黑客工具包含了IIS 6.0远程漏洞的利用;SMB1的重量级利用,可以用来攻击开放了445端口的Windows系统并且提权;RDP服务远程漏洞的利用,可以攻击开放了3389端口的Windows机器等等。开放了135,445等端口的Windows服务器有很大概率受到攻击。

其中ETERNALBLUE是一个0day RCE漏洞利用,利用SMBv1和SMBv2漏洞(MS17-010),影响至最新的Windows 2008 R2 SERVER VIA SMB和NBT。其漏洞产生的原因是srv.sys文件在处理SrvOs2FeaListSizeToNt函数的时候逻辑不正确导致越界拷贝。

测试环境准备

网络演示拓扑:

攻击机1winXP(x86,32bit):需要安装Python 2.6程序和PyWin32 v2.12,调试运行攻击框架FUZZBUNCH;

IP:192.168.124.130

攻击机2 kali2.0 64bit:需要用到Empire和Metasploit相关工具,或者msf;

IP:192.168.124.132

靶机 win7(64bit):不需要做其它额外配置,只需要系统开启。

IP:192.168.124.133

FuzzBunch环境设置

首先需要在攻击机1 WIN XP系统中安装:

在Kali Linux上安装EmpireFramework非常简单,只需运行./setup/install.sh脚本即可一键安装

所有环境安装配置好之后,我们在FUZZBUNCH目录下以CMD形式执行python fb.py命令,将会提示未找到“Listening post”错误,

原因在于指定运行配置属性为空,所以,我们可以用编辑器把fb.py源码的第72行“Listening post”相关部分注释掉:

另外,在相同目录下找到Fuzzbunch.xml文件,用我们本地系统相关路径把其中的第19行和第24行路径进行覆盖,如下图所示:

FUZZBUNCH可以正常运行:

FUZZBUNCH的初始化过程中,将会需要输入攻击目标IP和回连控制IP,在这里我分别输入靶机系统的控制系统1(xp)的IP地址,如下图所示:

点击“enter”继续,会提示输入工程名,在此,我们用”eternal1″,在该工程名目录下将会生成一些日志记录文件:

用EternalBlue攻击入侵Windows 7

首先,我们在FUZZBUNCH终端上用命令“use EternalBlue”选择使用EternalBlue作为漏洞利用工具:

使用很多默认配置参数,但是要注意目标操作系统是x86还是x64,以及 Mode ::Delivery mechanism的选择为1) FB。

在一直默认下第一次尝试失败:

我发现靶机win7的电脑管家没有关,关闭后再次尝试成功:

使用Empire生成恶意DLL文件(Payload)/使用msfvenom生成DLL

由于上一步骤中靶机系统已经被EternalBlue成功植入后门,所以在该步骤中,我们将使用Empire生成恶意DLL文件(Payload),并用DOUBLEPULSAR实现远程注入。

攻击机2 kali需要安装EmpireFramework,
在Kali Linux上,我们需要安装可从Github获取的Empire框架:
Empire framework:https://github.com/EmpireProject/Empire

在Kali Linux上安装EmpireFramework非常简单,只需运行./setup/install.sh脚本即可一键安装,然后运行./empire就可以启动Empire。

使用Empire进行Payload创建:

很心碎,别人的empire就直接创建成功了,而我的连set都不识别?!可能安装了个假empire吧。。。

所以我又选择了第二种方法:使用msfvenom生成DLL(可以使用主动连接TCP_Bind或者反弹shell)

攻击机2 kali的msfvenom 生成一下dll 这里使用的是reverse_tcp的paylaod(反弹shell)

把生成的s.dll(home/YL路径下)传到攻击机1win xp上去,放在windows目录下

开启msfconsole 下面的payload要和上面msfvenom的payload对应起来

使用DoublePulsar向目标系统中注入Payload文件

回到XP系统中,在FUZZBUNCH终端使用“use DoublePulsar”命令运行DoublePulsar

接着DoublePulsar会为我们显示相关的目标参数,如果你的攻击目标为不同的架构,则需要选择对应的系统架构(本靶机为64bit)。其他变量我们只需保持默认不变即可,直到功能选项出现。

这里输入DLL的文件位置(放在攻击机1的路径):

之后都默认就行

终于,得到成功执行的消息显示“Doublepulsar Succeded”

但是kali这边并没有回连上...伤心。以上尝试的是反弹连接获取shell

但是经过坚持不懈的心塞,终于回连成功!(就可以对靶机进行各种事情了!)

下面试试主动连接的:

将生成的bind.dll文件拷贝到攻击机xp的windows文件夹下

开启msf

最后也可以回连。

除了Eternalblue,NSA一起发布的工具还有这些,影响操作系统基本

防范方法

这次病毒爆发影响确实非常大,为近年来所罕见。该病毒利用NSA“永恒之蓝”这个严重漏洞传播,几乎所有的Windows系统如果没有打补丁,都会被攻击。

微软在今年 3 月发布了 MS17-010 安全更新,以下系统如果开启了自动更新或安装了对应的更新补丁,可以抵御该病毒——Windows Vista、Windows Server 2008、Windows 7、Windows Server 2008 R2、Windows 8.1、Windows Server 2012、Windows 10、Windows Server 2012 R2、Windows Server 2016 。

  • 2、关闭端口139/445,同时打开系统防火墙。具体方法可参考:
    http://mp.weixin.qq.com/s/s1_eym5U7-cdMbAh2T9YHA

  • 并且除了Windows系统的电脑外,手机、Pad、Mac等终端不会被攻击,病毒只攻击Windows系统的电脑,手机等终端不会被攻击,包括Unix、Linux、Android等系统都不会受影响。很多时候都是没有根据的谣言和ps啊。

Apache Struts2(S2-045)漏洞

我又做了一个今年三四月份的新漏洞S2-045的利用及修复:

漏洞介绍

Apache Struts 2被曝存在远程命令执行漏洞,漏洞编号S2-045,CVE编号CVE-2017-5638,在使用基于Jakarta插件的文件上传功能时,有可能存在远程命令执行,导致系统被黑客入侵。

恶意用户可在上传文件时通过修改HTTP请求头中的Content-Type值来触发该漏洞,进而执行系统命令。

绿盟威胁情报中心NTI关于Struts2漏洞范围分布图

全球分布图

国内分布图

全球排行

影响范围

Struts 2.3.5 – Struts 2.3.31

Struts 2.5 – Struts 2.5.10

不受影响的版本

Struts 2.3.32 Struts 2.5.10.1

快速检测方式

使用知道创宇SeeBug照妖镜可以直接检测站点是否存在本漏洞

漏洞危害

在default.properties文件中,struts.multipart.parser的值有两个选择,分别是jakarta和pell。其中的jakarta解析器是Struts 2框架的标准组成部分。默认情况下jakarta是启用的,所以该漏洞的严重性需要得到正视。

攻击者可通过远程命令注入执行,令系统执行恶意命令,导致被黑客入侵,从而威胁服务器安全,影响极大。

实验环境

操作机:Windows XP

目标机:Centos 6.5

Struts版本:2.3.31

ip:172.16.11.2

实验文件

poc.exe:本次实验漏洞验证的POC源码

SecurityFilter.class:本次实验漏洞修复脚本

实验目的

了解S2-045 Struts2远程命令执行漏洞危害

掌握检测修复S2-045 Struts2远程命令执行漏洞技术

实验内容

Struts

Struts是Apache基金会的一个开源项目,Struts通过采用JavaServlet/JSP技术,实现了基于Java EE Web应用的Model-View-Controller(MVC)设计模式的应用框架,是MVC经典设计模式中的一个经典产品。

目前,Struts框架广泛应用于政府、公安、交通、金融行业和运营商的网站建设,作为网站开发的底层模板使用,是应用最广泛的Web应用框架之一。

实验步骤

步骤1:验证漏洞

打开目标网站:http://172.16.12.2/

发现跳转链接到http://172.16.12.2/example/HelloWorld.action

打开cmd,切到poc.exe的目录下,执行下面命令:

poc.exe http://172.16.12.2/example/HelloWorld.action "ifconfig"

测试该网站是否存在S2-045漏洞,尝试执行系统命令ifconfig,结果如下:

成功执行,证明漏洞存在,成功后可以尝试利用漏洞执行其他命令。

步骤2:临时修复方案

修改Struts2的Multipart parser

使用搜索工具搜索ssh连接工具xshell5连接目标机172.16.12.2,用户名root,密码123456

修改配置文件

struts2-core-2.3.31.jar路径:/var/www/apache-tomcat-7.0.14/webapps/ROOT/WEB-INF/lib/下载到本地桌面,修改文件扩展名为struts2-core-2.3.31.zip

将其解压到struts2-core-2.3.31文件夹中,打开里面的文件夹org\apache\struts2

右击目录下的default.properties文件,使用notepad++进行编辑。

找到struts.multipart.parser,该选项就是Struts2的Multipart parser应用配置,默认值为jakarta,即此次出现命令执行漏洞的上传框架。

将其修改为pell,相当于将存在漏洞的jakarta框架禁用了。

修改后值struts.multipart.parser=pell,保存,退出。

重新打包jar文件

struts2-core-2.3.31文件夹中全部选中,压缩打包为zip格式,文件名:struts2-core-2.3.31.jar

替换jar文件

使用工具Xftp,将/var/www/apache-tomcat-7.0.14/webapps/ROOT/WEB-INF/lib/路径下的struts2-core-2.3.31.jar移动到根目录/,将我们修改配置后重新打包的jar文件放到该目录下。

重启tomcat

替换文件后需要重启tomcat服务,切换到/var/www/apache-tomcat-7.0.14/bin/目录下,首先执行./shutdown.sh,然后执行./startup.sh

验证漏洞 执行下面命令:

poc.exe http://172.16.12.2/example/HelloWorld.action "cat /etc/passwd"

poc程序已经无法成功利用了。

步骤3:主动防御方案

如业务系统比较复杂,在临时修复方案不能使用时,且无法轻易的升级struts的版本时,可以使用知道创宇的创宇盾来拦截网络的攻击流量。

实验总结与体会

本次免考我做了Eternalblue(MS17-010)漏洞利用工具实现Win 7系统入侵与S2-045漏洞的利用及修复

此次实验我首先移植MS17-010漏洞利用代码模块、上网查资料对MS17-010漏洞代码进行分析、了解复线工具的用途并下载实践相关功能(配置环境很耗时啊。。。),总共开启了三个虚拟机进行实验,其中可以使用Empire进行Payload创建、也可以使用msfvenom的反弹连接或者主动连接进行Payload创建,其实本来也不清楚会有这么多种方法可以实现,都是因为一次次的失败积累出的经验...

做MS17-010复现对我来说还是有些困难的,在网上查看各种原理还有方法慢慢梳理才有了个大方向。耗费时间最久的竟然是环境配置,真的是每台电脑有它的脾气,每个基本都是配了好几次才成功。“永恒之蓝”是指NSA泄露的危险漏洞“EternalBlue”,此次的勒索病毒WannaCry是利用该漏洞进行传播的,当然还可能有其他病毒也通过“永恒之蓝”这个漏洞传播,因此给系统打补丁是必须的,毕竟这种复现我们自己都可以实现...

s2-045我用过实践掌握了临时解决方案与主动防御方案,所以说学习网络对抗知识还是很重要的,如果遇到漏洞问题可能还能自己动手解决掉。

参考资料

Eternalblue(MS17-010):

http://www.hackdig.com/05/hack-45428.htm

http://www.freebuf.com/articles/network/133853.html

http://www.hx99.net/Article/Tech/201704/37465.html

https://baijiahao.baidu.com/po/feed/share?

http://bobao.360.cn/learning/detail/3738.html

s2-045:

http://www.myhack58.com/Article/html/3/62/2017/84040.html

https://www.ichunqiu.com/vm/57729/1

20145330 《网络对抗》 Eternalblue(MS17-010)漏洞复现与S2-045漏洞的利用及修复的更多相关文章

  1. 漏洞复现——httpd换行解析漏洞

    漏洞原理: 在解析php文件时,1.php\x0A这种格式的文件将会被认为php文件解析,进而可以绕过一些服务器的安全策略. 漏洞版本: 2.4.0~2.4.29 漏洞复现: 复现该漏洞是利用dock ...

  2. 漏洞复现-CVE-2014-3120-ElasticSearch 命令执行漏洞

        0x00 实验环境 攻击机:Win 10 靶机也可作为攻击机:Ubuntu18 (docker搭建的vulhub靶场) 0x01 影响版本 < ElasticSearch 1.2的版本 ...

  3. 漏洞复现-CVE-2018-15473-ssh用户枚举漏洞

          0x00 实验环境 攻击机:Win 10 0x01 影响版本 OpenSSH 7.7前存在一个用户名枚举漏洞,通过该漏洞,攻击者可以判断某个用户名是否存在于目标主机 0x02 漏洞复现 针 ...

  4. 漏洞复现:Struts2 S2-032 漏洞环境

    Struts2 S2-032 漏洞环境 http://vulapps.evalbug.com/s_struts2_s2-032/ POC: http://127.0.0.1/memoindex.act ...

  5. 漏洞复现——ngnix文件解析漏洞

    漏洞描述: 上传文件时,在文件名后加%00php,就可以绕过检测成功上传而已文件 影响版本: nginx 0.8.41 – 1.5.6 漏洞分析: 该漏洞原理是非法字符空格和截止符(\0)会导致Ngi ...

  6. 漏洞复现——apache文件解析漏洞

    漏洞描述: 我们可以上传一个文件名末尾包含换行符的文件,以此绕过它的黑名单 影响版本: apache 2.4.0-2.4.29 漏洞分析: <FilesMath "\.(?i:php| ...

  7. 2018-2019 2 20165203 《网络对抗技术》 Exp1 PC平台逆向破解

    2018-2019 2 20165203 <网络对抗技术> Exp1 PC平台逆向破解 实验要求 1.掌握NOP, JNE, JE, JMP, CMP汇编指令的机器码 2.掌握反汇编与十六 ...

  8. 【研究】ms17-010永恒之蓝漏洞复现

    1       永恒之蓝漏洞复现(ms17-010) 1.1     漏洞描述: Eternalblue通过TCP端口445和139来利用SMBv1和NBT中的远程代码执行漏洞,恶意代码会扫描开放44 ...

  9. [漏洞复现] [Vulhub靶机] OpenSSL Heartbleed Vulnerability (CVE-2014-0160)

    免责声明:本文仅供学习研究,严禁从事非法活动,任何后果由使用者本人负责. 0x00 背景知识 传输层安全协议SSL 安全套接字协议SSL(Secure Sockets Layer),及其继任者传输层安 ...

随机推荐

  1. Visual Studio 2017 调试 windows server 2016 Docker Container

    网上很多文章都是在win10下,用Docker for windows工具进行Docker的安装部署的.用知道windows server 2016已经原生支持Docker了,其windows Con ...

  2. Cache replacement policies 缓存实现算法

    Cache replacement policies - Wikipedia https://en.wikipedia.org/wiki/Cache_replacement_policies Cach ...

  3. iOS-相关集合类

    第一:NSArrary 1.1:集合的基本方法 1.创建集合   NSArray 是不可变数组,一旦创建完成就不能够对数组进行,添加,删除等操作 NSArray * array = [[NSArray ...

  4. Kubernetes容器调度

    Kubernetes的调度器是Kubernetes众多组件的一部分,独立于API服务器之外.调度器本身是可插拔的,任何理解调度器和API服务器之间调用关系的工程师都可以编写定制的调度器.本文后面的介绍 ...

  5. javaScript高级教程(五) Event Flow

    1.两个阶段三个模型:Netscape支持事件捕获,IE支持事件冒泡,w3c是先捕获后冒泡 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 S ...

  6. 集成RabbitMQ做秒杀

    由于秒杀的并发量太大,所以仅仅使用缓存是不够的,还需要用到RabbitMQ. 这里推荐一款用于分库分表的中间件:mycat 解决超卖的问题(看第五章节): 秒杀接口优化: 实操: 然后把下载好的文件上 ...

  7. NYOJ 47

    思路: 在n>3的时候就用前两个小的来带后两个大的,有两种方式(一就是1,2先过,然后1回来,然后n,n-1过,然后2,回来),(二就是 1,n先过去 然后1回来,然后 1,n-1过去吗.,然后 ...

  8. 用Python实现的数据结构与算法:开篇

    一.概述 用Python实现的数据结构与算法 涵盖了常用的数据结构与算法(全部由Python语言实现),是 Problem Solving with Algorithms and Data Struc ...

  9. [转]Tesseract-OCR (Tesseract的OCR引擎最先由HP实验室于1985年开始研发)

    光学字符识别(OCR,Optical Character Recognition)是指对文本资料进行扫描,然后对图像文件进行分析处理,获取文字及版面信息的过程.OCR技术非常专业,一般多是印刷.打印行 ...

  10. ubuntu shell脚本出错 dash

    今天在Ubuntu下调试代码,明明是正确的,却仍然报错,查了错误信息才知道:Ubuntu中默认不是bash,而是为了加快开机速度,使用了dash. dash中需要严格的语法,而且与bash语法不同.例 ...