
GRAT2 C2
(c).-.(c) (c).-.(c) (c).-.(c) (c).-.(c) (c).-.(c)
/ ._. \ / ._. \ / ._. \ / ._. \ / ._. \
\( Y )/__ __\( Y )/__ __\( Y )/__ __\( Y )/__ __\( Y )/
(_.-/'-'\-._)(_.-/'-'\-._)(_.-/'-'\-._)(_.-/'-'\-._)(_.-/'-'\-._)
|| G || || R || || A || || T || || 2 ||
_.' `-' '._ _.' `-' '._ _.' `-' '._ _.' `-' '._ _.' `-' '._
(.-./`-'\.-.)(.-./`-`\.-.)(.-./`-'\.-.)(.-./`-'\.-.)(.-./`-'\.-.)
`-' `-' `-' `-' `-' `-' `-' `-' `-' `-'
v1.1 beta!
关于 GRAT2
GRAT2 是一个用 python3 编写的命令与控制(C2)工具,客户端使用 .NET 4.5。主要创意来自 Georgios Koumettou,他发起了这个项目。
我们为什么开发 GRAT2?
我们知道市面上已有大量 C2 工具,但我们开发这个工具是出于对 C2 工作原理以及各种规避技术的好奇。仅此而已! ;-)
当前功能:
规避技术:
- 沙箱检测(检查机器是否加入域,如未加入则退出)。
- 修补 Windows 事件跟踪(ETW)日志记录。
- 修补反恶意软件扫描接口(AMSI)。
- caretrun - 通过 cmd.exe 以脱字符格式(^i^p^c^o^n^f^i^g)执行命令,并使用 explorer.exe 作为父进程 PID(规避部分 AV/EDR)。
通信方式:
- HTTP 和 HTTPS
- DNS - 当前仅支持 TXT 记录。
- 使用 XOR 和 base64 编码的通信。
- 支持代理。
模块:
- startdns - 启动 DNS 监听服务器。
- listagents - 列出当前 agent。
- localip - 获取机器的本地 IP 地址。
- uac - 尝试通过静默磁盘清理并结合父 PID 欺骗技术绕过 UAC。
- maketoken - 移除当前令牌,并使用给定的凭据(域或本地)创建一个新令牌。
- revtoself - 移除当前令牌。
- stealtoken - 尝试从正在运行的进程中窃取令牌并模拟用户(需要管理员权限)。
- rportfwd - 尝试创建反向端口转发。
- whoami - 显示当前用户。
- hostname - 显示机器主机名。
- domain - 显示域 FQDN。
- screenshot - 截取屏幕截图。
- download - 下载文件。
- upload - 上传文件。
- cd - 更改目录。
- run - 通过 cmd.exe 执行命令,并使用 explorer.exe 作为父进程 PID。
- caretrun - 通过 cmd.exe 以脱字符格式(^i^p^c^o^n^f^i^g)执行命令,并使用 explorer.exe 作为父进程 PID(规避部分 AV/EDR)。
- sleep - 设置新的休眠时间。
- exit - 退出。
- shell - 通过 cmd.exe 执行命令。
- powershell - 使用非托管 PowerShell 执行 PowerShell 命令。
- powerscript - 使用非托管 PowerShell 执行 PowerShell 脚本。
- executeassembly - 尝试在内存中执行 .NET 程序集。
- ps - 打印当前进程。
- pwd - 打印当前目录。
- ls - 列出目录内容。
- pid - 打印当前进程 ID。
进程注入技术:
- dynamic_injectcrt - 尝试使用动态调用将 shellcode 注入到进程中。
- ppid_processhollow - 尝试使用进程镂空(Process Hollowing)和父 PID 欺骗(explorer.exe)技术将 shellcode 注入到进程中。
- processhollow - 尝试使用进程镂空技术将 shellcode 注入到进程中。
- injectppidapc - 尝试使用 QueueUserAPC 和父 PID 欺骗(explorer.exe)技术将 shellcode 注入到进程中。
- injectapc - 尝试使用 QueueUserAPC 技术将 shellcode 注入到进程中。
- injectcrt - 尝试使用远程创建线程(Create Remote Thread)技术将 shellcode 注入到远程进程中。
请参考 GRAT2_Shellcodes 以使用 Donut 生成位置无关的 shellcode。
待办事项:
- SMB 监听器。
- 改进 DNS 监听器,增加更多功能,如 A 记录、从 DNS 切换到 HTTP 等。
- 添加日志记录。
- 实现 SOCKS5。
- 修复已知问题。
配置客户端配置文件:

常规设置和 HTTP/s 监听器:
-
c2 - 您的 GRAT2 服务器 IP 地址或主机名(必填)。
-
sandboxEvasion - 如果启用(1),GRAT2 将仅在已加入域的计算机上执行,否则 GRAT2 将终止。如果禁用(0),GRAT2 将仅在未加入域的计算机上执行,否则将终止(默认:禁用)。
-
patchEtw - 如果启用(1),将修补 Windows 事件跟踪(默认:启用)。
-
patchAmsi - 如果启用(1),将修补反恶意软件扫描接口(默认:启用)。
-
sleep - 设置休眠时间(默认:3 秒)。
-
UserAgent - 设置用户代理(默认:"Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; yie11; rv:11.0) like Gecko")。
-
initialUrl - 初始 GRAT2 HTTP GET 请求(默认:jquery.js)。
-
sendResults - GRAT2 HTTP POST 结果请求(默认:login.aspx)。
注意:如果更改了 initialUrl 或 sendResults 字符串,您必须更新 GRAT2_Server/handlers.py 中第 49 行和第 84 行的对应字符串。
DNS 监听器:
- DNSListener - 启用(1)或禁用(0)。如果启用,请相应地配置 GRAT2 服务器(见下文)。
- DNSServer - 您的 GRAT2 DNS 服务器。
- dnsMaxTXT - TXT 记录的最大长度(默认:255)。
- maxDNSChar - 每个 DNS 子域的最大字符数(默认:63)。
配置服务器配置文件:

HTTP/s 和 DNS 监听器:
- HOST_NAME - 您的 GRAT2 服务器 IP 地址或主机名。
- PORT_NUMBER - 监听端口(80 或 443)。
- server_pem - 您的 PEM 文件路径。
- dnsDomainName - 您的 GRAT2 DNS 服务器。
使用方法:
- 使用 Visual Studio 打开 GRAT2 客户端项目(GRAT2_Client.sln),将解决方案配置从 Debug 改为 Release,然后生成解决方案。
- 在 GRAT2 服务器上安装两个依赖项(dnslib 和 termcolor):pip3 install -r requirements.txt
- 启动 GRAT2 服务器:

- 运行 GRAT2 客户端可执行文件 - GRAT2_Client\bin\Release\GRAT2_Client.exe
- 与 agent 交互:

发布说明:
版本 1.0 - 2020年9月5日
版本 1.1 - 2020年12月13日
- 添加 DNS 监听器
- 添加 HTTPS 监听器
- 添加列出 agent 功能
- 添加 localip 模块,可获取机器的本地 IP 地址
- 重写非托管 PowerShell
- 从 .NET 4.0 改为 .NET 4.5
致谢:
此外,源代码中对每位作者及参考链接均已标注。
免责声明:
本项目仅可用于授权测试或教育目的。未经事先许可使用本软件攻击目标系统是违法的,因误用本软件造成的任何损失,作者不承担任何责任。