当前位置: 首页 > news >正文

Windows 后渗透中可能会遇到的加密字符串分析

在 Windows 后渗透过程中,攻击者经常会遇到各种加密字符串或数据,这些数据通常用于存储敏感信息,如凭据、会话票据或配置数据。理解这些加密字符串的类型、加密机制、存储位置以及解密方法,对于权限提升、横向移动和持久化至关重要。本文将详细分析 Windows 系统中常见的加密字符串类型,包括 PSCredential以 01000000d 开头的字符串(通常与 DPAPI 相关)、SecureStringDPAPIGPP,并补充其他类型(如 LSA Secrets、SAM Hashes、Kerberos Tickets 等)。通过优化分类和结合实际后渗透场景,提供一个全面的参考框架。


1. 分类与概述

Windows 系统中的加密字符串通常与凭据存储、身份验证或敏感数据保护相关。这些字符串的加密机制、存储方式和解密条件各不相同。以下是对常见加密字符串的分类:

分类加密机制典型存储位置解密条件后渗透工具标志性特征
PSCredentialDPAPI + SecureStringPowerShell 脚本、内存用户上下文或 SYSTEM 权限Mimikatz, PowerShell 反射System.Management.Automation.PSCredential
SecureStringDPAPI内存、序列化文件用户上下文或 SYSTEM 权限Mimikatz, PowerShell 反射System.Security.SecureString
DPAPI BlobDPAPI文件、注册表、内存、凭据管理器DPAPI 主密钥 + 用户/SYSTEM 权限Mimikatz, SharpDPAPI01000000d 开头的十六进制
GPP (Group Policy Preferences)AES-256 (固定密钥)SYSVOL 的 XML 文件访问 SYSVOL 权限(默认可读)Get-GPPPassword, Metasploitcpassword 的 Base64 编码
LSA SecretsDPAPI + 注册表加密注册表(HKLM\SECURITY)SYSTEM 权限Mimikatz, lsadump注册表中的加密二进制数据
SAM HashesNTLM/SYSKEY 加密注册表(HKLM\SAM)SYSTEM 权限Mimikatz, secretsdumpNTLM 哈希(十六进制)
Kerberos TicketsKerberos 协议加密内存(LSASS 进程)SYSTEM 权限或用户会话Mimikatz, RubeusTGT/TGS 票据(内存中)

2. 详细分析

2.1 PSCredential

定义

PSCredential 是 PowerShell 中的 .NET 对象(System.Management.Automation.PSCredential),用于安全地存储和传递用户名和密码。密码部分以 SecureString 形式存储,底层依赖 Windows 的 DPAPI(Data Protection API)进行加密。

加密机制
  • 加密方式:密码通过 SecureString 加密,DPAPI 使用用户或机器的加密密钥进行保护。
  • 密钥绑定:加密数据与当前用户上下文或机器绑定,只有同一用户在同一机器上才能解密。
  • 序列化:如果 PSCredential 被序列化(如通过 Export-Clixml 保存到文件),会生成 DPAPI 加密的二进制数据。
存储位置
  • 内存:运行中的 PowerShell 进程(如通过 Get-Credential 创建)。
  • 文件:脚本中保存的序列化凭据(如 .xml 文件)。
  • 注册表:某些自动化脚本可能将凭据存储在注册表中。
后渗透利用
  • 提取方法
    • 如果有用户上下文,可以通过 PowerShell 反射直接解密 PSCredential 中的密码。
    • 使用 Mimikatz 的 sekurlsa::logonpasswordsdpapi::cred 模块从内存中提取。
  • 工具
    • Mimikatz
    • PowerShell 脚本(如 Get-DecryptedPSCredential
  • 限制:需要目标用户上下文或 SYSTEM 权限。
标志性特征
  • PowerShell 脚本中出现 Get-CredentialSystem.Management.Automation.PSCredential
  • 序列化后可能以 01000000d 开头的 DPAPI 数据形式存储。

2.2 SecureString

定义

SecureStringSystem.Security.SecureString)是 .NET Framework 中的数据类型,用于在内存中以加密形式存储敏感数据(如密码),减少明文暴露时间。

加密机制
  • 内存加密:数据在输入时逐字符加密,存储在内存中时保持加密状态。
  • DPAPI 依赖:底层使用 DPAPI 加密,密钥与用户或机器绑定。
  • 序列化:通过 ConvertFrom-SecureString 序列化后,生成 DPAPI 加密的字符串(可能以 01000000d 开头)。
存储位置
  • 内存:PowerShell 脚本运行时(如 ConvertTo-SecureString)。
  • 文件:序列化后的文件(如 .txt.xml)。
  • 注册表:某些应用程序可能将序列化的 SecureString 存储在注册表中。
