RedPeanut 是一个用 .Net Core 2 开发的小型 RAT,其代理基于 .Net 3.5 / 4.0。
__________________________________________________________________________
ooooooo________________oo_ooooooo___________________________________oo____
oo____oo___ooooo___oooooo_oo____oo__ooooo___ooooo__oo_ooo__oo____o__oo____
oo____oo__oo____o_oo___oo_oo____oo_oo____o_oo___oo_ooo___o_oo____o_oooo___
ooooooo___ooooooo_oo___oo_oooooo___ooooooo_oo___oo_oo____o_oo____o__oo____
oo____oo__oo______oo___oo_oo_______oo______oo___oo_oo____o_ooo___o__oo__o_
oo_____oo__ooooo___oooooo_oo________ooooo___oooo_o_oo____o_oo_ooo____ooo__
__________________________________________________________________________
________________________________________________RedPeanut_v0.3.0___@b4rtik
__________________________________________________________________________
当前正在测试中。
已知模块问题:
process -> spawnasagent
process -> spawnasshellcode
RedPeanut 是一个基于 .Net Core 2 开发的小型 RAT,其代理基于 .Net 3.5 / 4.0。RedPeanut 的代码执行基于 DonutCS 生成的 shellcode。因此,虽然它使用 .Net 开发,但并非完全依赖 Assembly.Load。这增加了检测面,但使我们能够练习和实验与 dotnet 环境、进程管理和注入相关的各种规避技术。此行为可以在运行时通过 "managed" 和 "unmanaged" 命令更改。如果你对可用于真实渗透测试的一致且稳定的 .Net C2 框架感兴趣,我推荐 Covenant。
RedPeanut 集成了以下威胁工具:
RedPeanut 代理可以编译为 .Net 3.5 和 4.0 版本,并通过 NamedPipe 支持横向移动。 代理在非托管模式下执行时,会在独立进程中执行关键任务,以防止 AV 响应检测或执行错误导致整个代理丢失。
执行流程如下:
代理目前仅支持 https 信道。
代理的 checkin 协议非常简单:
另外,可以激活覆盖信道功能(目前仅为 PoC)。其思路是模拟真实用户的网络流量。通常一个网页由 HTML 页面及其显示所需的所有对象(如 CSS、图片等)组成。在请求新任务时,服务器的响应将不是直接加密的任务,而是一个 HTML 页面,从中提取包含加密任务的图片链接。图片的 HTTP 请求将包含 Referer 头。
内容分发分为 4 个信道:
RedPeanut 能够自定义服务器端和客户端的网络痕迹。可设置的属性包括:
域名前置
要启用域名前置支持,需要在客户端部分(POST 和 GET 均需)设置 "Host" 头(在默认配置 2 中有示例)。
PowerShellExecuter 模块允许在运行空间中执行单行命令或文件,并已内置 AMSI 绕过、日志绕过和 PowerView。
从版本 0.3.0 开始,RedPeanutAgent 支持 blockdlls 命令。启用此选项后,在非托管模式下为执行任务而创建的子进程将以 PROCESS_CREATION_MITIGATION_POLICY_BLOCK_NON_MICROSOFT_BINARIES_ALWAYS_ON 属性创建。此属性可防止进程加载非 Microsoft 签名的 DLL,从而保护我们的任务免受 AV 和 EDR 钩子技术的影响。
RedPeanutAgent 使用动态 DLL 加载来避免使用可疑的 DLL 导入。动态 DLL 加载的功劳归功于 @TheRealWover、@cobbr_io 和 @FuzzySec 在 SharpSploit 中的工作。
一些 AV 和 EDR 供应商使用钩子技术来跟踪活动。为避免使用被钩子的系统调用,RedPeanutAgent 通过自动注入必要代码来使用直接系统调用。直接系统调用的功劳归功于 @Cneelis
要运行 RedPeanut,你需要安装 dotnet。在 Kali 上安装 dotnet:
wget -qO- https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.asc.gpg
mv microsoft.asc.gpg /etc/apt/trusted.gpg.d/
wget -q https://packages.microsoft.com/config/debian/9/prod.list
mv prod.list /etc/apt/sources.list.d/microsoft-prod.list
chown root:root /etc/apt/trusted.gpg.d/microsoft.asc.gpg
chown root:root /etc/apt/sources.list.d/microsoft-prod.list
apt-get install apt-transport-https
apt-get update
apt-get install dotnet-sdk-2.1
git clone --recursive https://github.com/b4rtik/RedPeanut.git
对于覆盖信道功能,需要安装 libgdiplus 库,因此:
对于 Linux 用户:
apt-get install -y libgdiplus
对于 OSx
brew install mono-libgdiplus
程序集签名密钥生成
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community>sn.exe -k 4096 key.snk
然后将 key.snk 复制到 Workspace/KeyFile
root@kali:~# cd RedPanut
root@kali:~/RedPeanut# dotnet run
Using launch settings from /root/Projects/RedPeanut/Properties/launchSettings.json...
Enter password to encrypt serverkey:
__________________________________________________________________________
ooooooo________________oo_ooooooo___________________________________oo____
oo____oo___ooooo___oooooo_oo____oo__ooooo___ooooo__oo_ooo__oo____o__oo____
oo____oo__oo____o_oo___oo_oo____oo_oo____o_oo___oo_ooo___o_oo____o_oooo___
ooooooo___ooooooo_oo___oo_oooooo___ooooooo_oo___oo_oo____o_oo____o__oo____
oo____oo__oo______oo___oo_oo_______oo______oo___oo_oo____o_ooo___o__oo__o_
oo_____oo__ooooo___oooooo_oo________ooooo___oooo_o_oo____o_oo_ooo____ooo__
__________________________________________________________________________
________________________________________________RedPeanut_v0.3.0___@b4rtik
__________________________________________________________________________
[*] No profile available, creating new one...
[RP] >
DonutCS 是一个 shellcode 生成工具,可以从 .NET 程序集创建位置无关的 shellcode 负载。此 shellcode 可用于将该程序集注入任意 Windows 进程。给定任意 .NET 程序集、参数和入口点(如 Program.Main),它会生成从内存加载它的位置无关 shellcode。.NET 程序集可以从 URL 分阶段获取,或者通过直接嵌入在 shellcode 中进行无阶段加载。
CLR 持久化技术首次在 这篇文章 中由 @Am0nsec 提出。该技术在于执行应用程序域管理器钩子。如文章所述,需要用于执行钩子的程序集,该程序集可在 GAC 中找到。要在 GAC 中使用的程序集必须具有强名称,并使用密钥进行签名。CLR 持久化模块需要一个密钥来签署程序集,可以使用 sn.exe 工具生成,如下所示:
**********************************************************************
** Visual Studio 2017 Developer Command Prompt v15.9.3
** Copyright (c) 2017 Microsoft Corporation
**********************************************************************
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community>sn.exe -k 4096 key.snk
将 key.snk 文件复制到 Workspace/KeyFile 文件夹。此文件将用于签署持久化程序集。
RedPeanut 中包含的一些知名工具(如 GhostPack 工具)被完整包装并在客户端执行。要更新工具(例如 SeatBelt)而无需更新整个仓库,需要:克隆 Seatbelt 仓库,将 "Main" 方法重命名为 "Execute",添加 public 修饰符,然后重新编译为 dll。必须使用 RastaMouse 的脚本 Get-CompressedShellcode.ps1 对 dll 进行压缩并编码为 Base64。