⓫⁄₉ ⟦ 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环境变量目录

⚠️ 安全漏洞确认:

  • 目标DLL :myDLL.dll在系统中不存在

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

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

4.攻击机会

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

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


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

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

相关推荐
隔窗听雨眠1 小时前
PostgreSQL单表从Windows迁移到Linux:差异剖析、方案对比与全流程实战
linux·windows·postgresql
Helix2504 小时前
Ansible混合环境自动化:Windows与Linux统一配置管理实战
windows·自动化·ansible·playbook·配置管理·winrm·混合环境
Java开发追求者5 小时前
windows快速安装docker
windows·docker·安装·1024程序员节
QZ166560951596 小时前
数据库监测的主动防御:实时感知,看见即掌控
网络·安全·网络安全
Helix2508 小时前
Windows ETW与KQL实战:终端性能诊断与遥测数据分析指南
windows·性能诊断·kql·etw·azure monitor·遥测数据·tracert
陈葛杰10 小时前
Adobe Premiere Pro2025安装教程
windows·adobe·开源软件·1024程序员节
承渊政道11 小时前
iOS远程控制电脑用什么好?iPhoneiPad远程控制Windows电脑最佳方案2026横评
windows·ios·远程控制·1024程序员节·iphone ipad
易点云徐源11 小时前
PDF 默认打开方式刚修好,过一分钟又变成“未知应用”?使用 ProcMon 成功抓出后台程序
windows·pdf
我是大猴子12 小时前
py how claude work项目分析
运维·服务器·windows·1024程序员节
kingx312 小时前
BugKu 渗透测试4 Writeup:从 eval 注入到五层内网拿满 Flag
人工智能·网络安全·网络攻击模型·安全威胁分析·1024程序员节