后渗透利用
  • 提取方法
    • 通过反射 API(如 System.Runtime.InteropServices.Marshal)从内存中解密。
    • 如果序列化到文件,结合 DPAPI 主密钥解密。
  • 工具
    • Mimikatz(dpapi::blob
    • SharpDPAPI
  • 限制:需要用户上下文或 SYSTEM 权限。
标志性特征
  • PowerShell 脚本中出现 ConvertTo-SecureStringConvertFrom-SecureString
  • 内存中看到 System.Security.SecureString 类型。

2.3 DPAPI Blob(以 01000000d 开头的字符串)

定义

01000000d 开头的字符串是 DPAPI 加密后的二进制数据(BLOB)的十六进制表示,广泛用于 Windows 系统中的凭据保护。它是 PSCredentialSecureString 和其他凭据(如 Credential Manager)的底层加密格式。

加密机制
  • DPAPI:Windows 提供的加密 API,使用用户或机器的加密密钥。
  • 数据格式01000000d 是 DPAPI 数据块的头部标识符,表示加密数据的版本或格式。
  • 保护级别
    • 用户级别:只有同一用户能解密。
    • 机器级别:同一机器上的所有用户都能解密。
存储位置
  • 文件:序列化的凭据文件(如 .xml)。
  • 注册表:某些应用程序存储的加密数据(如 HKCU\Software)。
  • 凭据管理器:Windows Credential Manager 中的网络凭据、RDP 凭据等。
  • 浏览器:如 Chrome、Edge 的密码数据库。
后渗透利用
  • 提取方法
    • 获取 DPAPI 主密钥(C:\Users\<User>\AppData\Roaming\Microsoft\Protect)。
    • 使用 Mimikatz 的 dpapi::blobdpapi::masterkey 模块解密。
  • 工具
    • Mimikatz
    • SharpDPAPI
    • DPAPIck
  • 限制:需要目标用户的 DPAPI 主密钥或 SYSTEM 权限。
标志性特征
  • 01000000d 开头的长十六进制字符串。
  • 出现在文件、注册表或内存中。

2.4 GPP (Group Policy Preferences)

定义

组策略首选项(GPP)是 Windows 组策略的一部分,允许管理员配置用户或计算机设置(如本地管理员账户、计划任务)。早期版本(Windows Server 2008 及之前)的 GPP 凭据以弱加密形式存储。

加密机制
  • AES-256:使用固定密钥(微软公开的硬编码密钥)加密。
  • 存储格式:加密后的密码以 Base64 编码存储在 XML 文件的 cpassword 属性中。
  • 位置:SYSVOL 共享文件夹(\\<Domain>\SYSVOL)中的 XML 文件,如 Groups.xmlScheduledTasks.xml
存储位置
  • SYSVOL:域控制器上的共享文件夹,默认所有域用户可读。
  • 文件类型.xml 文件,包含 cpassword 属性。
后渗透利用
  • 提取方法
    • 访问 SYSVOL,提取 XML 文件中的 cpassword
    • 使用公开的 AES 密钥解密(无需额外权限)。
  • 工具
    • PowerSploit 的 Get-GPPPassword
    • Metasploit 的 post/windows/gather/credentials/gpp
  • 限制:仅适用于未修补的旧系统(2014 年微软修复了此漏洞,移除了固定密钥)。
标志性特征
  • XML 文件中的 cpassword 属性,值为 Base64 编码的加密字符串。

2.5 LSA Secrets

定义

LSA(Local Security Authority)Secrets 是 Windows 系统存储在注册表中的加密凭据,用于支持系统服务和身份验证(如服务账户密码、自动登录凭据)。

加密机制
  • 加密方式:结合 DPAPI 和系统密钥(SYSKEY)加密。
  • 存储位置HKLM\SECURITY\Policy\Secrets(需要 SYSTEM 权限访问)。
  • 内容
    • 服务账户密码(如用于计划任务或服务的账户)。
    • 自动登录凭据(如 DefaultPassword)。
    • 远程桌面服务的密码。
存储位置
  • 注册表HKLM\SECURITY\Policy\Secrets
  • 内存:LSASS 进程中可能缓存相关数据。
后渗透利用
  • 提取方法
    • 使用 Mimikatz 的 lsadump::secrets 模块直接从注册表提取。
    • 从 LSASS 进程内存中 dump 数据。
  • 工具
    • Mimikatz
    • lsadump
  • 限制:需要 SYSTEM 权限。
标志性特征
  • 注册表中的加密二进制数据。
  • Mimikatz 输出中以 LSA Secrets 标识。

2.6 SAM Hashes

定义

SAM(Security Accounts Manager)存储本地用户账户的 NTLM 哈希,用于本地身份验证。

加密机制
  • NTLM 哈希:用户密码的 NTLM 哈希存储在 SAM 数据库中。
  • SYSKEY 加密:SAM 数据库整体通过 SYSKEY 加密。
  • 存储位置HKLM\SAM\SAM\Domains\Account\Users
存储位置
  • 注册表HKLM\SAM
  • 文件:SAM 文件(C:\Windows\System32\config\SAM)。
后渗透利用
  • 提取方法
    • 使用 Mimikatz 的 lsadump::sam 模块提取。
    • 从注册表或 SAM 文件 dump 哈希。
    • 使用哈希进行 Pass-the-Hash 攻击。
  • 工具
    • Mimikatz
    • secretsdump(Impacket)
  • 限制:需要 SYSTEM 权限。
标志性特征
  • NTLM 哈希格式(十六进制)。
  • 注册表中的加密二进制数据。

2.7 Kerberos Tickets

定义

Kerberos Tickets 是 Windows 域环境中用于身份验证的票据,包括 TGT(Ticket Granting Ticket)和 TGS(Ticket Granting Service)。

加密机制
  • Kerberos 协议:使用域控制器的密钥加密票据。
  • 存储位置:LSASS 进程内存中。
存储位置
  • 内存:LSASS 进程中缓存的票据。
  • 文件:通过导出(如 .kirbi 文件)保存。
后渗透利用
  • 提取方法
    • 使用 Mimikatz 的 sekurlsa::ticketskerberos::list 提取票据。
    • 使用 Rubeus 导出票据或进行 Pass-the-Ticket 攻击。
  • 工具
    • Mimikatz
    • Rubeus
  • 限制:需要 SYSTEM 权限或用户会话。
标志性特征
  • 内存中以 Kerberos 票据格式存储(如 .kirbi 文件)。
  • Mimikatz 输出中以 TGTTGS 标识。

3. 后渗透中的操作建议

3.1 识别加密字符串

  • 文件系统:检查 .xml.ps1.txt 文件,寻找 cpassword01000000dSecureString 相关内容。
  • 注册表:检查 HKLM\SAMHKLM\SECURITYHKCU\Software
  • 内存:dump LSASS 进程或 PowerShell 进程内存。
  • 网络共享:访问 SYSVOL 共享,提取 GPP 相关 XML 文件。

3.2 解密方法

  • PSCredential/SecureString
    • 使用 PowerShell 反射或 Mimikatz 解密内存中的数据。
    • 序列化数据需要 DPAPI 主密钥。
  • DPAPI Blob
    • 获取主密钥(C:\Users\<User>\AppData\Roaming\Microsoft\Protect)。
    • 使用 Mimikatz 或 SharpDPAPI 解密。
  • GPP
    • 提取 SYSVOL 中的 XML 文件,使用公开的 AES 密钥解密。
  • LSA Secrets/SAM Hashes
    • 获取 SYSTEM 权限,dump 注册表或 SAM 文件。
  • Kerberos Tickets
    • 从 LSASS 内存中提取票据,导出为 .kirbi 文件。

3.3 工具推荐

  • Mimikatz:支持 DPAPI、LSA Secrets、SAM Hashes、Kerberos Tickets 提取。
  • SharpDPAPI:轻量级 DPAPI 解密工具。
  • PowerSploitGet-GPPPassword 用于 GPP 密码提取。
  • Rubeus:Kerberos 票据提取和利用。
  • Impacketsecretsdump 用于 SAM Hashes 提取。
http://www.lryc.cn/news/573793.html

相关文章:

  • 等等等等等等
  • PostgreSQL全栈部署指南:从零构建企业级高可用数据库集群
  • pyqt f-string
  • jenkins对接、jenkins-rest
  • LocalAI: OpenAI、Claude 等的开源替代
  • 3、NLP黄金九步法(问题定义-数据获取-数据探索)
  • Flink Connector Kafka深度剖析与进阶实践指南
  • js 函数参数赋值问题
  • 【Android】am命令
  • ROS 2 中 Astra Pro 相机与 YOLOv5 检测功能编译启动全记录
  • Oracle 数据库查询:单表查询
  • 华为云Flexus+DeepSeek征文|开启DeepSeek-V3+R1商用服务之旅
  • 查询消耗 IO 多的 SQL -达梦
  • C++法则1:在 C++ 中,所有的具名变量都是左值,即使它们的类型是右值引用。
  • 云原生/容器相关概念记录
  • 第八章 网络安全
  • 基于Vue.js的图书管理系统前端界面设计
  • 包教包会,ES6类class的基本入门
  • TS类型啊啊啊2
  • 计算机系统结构课堂测验
  • Claude:Anthropic打造的安全优先AI助手
  • 2025中科院2区SCI-状态优化算法Status-based Optimization-附Matlab免费代码
  • 基于split-Bregman算法的L1正则化matlab仿真,对比GRSR算法
  • 《情感反诈模拟器》2025学习版
  • 【Redis】解码Redis中hash类型:理解基础命令,以及内部编码方式和使用场景
  • Docker Desktop 4.42集成的MCP工具包
  • 安卓对外发布工程源码:怎么做到仅UI层公布
  • linux-vim编辑器
  • Perplexity AI:对话式搜索引擎的革新者与未来认知操作系统
  • 课程专注度分析系统文档