Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
Malleable-C2-Randomizer — 一个用于随机化 Cobalt Strike 可塑性 C2 配置文件并降低触发基于签名的检测控制几率的脚本。 | Kitploit
工具/GitHubGitHub/bluscreenofjeff/malleable-c2-randomizer
漏洞利用框架Payload生成IDS/IPS规避渗透测试命令与控制红队
GitHubbluscreenofjeff/malleable-c2-randomizer

Malleable-C2-Randomizer

一个用于随机化 Cobalt Strike 可塑性 C2 配置文件并降低触发基于签名的检测控制几率的脚本。

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享
查看仓库
454863年前Kitploit 审核通过

Malleable-C2-Randomizer

该脚本通过使用元语言随机化 Cobalt Strike 的 Malleable C2 配置文件,有望降低触发基于签名的检测控制的几率。简而言之,脚本解析提供的模板,将变量替换为来自提供的或内置词表的随机值,用 c2lint 测试新模板,并在没有 c2lint 错误的情况下输出新的 Malleable C2 配置文件。

与此脚本兼容的示例 Malleable C2 配置文件可以在本仓库的 Sample Templates 目录中找到。

有关此脚本的更多信息,请参阅我的博客文章 Randomized Malleable C2 Profiles Made Easy。

目录

  • 脚本语法
    • 基本选项
    • 自定义词表
  • 替换元语言
    • 变量列表
    • 构建词表
  • 示例模板与输出
  • 更多资源

脚本语法

root@kitploit:~
python malleable-c2-randomizer.py [-h] -profile PROFILE
                                  [-count COUNT]
                                  [-cobalt COBALT]
                                  [-output OUTPUT]
                                  [-notest]
                                  [-charset CHARSET]
                                  [-wordlist WORDLIST]
                                  [-useragent USERAGENT]
                                  [-spawnto SPAWNTO]
                                  [-pipename PIPENAME]
                                  [-pipename_stager PIPENAME_STAGER]
                                  [-dns_stager_subhost DNS_STAGER_SUBHOST]

基本选项

参数描述
-profile, -p要随机化的 Malleable C2 模板路径(必填)
-count, -c生成的随机化配置文件数量 {默认 = 1}
-cobalt, -d

自定义词表

如果未提供词表,默认将使用内置列表。关于创建这些列表的更多信息,请参见下面的 构建词表 或本仓库中的 Sample Wordlists 文件夹。

其中大部分词表变量直接与 Malleable C2 选项相关。有关这些配置文件选项的更多信息,请查看官方文档。

替换元语言

替换元语言由特定的变量组成,部分变量支持可选的重复次数,并用双百分号包裹,如下所示:

root@kitploit:~
%%变量名:次数%%

另一个示例,以下变量将生成 20 个字母数字字符:

root@kitploit:~
%%alphanumeric:20%%

变量列表

构建词表

词表文件是按照换行分隔、制表符分隔或连续字符串(取决于词表类型)放置在一个文本文件中的。

以下词表应为每行一条记录,以换行分隔:

  • wordlist
  • useragent
  • pipename
  • pipename_stager
  • dns_stager_subhost
  • dns_stager_prepend

spawnto 词表稍微复杂一些。Malleable C2 需要同时提供 x86 和 x64 选项来修改所有进程生成。因此,词表的每一行应包含由制表符分隔的 x86 和 x64 进程路径,其中 x86 进程在前。例如:

root@kitploit:~
%windir%\\syswow64\\eventvwr.exe	%windir%\\sysnative\\eventvwr.exe

需要注意的是,进程路径中的 syswow64 和 sysnative 字符串应为小写。

最后一种词表类型是自定义字符集。该文件应包含用于脚本随机替换的任何字符。例如,字符集文件为 AEIOUY,变量为 %%custom:5%%,则会从字符集中输出五个随机字符。在构建此字符集时,请记住某些字符禁止出现在 URI 中,并可能干扰 Beacon 的通信。

示例词表请参见本仓库中的 Sample Wordlists 目录。

示例模板与输出

以下是修改过的 Amazon 配置文件片段:

root@kitploit:~
# 此配置文件已修改为适用于 Malleable C2 Profile Randomizer

#
# Amazon 浏览流量配置文件
# 
# 作者: @harmj0y
#

set sleeptime "%%number:2%%00";
set jitter    "1%%number%%";
set maxdns    "24%%number%%";
set useragent "%%useragent%%";

