• 永恒之蓝及WannaCry分析


    以下部分是我的一次大作业,写了大概有一周,拿出来凑篇博客,如果有错误的地方,还请指正。粘贴过程中可能图片有错误。

    1.环境搭建及简介

    1.1 实验环境

    • Windows 7 (靶机)
    • Parrot(攻击机)

    1.2 环境简介

    1.2.1 Windows 7(靶机)

    Windows 7 ,版本号为7601, 已开启SMB服务,445端口开启,防火墙关闭。 IP地址:192.168.116.137

     

    1.2.2 Parrot(攻击机)

    Linux Parrot 4.19.0 ,Parrot 是一款专门用于渗透测试的Linux系统,其中集成了nmap, wireshark,Metasploit等600多种常用渗透测试工具,相比热门的kali更加强大。IP地址为:192.168.116.141.

    2.漏洞探查及渗透

    2.1漏洞探查

    使用nmap工具进行端口和操作系统扫描。扫描结果显示靶机的135,139,445端口都开启,而且服务信息也显示出来。同时靶机操作系统最可能为windows 7。

     

    对靶机检查看其是否存在永恒之蓝漏洞,设置目标IP为192.168.116.137,设置线程数为10,加速探查过程。

    结果显示靶机可以被利用。

     

    2.2 漏洞利用

    使用tcp反弹式meterpreter作为渗透操作模块,默认本地4444端作为连接端口.

     

    使用exploit/windows/smb/ms17010_eternalblue模块进行渗透。通过meterpreter可以进行提权,记录键盘,上传下载文件,监视摄像头等操作。

     

    作为举例,我将摄像头连接到靶机上,然后通过parrot远程连接主机摄像头。

     

     列举摄像头,发现存在EasyCamera,连接该摄像头,连接到该摄像头并返回一个网页视频流。

    3.病毒源码分析

    3.1病毒工作基本流程

    WannaCry病毒感染后主要行为是将计算机上的多种文件类型文件加密,以此为筹码勒索用户,此外病毒通过随机生成公网IP地址和遍历内网IP地址,访问其445端口,以此快速传播。,病毒的基本工作流程如下:

     

    3.2病毒源码分析

    3.2.1 源码说明

    源码来源:https://github.com/topcss/WannaCry

    注:该源码通过原exe程序反编译而来

    代码结构:

    文件

    作用

    worm.c

    蠕虫行为,包括感染,传播病毒

    decryptor.c

    文件加密,勒索

    3.2.2worm.c

    该病毒感染最初会尝试连接http://www.iuqerfsodp9ifjaposdfjhgosurijfaewrwergwea.com,连接状态返回变量v8如果连接成功,则结束程序。如果连接失败,则调用函数 function_408140进行感染。

     

    函数function_408140中,建立mssecsvc2.0进程,同时将该进程连接到计算机的服务控制数据库上。

     

    mssecsvc2.0写入注册表中,使其每次开机都会自动启动。

    调用攻击载荷模块进行攻击,这段代码中有多个内存的释放和调用函数,如GlobalFree,memcpy,同时还使用到了_OVERLAAPPED结构体变量,因此推断是攻击载荷调用部分。

    随机生成不同的公网IP地址,访问其445端口。

    内网通过扫描网卡信息,遍历当前网段,从而进行传播。

     

     

    C:\WINDOWS释放勒索模块tasksche.exe。

     

    2.将一些特殊的字符串写入内存,这些字符串长度相同,应该是Hash之后的字符串,猜测可能是用于解密部分文件,用于证明其有能力解密文件,诱使用户支付。

     

    3.2.3 decryptor.c

    避开一些重要的系统文件,如系统文件目录(WINDOWS),驱动文件目录(Intel)等等,防止加密后影响系统的运行。

     

    这一部分应该是加密是生成密钥。

    发送网络请求,返回网络回复信息,但从目前这些信息中无法判断到底是什么行为。

     

    c.wnry文件中主要包含配置文件,包括比特币钱包地址,tor浏览器下载地址等,该部分讲该文件写入文件,应该是为后续的下载行为做准备。

     

     

    该部分反复遍历文件,并进行读写,同时还操作了.res文件,此外将.WNCRY文件后缀加到部分文件后面,推测应该是加密文件及修改文件后缀部分。

     

     

    勒索用的比特币钱包地址硬编码在代码中。

    7.这一部分代码存在明显的下载行为,因此推断是从互联网上下载一些病毒需要的资源。

    这一段代码用于反复计算文件生成的时间和当前系统时间的时间差,应该是病毒行为中加密期限部分的实现,病毒通过通过设置期限和提高比特币赎金的方式威胁用户,迫使用户尽快支付。

    由于该代码通过原来的exe文件反编译而来,而且在加解密部分使用了大量的goto和函数调用,所以目前只能分析到这样。

    4. 靶机完全控制

    通过前面两个阶段的漏洞初步利用,和代码分析,基本了解了永恒之蓝漏洞的利用和Wannacry病毒的基本工作原理,现在,我打算通过进一步深入利用该漏洞,通过利用攻击载荷生成木马,将木马上传到靶机,实现对靶机的完全控制。

    4.1 使用模板生成木马

    1.首先使用一个小exe文件作为木马的携带模板。我使用自己电脑上的11111111(某个敏感词,自行体会)工具来生成一个小的可执行程序。选择的载荷依然是windows/x64/meterpreter/reverse_tcp,为了一定程度上的避免杀毒软件,我使用metasploit默认的msfencoder来对生成的exe文件进行编码。

     

     

    -p 参数表示使用的payloads,设置攻击机的IP地址,-e表示使用的编码模块为x86/shikataganai,使用该模块的原因是该模块在msfencoder的各种编码模块中效果评价为excellent,-f 表示生成的文件格式为exe,最后是输出文件,我命名为111111111111(某个敏感词,自行体会)(下图中分别是编码模块评分和模板及生成的文件)

     

    2.将生成的木马程序进行简单的测试,将其上传到VirSCAN上进行简单测试。效果似乎还不错,绕过了一半的杀软。但鉴于平台使用的一些杀软的版本较老,该木马的真实效果可能会差很多。

     

     

     

     

    然后尝试用upx继续加壳,但好像遇到了些问题,无法加壳。

     

     

    目前生成的木马是让用户打开木马应用后返回给攻击机一个tcp连接,然后控制该主机。除此之外,还可以使用该木马进行社会工程学攻击,但由于目前我没有公网IP,所以只能在局域网内使用,以后可以通过购买域名进行内网穿透,实现公网下的连接。

    4.2 木马上传

    4.2.1 初次尝试

    1.使用最初的渗透方法获取主机控制权。

     

     

    2.给目标主机上传木马。

     

     

    然后在win7的C盘下发现已经上传的111111111111(某个敏感词,自行体会)文件。

     

     

    但好像出了点问题,无法运行,重新试试。

     

     

    4.2.2 改换思路

    这次换个思路,将靶机上的应用拖到攻击机上,然后捆绑木马,之后再上传上去替换原来的文件。

    首先我在靶机上下载了一个小计算器应用,然后攻击机将该应用拖到本机,然后进行捆绑木马。

     

    2. 重新进行编码,捆绑。

    3. 评测,这次效果似乎更好,原因可能是我循环编码了20次。

     

     

    上传木马替换原有文件。

     

    但上传后依然不能执行,可能是编码过程出了些问题。

    4.2.3 veil免杀载荷

    由于编码后总是出问题,所以再次改换思路。这次我使用veil-Evasion生成免杀模块,然后使用msfconsole监听veil生成的监听模块,然后使用捆绑工具将监听模块和模板文件捆绑。

    由于我的parrot虚拟机上没有veil,另一台kali上装过veil,所以之后的渗透过程在kali上完成。

     

     

    1.生成可执行exe模块和监听模块。列出所有的可用模块。

     

     

    选择c/meterpreter/rev_tcp模块,并设置,生成执行模块hi.exe和监听模块hi.rc。

     

     

    veil本身就是专门用于免杀的工具,但还是先测试一下,看看效果。

     结果有点尬了,只绕过了一半不到,最尬的是竟然绕过的大多是国内的杀软。百度,金山,腾讯,360都没反应... ...

     

     

    上传模块,因为我用的exe捆绑机是在windows环境下,所以还得在windows下捆绑,真实环境下是绝对不会这样做的。

     

     

    这是生成的捆绑文件,完全可执行。

     

     

     

    3.攻击机上开启监听模块,同时在靶机上开启计算器。返回一个连接,建立一个session。

     

    4.为了防止用户关闭计算器导致进程关闭,所以将会话进程迁移。使之成为一个独立进程。可以看出post/windows/manage/migrate将会话从原来的6744进程迁移到了7128进程。

     

     在靶机上关闭计算器,会话依然存在。

    5.将控制持久化,确保系统重启后meterpreter依然可以运行。这样其实是修改靶机的注册表,将meterpreter进程加入注册表项/HKLM/Sosftware/Microsoft/Windows/CurrentVersion/Run下,以后除非用户可以将这个键值手动删除或修改,否则一直会运行。

     

    5. 总结

    至此,所有的流程全部完成,最终,靶机变成了一台开机就被完全控制的肉鸡,后续可以通过这台机器进行各种操作,比如DDos,挖矿,等等。此外,还可以通过该主机扫描该内网内的其他主机,进行渗透,然后组成一个僵尸网络,完成更复杂的操作。

    不足:在代码分析上,由于我还没有学习怎么详细分析汇编码,反编译工具也不了解,所以直接使用别人的反编译的代码分析,有很多都没有分析出来,后期渗透过程中,由于对文件加壳操作还不熟,出现编码后无法执行的问题也无法解决,虽然最后完成了对靶机的完全控制,但中间有些流程在真实环境下是完全不可操作的,所以后续还需要认真钻研。

    6.参考

    [1] David Kennedy, Jim O'Gorman.Metasploit:The Penetration Tester's Guide[M].北京:电子工业出版社,2017.7

    [2] 任晓晖.黑客免杀攻防[M].北京:机械工业出版社,2013.10

    [3] Peter Kim.The Hacker Playbook2:Practical Guide To Penetration Testing[M].北京:人民邮电出版社,2017.2

    [4] 诸葛建伟,陈立波,孙松柏.Metasploit渗透测试.魔鬼训练营[M].北京:机械工业出版社,2013.8

    • https://www.freebuf.com/articles/terminal/153230.html
    • https://www.cnblogs.com/youcanch/articles/5671264.html
  • 相关阅读:
    C# 关于类的事件和委托
    C# 多态
    C# 声明方法的语法
    C# 面向对象基础
    近期发现的一些.net资源
    asp.net 2.0学习资源
    设置VSS使支持通过Internet访问
    大型社区设计:提高用户体验的10个细节
    委托的用法
    有滚动条、固定Header的ASP.Net DataGrid实现
  • 原文地址:https://www.cnblogs.com/yuxi-blog/p/12077207.html
Copyright © 2020-2023  润新知