开源渗透框架Havoc

admin 2024年5月12日09:45:00评论10 views字数 4239阅读14分7秒阅读模式

开源渗透框架Havoc

本期作者/牛杰

介绍

Havoc是一个开源渗透框架,其客户端用 C++ 和 Qt 编写的跨平台 UI,Teamserver用 Golang 编写,支持团队合作,HTTPHTTPS监听器,可定制化C2profile,Havoc可以作为CobaltStrike的代替方案。

安装

Havoc 源代码可在 github 上clone

git clone https://github.com/HavocFramework/Havoc.git

下载后进入Havoc目录

cd Havoc

安装依赖项

注:代码构建时请使用最新版本的QT和python3.10。

本篇使用kali构建项目,构建前请查看kali版本,如果使用其他环境构建,需要根据实际环境做对应的修改

cat /etc/os-release

如果你的kali版本为2021.2,其自带的python是3.9,需要升级之后安装依赖库

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

安装go依赖项

Havoc的teamserver需要golang 1.18才能编译和运行

cd teamserver
go mod download golang.org/x/sys
go mod download github.com/ugorji/go

编译Teamserver

cd ..
make ts-build

启动Teamserver

./havoc server --profile ./profiles/havoc.yaotl -v

-v 参数 在打印日志签名加时间戳

开源渗透框架Havoc

启动默认端口为40056,默认账号为5pider,密码password1234,这些配置信息可以通过profiles目录下的xxx.yaotl更改,将在后文中介绍。启动项可以添加--debug参数,查看debug信息

开源渗透框架Havoc

编译客户端

如果编译环境内存2G可能会卡死,建议内存4G以上

make client-build

启动客户端

./havoc client
开源渗透框架Havoc

登录后

开源渗透框架Havoc

profiles

profiles文件夹有三个默认yaotl文件,yaotl包含 teamserver 运行所需的配置信息,yaotl 是流行配置语言 HCL 的一个分支。

开源渗透框架Havoc

Teamserver配置

Teamserver {
    Host = "0.0.0.0"
    Port = 40056

    Build {
        Compiler64 = "data/x86_64-w64-mingw32-cross/bin/x86_64-w64-mingw32-gcc"
        Compiler86 = "data/i686-w64-mingw32-cross/bin/i686-w64-mingw32-gcc"
        Nasm = "/usr/bin/nasm"
    }
}

Host 绑定指定的地址

Port 绑定指定的端口

Build 指定用于编译 C 和汇编文件的编译器,默认配置在data目录下,可以根据自己环境进行替换。

Operators配置

Operators {
  user "5pider" {
    Password = "password1234"
  }

  user "Neo" {
    Password = "password1234"
  }
}

配置客户端连接到Server的用户,默认用户可以在这里更改

Listeners

在启动时添加监听器,Havoc在client端可以通过可视化工具对监听器进行配置。

http_smb.yaotl文件Listener

Listeners {
    Http {
        Name         = "teams profile - http"
        Hosts = [
            "5pider.net", # our callback host.
        ]
        HostBind = "0.0.0.0" # the address where the listener should bind to.
        HostRotation = "round-robin"
        PortBind = 443
        PortConn = 443
        Secure = false # for now disabled so we can see the traffic content. (but alaways enabled this!!!)
        KillDate = "2024-01-02 12:00:00"
        UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36"

        Uris = [
            "/Collector/2.0/settings/"
        ]

        Headers = [
            "Accept: json",
            "Referer: https://teams.microsoft.com/_",
            "x-ms-session-id: f73c3186-057a-d996-3b63-b6e5de6ef20c",
            "x-ms-client-type: desktop",
            "x-mx-client-version: 27/1.0.0.2021020410",
            "Accept-Encoding: gzip, deflate, br",
            "Origin: https://teams.microsoft.com"
        ]

        Response {
            Headers = [
                "Content-Type: application/json; charset=utf-8",
                "Server: Microsoft-HTTPAPI/2.0",
                "X-Content-Type-Options: nosniff",
                "x-ms-environment: North Europe-prod-3,_cnsVMSS-6_26",
                "x-ms-latency: 40018.2038",
                "Access-Control-Allow-Origin: https://teams.microsoft.com",
                "Access-Control-Allow-Credentials: true",
                "Connection: keep-alive"
            ]
        }

    }

    Smb {
        Name     = "Pivot - Smb"
        PipeName = "demon_pipe"
    }

使用http_smb.yaotl启动服务端,客户端看到的可视化界面

teams profile - http

开源渗透框架Havoc

Smb

开源渗透框架Havoc

Demon

Havoc的agent被称为Demon,类似于CobaltStrike的Beacon,源码文件在payloadsDemon下。通过可视化界面Attacks生成Payload,也提供了丰富的预设编译选项。

睡眠混淆

Havoc默认睡眠技术WaitForSingleObjectEx,不执行任何类型睡眠加密。睡眠混淆技术是恶意载荷为达到间歇性执行、隐藏自身活动以逃避内存扫描的目的所采用的隐匿策略,在对抗沙箱中能起到保护自身恶意行为的作用,Havoc原生生成器提供了三种睡眠混淆技术。

  • Ekko,该方案利用线程池API创建计时器,在回调中调用内存权限修改、内存加解密于延迟执行的功能代码。该技术在商业渗透框架Nighthawk上同样被应用。

  • Foliage选项,该技术通过建一个新线程并使用 NtApcQueueThread 对 ROP 链, ROP 链会加密内存并延迟执行。睡眠混淆根据实际需求自行选择。

  • Zilean 在Havoc0.6版本新添加的睡眠混淆技术,使用RtlRegisterWait。

开源渗透框架Havoc

sleep调用堆栈欺骗

安全人员分析恶意程序时,会验证恶意程序的返回地址是否为已加载模块地址,通过rax或者rbx直接跳转敏感函数(VirtualProtect、加密,内存拷贝等)而不是获取地址再调用的方式。

开源渗透框架Havoc

宏定义

开源渗透框架Havoc

代码实现

开源渗透框架Havoc

代理DLL加载

您通过VirtualAlloc或相对NTAPI NtAllocateVirtualMemory分配一些内存,然后复制shellcode并执行它,这些shellcode有自己的依赖项,需要调用LoadLibrary加载DLL。如果你执行LoadLibrary来加载DLL,这意味着在用户模式下或通过内核回调/ETW 挂钩的任何 EDR 都可以检查上次返回地址区域或调用来自何处,然后杀死您的有效负载。因此,Havoc提供了三种ntdll中未记录的API(RtlRegisterWait、RtlCreateTimer、RtlQueueWorkItem)来加载DLL。

测试上线

通过payload生成的Demon上线

开源渗透框架Havoc

开源渗透框架Havoc

原文始发于微信公众号(蛇矛实验室):开源渗透框架Havoc

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年5月12日09:45:00
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   开源渗透框架Havochttps://cn-sec.com/archives/2731097.html

发表评论

匿名网友 填写信息