http-get {

    set uri "/s/ref=nb_sb_noss_1/%%number:3%%-%%number:8%%-%%number:7%%/field-keywords=%%word%%";

    client {

        header "Accept" "*/*";
        header "Host" "www.amazon.com";

        metadata {
            base64;
            prepend "session-token=";
            prepend "skin=noskin;";
            append "csm-hit=s-%%alphanumeric:20%%|%%number:13%%";
            header "Cookie";
        }
    }
}

以下是同一配置文件的两组输出:

root@kitploit:~
# 此配置文件已修改为适用于 Malleable C2 Profile Randomizer

#
# Amazon 浏览流量配置文件
# 
# 作者: @harmj0y
#

set sleeptime "5600";
set jitter    "19";
set maxdns    "244";
set useragent "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.1";

http-get {

    set uri "/s/ref=nb_sb_noss_1/818-61846941-6716865/field-keywords=number";

    client {

        header "Accept" "*/*";
        header "Host" "www.amazon.com";

        metadata {
            base64;
            prepend "session-token=";
            prepend "skin=noskin;";
            append "csm-hit=s-UXnlEVYWc36qEuDMFPzW|2872195700726";
            header "Cookie";
        }
    }
}
root@kitploit:~
# 此配置文件已修改为适用于 Malleable C2 Profile Randomizer

#
# Amazon 浏览流量配置文件
# 
# 作者: @harmj0y
#

set sleeptime "7400";
set jitter    "19";
set maxdns    "246";
set useragent "Mozilla/5.0 (Windows NT 10.0; WOW64)";

http-get {

    set uri "/s/ref=nb_sb_noss_1/684-10075672-1686806/field-keywords=year";

    client {

        header "Accept" "*/*";
        header "Host" "www.amazon.com";

        metadata {
            base64;
            prepend "session-token=";
            prepend "skin=noskin;";
            append "csm-hit=s-ub5oBmGd0pnDoImCjDyK|2539750656854";
            header "Cookie";
        }
    }
}

更多资源

  • Randomized Malleable C2 Profiles Made Easy - Jeff Dimmock
  • Malleable Command and Control Documentation - Raphael Mudge
  • Malleable C2 Profiles - GitHub
  • How to Write Malleable C2 Profiles for Cobalt Strike - Jeff Dimmock
  • Cobalt Strike 2.0 - Malleable Command and Control - Raphael Mudge
  • Cobalt Strike 3.6 - A Path for Privilege Escalation - Raphael Mudge
  • A Brave New World: Malleable C2 - Will Schroeder
下载工具
Cobalt Strike 所在目录(用于 c2lint){默认 = 当前目录}
-output, -o输出基础名称 {默认 = 模板基础名加随机字符串}
-notest, -n跳过 c2lint 测试(标志)
参数描述
-charset包含自定义字符集的文件,用于 %%customchar%% 变量
-wordlist包含自定义词列表的文件,用于 %%word%% 变量
-useragent包含用户代理列表的文件
-spawnto包含自定义 spawnto 进程列表的文件
-pipename包含自定义管道名称列表的文件
-pipename_stager包含自定义管道名称(stager)列表的文件
-dns_stager_subhost包含自定义 DNS stager 子域名列表的文件
-dns_stager_prepend包含自定义 DNS stager 前置字符串列表的文件
变量描述支持次数?
alphanumeric输出随机的大小写字母或数字是
alphanumspecial输出随机的大小写字母、数字或标点符号是
alphanumspecialurl输出随机的大小写字母、数字或以下字符之一:-._~是
alphaupper输出随机的大写字母是
alphalower输出随机的小写字母是
alphauppernumber输出随机的大写字母或数字是
alphalowernumber输出随机的小写字母或数字是
alpha输出随机的字母是
number输出随机的数字是
hex输出随机的十六进制数字是
netbios输出随机的大小写字母、数字或以下字符之一:!@#$%^&)(.-'_{}~是
custom映射到提供的 charset 文件中的随机字符是
word输出提供的或内置词表中的随机词是
boolean输出 'True' 或 'False'是
useragent输出提供的或内置列表中的随机用户代理否
spawnto_x86输出提供的或内置列表中的随机 x86 进程路径否
spawnto_x64输出提供的或内置列表中的随机 x64 进程路径否
pipename输出提供的或内置列表中的随机管道名称否
pipename_stager输出提供的或内置列表中的随机管道名称(stager)否
dns_stager_subhost输出提供的或内置列表中的随机 DNS stager 子域名否
dns_stager_prepend输出提供的或内置列表中的随机 DNS stager 前置字符串否