1.mimikatz源码分析-lsadump模块(注册表)
2.Linux SID 开发指南
mimikatz源码分析-lsadump模块(注册表)
mimikatz是码获码工一款内网渗透中的强大工具,本文将深入分析其lsadump模块中的取源sam部分,探索如何从注册表获取用户哈希。码获码工
首先,取源简要了解一下Windows注册表hive文件的码获码工结构。hive文件结构类似于PE文件,取源keymetrics监控源码包括文件头和多个节区,码获码工每个节区又有节区头和巢室。取源其中,码获码工巢箱由HBASE_BLOCK表示,取源巢室由BIN和CELL表示,码获码工整体结构被称为“储巢”。取源通过分析hive文件的码获码工结构图,可以更直观地理解其内部组织。取源
在解析过程中,码获码工自动抢红包 源码需要关注的关键部分包括块的签名(regf)和节区的签名(hbin)。这些签名对于定位和解析注册表中的数据至关重要。
接下来,深入解析mimikatz的解析流程。在具备sam文件和system文件的情况下,主要分为以下步骤:获取注册表system的句柄、读取计算机名和解密密钥、获取注册表sam的句柄以及读取用户名和用户哈希。若无sam文件和system文件,mimikatz将直接通过官方API读取本地机器的注册表。
在mimikatz中,会定义几个关键结构体,包括用于标识操作的注册表对象和内容的结构体(PKULL_M_REGISTRY_HANDLE)以及注册表文件句柄结构体(HKULL_M_REGISTRY_HANDLE)。这些结构体包含了文件映射句柄、discuz模板源码安装映射到调用进程地址空间的位置、巢箱的起始位置以及用于查找子键和子键值的键巢室。
在获取注册表“句柄”后,接下来的任务是获取计算机名和解密密钥。密钥位于HKLM\SYSTEM\ControlSet\Current\Control\LSA,通过查找键值,将其转换为四个字节的密钥数据。利用这个密钥数据,mimikatz能够解析出最终的密钥。
对于sam文件和system文件的操作,主要涉及文件映射到内存的过程,通过Windows API(CreateFileMapping和MapViewOfFile)实现。这些API使得mimikatz能够在不占用大量系统资源的情况下,方便地处理大文件。纯源码垛机
在获取了注册表系统和sam的句柄后,mimikatz会进一步解析注册表以获取计算机名和密钥。对于密钥的获取,mimikatz通过遍历注册表项,定位到特定的键值,并通过转换宽字符为字节序列,最终组装出密钥数据。
接着,解析过程继续进行,获取用户名和用户哈希。在解析sam键时,mimikatz首先会获取SID,然后遍历HKLM\SAM\Domains\Account\Users,解析获取用户名及其对应的unity迷宫游戏源码哈希。解析流程涉及多个步骤,包括定位samKey、获取用户名和用户哈希,以及使用samKey解密哈希数据。
对于samKey的获取,mimikatz需要解密加密的数据,使用syskey作为解密密钥。解密过程根据加密算法(rc4或aes)有所不同,但在最终阶段,mimikatz会调用系统函数对数据进行解密,从而获取用户哈希。
在完成用户哈希的解析后,mimikatz还提供了一个额外的功能:获取SupplementalCreds。这个功能可以解析并解密获取对应用户的SupplementalCredentials属性,包括明文密码及哈希值,为用户提供更全面的哈希信息。
综上所述,mimikatz通过解析注册表,实现了从系统中获取用户哈希的高效功能,为内网渗透提供了强大的工具支持。通过深入理解其解析流程和关键结构体的定义,可以更好地掌握如何利用mimikatz进行深入的安全分析和取证工作。
Linux SID 开发指南
介绍Linux内核中基于Sunxi硬件平台的SID模块驱动的详细设计,旨在为软件编码和维护提供基础。SID提供四大部分功能:ChipID、SoC Version、Efuse功能、状态位。
ChipID功能用于识别全志SoC的唯一性,如同A型号的唯一标识。ChipID由位组成,存放于Efuse的起始位置。具体bit含义由生产制造部定义。
SoC Version功能包含Bonding ID,表示封装类型。相关信息存储在寄存器中,统一管理于SID模块。BSP返回组合值供应用判断处理。
Efuse功能提供可编程永久存储空间,支持一次从0到1的写操作。SRAM方式用于容量大于位的情况。
一些状态位如Secure Enable,指示当前系统是否开启了Security属性。状态位保存在SID模块的0xa0寄存器。
SID是一个独立模块,存放在drivers/soc/sunxi目录中,没有依赖其他子系统。提供API接口供其他模块调用。
模块在Device tree中的配置通过sunxi-sid节点实现,需要添加secure_status、chipid、rotpk子节点。
SID驱动源代码在目录下,对外提供接口头文件:./include/linux/sunxi-sid.h。无需重新配置,配置路径在longan环境中执行./build.sh menconfig。
模块内部功能划分为两部分:SID Register RW和SID Api。SID Register RW封装了寄存器读取接口和模块基地址获取。SID Api以API方式提供功能接口。
关键数据定义包括常量、宏定义、数据结构和全局变量。常量和宏定义用于索引Key名称,数据结构如soc_ver_map管理SoC信息,soc_ver_reg记录位置信息。全局变量保存解析后的ChipID、SoC_Ver等信息。
模块流程设计包括SoC信息读取流程和Efuse Key读取流程。SoC信息读取遵循统一流程,Efuse Key读取流程涉及判断存在性和访问权限。
接口设计包括接口函数和内部函数。接口函数如sunxi_get_platform、sunxi_get_soc_chipid等实现特定功能。内部函数如sid_get_base、sid_put_base、sid_rd_bits提供底层接口。
启用安全系统后,非安全空间无法访问Efuse信息,需要使用SMC指令读取。sunxi_smc_readl()实现在sunxi-smc.c文件中,位于drivers/char/sunxisysinfo目录。