⓫⁄₉ ⟦ OSCP ⬖ 研记 ⟧ Windows权限提升 ➱ 动态链接库(dll)文件劫持(上)

**郑重声明:**本文所涉安全技术仅限用于合法研究与学习目的,严禁任何形式的非法利用。因不当使用所导致的一切法律与经济责任,本人概不负责。任何形式的转载均须明确标注原文出处,且不得用于商业目的。

🔋 点赞 | 能量注入 ❤️ 关注 | 信号锁定 🔔 收藏 | 数据归档 ⭐️ 评论| 保持连接💬

🌌 立即前往 👉晖度丨安全视界🚀​

​​​​

▶ 信息收集

▶ 漏洞检测
初始立足点

权限提升 ➢ Windows权限提升 ➢ 动态链接库(dll)文件劫持(上) 🔥🔥🔥
横向移动

▶ 报告/分析

▶ 教训/修复

目录

1.Windows权限提升

[1.1 Windows服务DLL劫持攻击](#1.1 Windows服务DLL劫持攻击)

[1.1.1 DLL基础概念](#1.1.1 DLL基础概念)

[1.1.2 DLL劫持攻击方式](#1.1.2 DLL劫持攻击方式)

[1.1.2.1 DLL搜索顺序](#1.1.2.1 DLL搜索顺序)

[1.1.2.2 利用"缺失DLL"场景攻击](#1.1.2.2 利用"缺失DLL"场景攻击)

[1.1.2.3 防御建议](#1.1.2.3 防御建议)

[1.1.3 利用缺失DLL的服务劫持攻击实践](#1.1.3 利用缺失DLL的服务劫持攻击实践)

[1.1.3.1 枚举运行中的服务并检查服务二进制文件的权限(无写入权限)](#1.1.3.1 枚举运行中的服务并检查服务二进制文件的权限(无写入权限))

[1.1.3.2 使用进程监视器查看服务的进程调用dll情况](#1.1.3.2 使用进程监视器查看服务的进程调用dll情况)

1.攻击发现流程

[2.Process Monitor分析DLL加载](#2.Process Monitor分析DLL加载)

3.查看BetaService服务的进程的dll搜索顺序

4.攻击机会

[欢迎❤️ 点赞 | 🔔 关注 | ⭐️ 收藏 | 💬 评论](#欢迎❤️ 点赞 | 🔔 关注 | ⭐️ 收藏 | 💬 评论)


1.Windows权限提升

在渗透测试中,我们通常以非特权用户 身份获得初始立足点。但为了深入探测(如搜索敏感信息、提取密码哈希等),往往需要提升至管理员权限( 比如:使用Mimikatz提取密码哈希**),** 这个过程就是特权提升

📊 权限提升三大路径: 本文开始介绍:++动态链接库(dll)文件劫持++。

阶段 目标 关键方法
1. 枚举Windows 获取系统情报 手动搜索 + 自动化工具
2. 滥用Windows服务 攻击服务漏洞 服务配置缺陷、权限滥用
3. 利用其他组件 扩大攻击面 计划任务、系统漏洞利用

1.1 Windows服务DLL劫持攻击

"替换服务的二进制文件 "是尝试在Windows系统上提升权限的一种非常有效的方法。然而,由于普通用户通常没有权限替换这些二进制文件时,需要采用更高级的方式来利用Windows服务。

1.1.1 DLL基础概念

**动态链接库(DLL)**是Windows系统中的共享功能库,允许多个程序复用同一代码资源,避免重复开发。

特性 描述
功能 提供可复用的代码和资源(如图标、函数)
类比 Unix/Linux中的共享对象(.so文件)
优势 节省资源,提高开发效率

1.1.2 DLL劫持攻击方式

两种DLL劫持攻击方式:

攻击类型 原理 潜在影响
🔧 直接覆盖DLL 替换服务使用的合法DLL文件 服务功能可能异常,但恶意代码已执行
🗺️ 劫持搜索顺序 利用DLL加载优先级放置恶意DLL 更隐蔽,可保持原功能

1.1.2.1 DLL搜索顺序

⚠️ 关键安全发现

  • 上图中:在 安全模式下,当前目录仅排搜索顺序的第5位,降低了劫持风险

  • 但禁用安全模式 时,当前目录升至第2位,风险显著增加

  • 应用程序目录 始终是第一搜索位置,这是攻击重点


1.1.2.2 利用"缺失DLL"场景攻击

🚨 攻击前提

当服务尝试加载系统中不存在的DLL 时,攻击者++放置同名恶意DLL在搜索路径中++,然后:

🔄 攻击流程

bash 复制代码
服务启动 → 查找缺失DLL → 按搜索顺序扫描 → 加载恶意DLL → 执行恶意代码

💡 攻击优势

  • 无需替换原DLL:不会破坏服务原有功能

  • 利用安装缺陷:不完整的安装或更新常导致DLL缺失

  • 隐蔽性较高:服务可能正常运作,仅部分功能受限

****【思路】****为了利用这种情况,尝试将一个恶意DLL(与缺少的DLL同名)放置在DLL搜索顺序的路径中,以便在启动二进制文件时执行。


1.1.2.3 防御建议
防御措施 实施方法
启用安全DLL搜索 确保注册表项HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\SafeDllSearchMode设置为1
签名验证 对关键DLL实施数字签名验证
权限控制 严格限制对应用程序目录的写入权限
完整性检查 定期校验系统DLL的完整性
最小权限原则 服务账户仅授予必要目录的读取权限

💎 根本教训:任何以高权限加载外部代码的机制,都必须严格控制加载源和完整性验证。


1.1.3 利用缺失DLL的服务劫持攻击实践

1.1.3.1 枚举运行中的服务并检查服务二进制文件的权限(无写入权限)

通过RDP连接到CLIENTWK220, 并使用用户名steve和密码securityIsNotAnOption++++++登录。启动PowerShell,然后枚举服务。我们跳过服务发现步骤,发现BetaService服务

检查服务的二进制文件的权限: 显示用户steve没有替换二进制文件的权限 ,因为权限是RX。因此,需要进一步调查枚举。


1.1.3.2 使用进程监视器查看服务的进程调用dll情况
1.攻击发现流程

我们使用进程监视器(Process Monitor) 来显示任何**++进程、线程、文件系统++** ++或++ **++注册表++**相关活动的实时信息。

注意: 需要**++管理员权限++**才能启动Process Monitor并收集这些数据。

🎯 核心分析目标与策略:

分析方向 具体目标 攻击策略
🔍 现有DLL分析 识别服务加载的所有DLL 检查权限,寻找可替换的合法DLL
⚠️ 缺失DLL检测 发现NAME NOT FOUND状态的DLL调用 搜索顺序在优先路径放置恶意DLL

💡 攻击决策矩阵:

发现情况 攻击可行性 所需条件 风险级别
可写现有DLL 🟢 高 对DLL文件有写入权限 🟡 中等
缺失DLL+优先路径可写 🟢 高 对搜索顺序靠前目录有写入权 🟢 较低
缺失DLL+路径不可写 🔴 低 需要其他权限提升方法 🔴 高

不幸的是,用户steve没有管理员权限。然而在渗透测试中,将服务二进制文件BetaServ.exe复制到本地自己的windows机器。在这个系统上,我们可以在本地安装服务(BetaServ.exe),并使用具有管理员权限的Process Monitor列出所有DLL活动。


2.Process Monitor分析DLL加载

我们把BetaServ.exe文件移植到具有管理员权限的Process Monitor的主机上进行检查。

📋 操作步骤:

步骤 具体操作 目的
1. 权限启动 以backupadmin管理员身份运行Procmon64.exe 获取必要的监控权限
2. 精准过滤 创建进程名=BetaServ的过滤器 聚焦目标服务,排除无关干扰
3. 触发监控 重启BetaService服务 激活服务的DLL加载行为
4. 关键发现 观察CreateFile调用,发现myDLL.dll的NAME NOT FOUND状态 确认存在缺失DLL漏洞

①以backupadmin身份启动Process Monitor

②创建服务进程BetaServ的过滤器

创建一个过滤器,只包括目标服务的进程BetaServ相关的事件。为此,我们将点击**Filter菜单 > Filter...**进入过滤器配置。

我们的目标是:Process Monitor只显示与BetaServ进程相关的事件。过滤器由四个条件组成。按照下图红框进行配置,输入后将点击添加:

应用过滤器后,列表为空。为了分析服务二进制文件,我们尝试重新启动服务,因为二进制文件将尝试加载DLL。

③重新启动BetaService服务

在PowerShell中,重新启动BetaService服务,同时在后台运行Process Monitor。

3.查看BetaService服务的进程的dll搜索顺序

检查Process Monitor,注意到出现了许多事件。在列表中向下滚动,可找到各种CreateFile调用在操作列中。

CreateFile函数用于创建或打开文件。注意到,CreateFile调用试图在几个路径中打开名为myDLL.dll 的文件。详细列中显示这些调用的状态为NAME NOT FOUND

这意味着:在这些路径中找不到具有该名称的DLL。

🔍 DLL搜索路径顺序:

上图显示,连续的函数调用按照"DLL搜索顺序 "进行,从应用程序所在的目录开始,以PATH环境变量中的目录结束。我们可通过在PowerShell中显示此环境变量的内容来确认这一点,使用**$env:path**命令。

复制代码
1️⃣ c:\Users\steve\Documents\   ← 应用程序目录(当前)
2️⃣ C:\Windows\System32\
3️⃣ C:\Windows\System\
4️⃣ C:\Windows\
5️⃣ 当前工作目录
6️⃣ PATH环境变量目录

⚠️ 安全漏洞确认:

  • 目标DLLmyDLL.dll在系统中不存在

  • 加载尝试:服务按标准搜索顺序连续查找该文件

  • 全部失败 :所有路径均返回NAME NOT FOUND

4.攻击机会

为了利用这一点,尝试将恶意DLL命名为myDLL.dll ,并写入DLL搜索顺序使用的第一个路径:++++应用程序加载路径++++ 。这里是c:\Users\steve\Documents。恰好它是steve的主目录,因此我们有权限把恶意dll文件写入这个文件夹,然后重新启动服务来加载它。

服务加载缺失DLL + 用户对优先搜索路径有写入权限 = DLL劫持攻击可行


欢迎❤️ 点赞 | 🔔 关注 | ⭐️ 收藏 | 💬 评论

每一份支持,都是我持续输出的光。

相关推荐
阿钱真强道2 小时前
09 jetlinks-mqtt-属性主动上报-windows-python-实现
开发语言·windows·python·网络协议
汤愈韬11 小时前
ACL概述、ACL原理、基本ACL应用及配置
网络·网络协议·网络安全
川川菜鸟14 小时前
Claude Code 安装与配置完整指南(Windows)
windows
青岑CTF15 小时前
攻防世界-Ics-05-胎教版wp
开发语言·安全·web安全·网络安全·php
PfCoder16 小时前
WinForm真入门(23)---PictureBox 控件详细用法
开发语言·windows·c#·winform
Yff_world16 小时前
网络通信模型
学习·网络安全
Mr_Xuhhh16 小时前
MySQL表的增删改查(CRUD)操作详解
数据库·windows
老姚---老姚17 小时前
在windows下编译go语言编写的dll库
开发语言·windows·golang
Palpitate_LL17 小时前
Mongoose 搜索注入漏洞 CVE-2024-53900 到 CVE-2025-23061
网络安全