dll劫持提权——本质上类似水坑攻击,就是你替换管理员的某应用加载的dll,权限高的管理员运行该应用就中招了



原理:Windows 程序启动的时候需要 DLL。如果这些 DLL 不存在,则可以通过在应用程序要查找的位置放置恶意 DLL 来提权。通常,Windows 应用程序有其预定义好的搜索 DLL 的路径,它会根据下面的顺序进行搜索:

1、应用程序加载的目录
2、C:\Windows\System32
3、C:\Windows\System
4、C:\Windows
5、当前工作目录 Current Working Directory,CWD
6、在 PATH 环境变量的目录(先系统后用户)

过程:信息收集-进程调试-制作 dll 并上传-替换 dll-启动应用后成功
 

需要满足条件:你可以替换app的dll,管理员运行该app,这样你才可以获得提权结果。==》整体看比较被动,鸡肋!需要对手配合你。

DLL注入是一种允许攻击者在另一个进程的地址空间的上下文中运行任意代码的技术。如果进程中以过多的权限运行,那么可以会被攻击者加以利用,以便以DLL文件的形式执行恶意代码以提升权限。

手动注入

通过Metasploit的msfvenom创建DLL,该文件可以生成包含特定有效内容的DLL文件。应该注意的是,如果DLL被注入的进程是64位,那么应该使用64位有效负载。

Msfvenom - DLL生成

下一步是设置metasploit监听,以便在将恶意DLL注入进程后接受连接。

Metasploit监听配置

有许多可以执行DLL注入的工具,但最可靠的工具之一 就是使用CreateRemoteThread技术的Remote DLL Injector,它可以将DLL注入启用ASLR的进程。进程ID和DLL的路径是工具需要的两个参数:

从Remote DLL Injector执行的那一刻起,为了实现DLL注入,将提供执行的完整步骤。

Remote DLL Injector - DLL注入方法

如果DLL被成功注入,它将返回一个具有进程权限的更改会话。因此,具有比标准更高权限的进程可能会被滥用以进行特权升级。

特权升级 - DLL注入

Metasploit注入

Metasploit框架具有执行DLL注入的特定模块。它只需要链接到一个传输器会话,并指定进程的PID和DLL的路径。

Metasploit - DLL注入模块

Metasploit - DLL注射

PowerSploit

通过DLL注入提升权限也可以与PowerSploit一起使用。msfvenom可以用于生成恶意DLL,然后通过任务管理器可以获得目标进程的PID。如果进程作为SYSTEM运行,则注入的DLL将以相同的权限运行。

发现进程ID

Invoke-DLLInjection模块将执行DLL注入,如下所示:

PowerSploit - DLL注入

DLL内的有效内容将被执行,并且将获得SYSTEM权限。

DLL执行与系统特权

参考

  • https://clymb3r.wordpress.com/2013/04/06/reflective-dll-injection-with-powershell/

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

  • https://disman.tl/2015/01/30/an-improved-reflective-dll-injection-technique.html

  • https://github.com/stephenfewer/ReflectiveDLLInjection

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

 

前言:也想了解下关于DLL的劫持,但从未没有实操过,看了倾旋的鱼叉攻击的案例,自己也想复现下并且学习

劫持DLL一般有两种方法:

第一种方法:只需要找到缺少的DLL路径生成恶意的DLL放入对应的路径即可,常使用的工具Process Monitor,缺点是有些DLL路径是在权高的文件夹中。无一定权限没法操作

第二种方法:使用Process Monitor查看程序所加载的DLL,分析是否由于加载顺序而导致的恶意加载DLL,我们自己再通过原加载DLL导出表的函数来制作一个正常的dll文件,并且包含我们要实现的功能,实现提权等操作!

这里用的第二种!


测试的QQ拼音版本为:QQ拼音输入法 v6.0.5013.400

下载地址:https://www.upandashi.com/soft/7136.html

1、测试目录是否可写cacls *

2、发现目录everyone可写,并且当前.dll加载也可控,那么直接生成dll文件放到该目录中,注意系统位数

3、链接原DLL文件中的导出表中的函数,这里通过dll_hijacker.py

dll_hijacker.py:https://raw.githubusercontent.com/zhaoed/DLL_Hijacker/master/DLL_Hijacker.py

python2 dll_hijacker.py

4、程序加载外部DLL成功,如下:

总结:

1、可通过Process Monitor进行观察来查看指定程序的dll的加载顺序,来进行是否支持dll劫持

2、DLL劫持都需要配合目录权限,其实还是有点鸡肋的,看对方的服务了!