windows 通过AppInit加载任意dll

windows操作系统允许将用户提供的dll加载到所有的进程的内存空间中。该功能可以用来做后门持久化。有点类似于linux的ld_preload环境变量。在进程启动的时候,操作系统会将用户提供的dll加载。在设置该功能时,需要administrator权限。设置方法为修改注册表中两个选项


HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Windows

HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\Windows NT\CurrentVersion\Windows

微软默认阻止用户通过appinit功能去加载未知的dll。不过,可以通过修改注册表键值LoadAppInit_DLLs为1去关闭该功能。将待加载的dll保存在Program Files文件夹,并且将AppInit_DLLs键值修改为待加载dll的路径,即可让所有windows进程都加载该dll。
这是因为在“ AppInit_DLLs”注册表项中指定的DLL是由user32.dll加载的,几乎所有应用程序都使用该user32.dll。

Enable LoadAppInit_DLLs - 32bit and 64bit
 
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Windows\LoadAppInit_DLLs - 0x1
HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\Windows NT\CurrentVersion\Windows\LoadAppInit_DLLs - 0x1
 
Registry Key for Arbitrary DLL via AppInit - 32bit and 64bit
 
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\WindowsAppInit_DLLs
HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\Windows NT\CurrentVersion\Windows\AppInit_DLLs

当然,每个进程都加载dll,并反弹shell的话,会很杂乱。所以,有人开发了一个dll工具https://www.didierstevens.com/files/software/LoadDLLViaAppInit_V0_0_0_1.zip,通过
LoadDLLViaAppInit.bl.txt文件来决定哪些应用程序去加载用户指定的appinit dll。
f69c84a4edaa8eb3c6030f24039a7bca.png

67266a2fa0222941dd92245048ca1159.png

posted @ 2020-01-09 15:12  potatso  阅读(2190)  评论(0编辑  收藏  举报