Skip to content
KitploitKITPLOIT
工具漏洞利用博客
Log in
提交
工具漏洞利用博客
提交

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

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

订阅源联系隐私© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
ICMP-Ghost-A-Fileless-x64-Assembly-C2-Agent — 无文件x64汇编C2框架,具备双通道ICMP/DNS协议跳转、直接系统调用执行以及基于ptrace的进程注入能力,用于隐蔽命令执行与数据外泄。 | Kitploit
工具/GitHubGitHub/jm00nj/icmp-ghost-a-fileless-x64-assembly-c2-agent
权限提升漏洞利用框架IDS/IPS规避Shellcode后渗透利用命令与控制红队Payload 开发

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享
GitHub
jm00nj/icmp-ghost-a-fileless-x64-assembly-c2-agent

ICMP-Ghost-A-Fileless-x64-Assembly-C2-Agent

无文件x64汇编C2框架,具备双通道ICMP/DNS协议跳转、直接系统调用执行以及基于ptrace的进程注入能力,用于隐蔽命令执行与数据外泄。

查看仓库网站
8818161个月前Kitploit 审核通过
 ________  ___  ___  ________  ________  _________       ________  ________   
|\   ____\|\  \|\  \|\   __  \|\   ____\|\___   ___\    |\   ____\|\_____  \  
\ \  \___| \ \  \\\  \ \  \|\  \ \  \___|\|___ \  \_|    \ \  \___|\|____|\  \ 
 \ \  \  __ \ \   __  \ \  \\\  \ \_____  \   \ \  \      \ \  \     ____\_\  \
  \ \  \|\  \ \  \ \  \ \  \\\  \|____|\  \   \ \  \      \ \  \___|\____ \  \
   \ \_______\ \__\ \__\ \_______\____\_\  \   \ \__\      \ \______\\_________\
    \|_______|\|__|\|__|\|_______|\_________\   \|__|       \|______\|_________|
                                 \|_________|                                   

无文件、纯 x64 汇编 C2 植入体,采用双通道(ICMP / DNS)架构。零 libc。零磁盘。对标准 EDR 钩子不可见。


Architecture Language Protocol Protocol OS Version Suricata GitHub stars GitHub license GitHub repo size

Ghost-C2

概述

⭐️ 如果您觉得这项研究有用,请考虑为它点个 star 以支持后续开发

🚨 完整技术研究与源代码: 本仓库仅为摘要。如需完整的架构剖析、W^X 内存逃逸细节和 VTable 实现,请访问官方项目页面:ICMP-Ghost 技术解析

Ghost-C2 是一个完全用纯 x64 Linux 汇编编写的命令与控制(C2)框架,不依赖 libc。所有操作均通过直接系统调用完成。没有导入表、没有动态链接器痕迹、也没有磁盘写入。

它最初以原始 ICMP 隐蔽信道的形式构建,3.6.2 版本引入了**双通道协议跳转(Dual-Channel Protocol Pivoting)**架构。操作者可以在静默的 ICMP 原始套接字与规避检测的 DNS UDP 隧道之间无缝切换植入体的通信信道。植入体仅驻留于 RAM 中,通过基于 ptrace 的自定义加载器注入到运行中的系统进程里。

本项目旨在探索在不触及内核的情况下,用户态隐蔽性与网络状态同步究竟能走多远。


架构

ghost-c2-architecture
┌─────────────────────────────────────────────────────────────┐
│                      OPERATOR MACHINE                       │
│                                                             │
│   ┌──────────────┐                                          │
│   │  client.asm  │  ← Terminal UI: Prompt IP/Domain + Cmd   │
│   │  (Operator   │    Encrypts payload with Rolling XOR     │
│   │   Console)   │    State Sync: ICMP mode / DNS mode      │
│   └──────┬───────┘                                          │
│          │                                                  │
└──────────┼──────────────────────────────────────────────────┘
           │  Channel 1: Raw ICMP (Stateless, Port-less)
           │  Channel 2: DNS UDP Port 53 (Asymmetric)
┌──────────┼──────────────────────────────────────────────────┐
│          │             TARGET MACHINE                       │
│          ▼                                                  │
│   ┌──────────────┐     ┌─────────────────────────────────┐  │
│   │  loader.asm  │────▶│         sniff.asm (PIC)         │  │
│   │  (Phantom    │     │         Lives in RAM only       │  │
│   │   Loader)    │     │         inside host process     │  │
│   └──────────────┘     └────────────────┬────────────────┘  │
│                                         │                   │
│   1. Scans /proc for target PID         │ Listens ICMP/DNS  │
│   2. ptrace ATTACH                      │ Validates Auth    │
│   3. Force remote mmap (RW)             │ Decrypts command  │
│   4. Inject PIC shellcode               │ fork+execve       │
│   5. mprotect → RX                      │ memfd_create      │
│   6. Redirect RIP → shellcode           │ Compress(DPCM-RLE)│
│   7. ptrace DETACH → exits              │ Encrypt & Frag.   │
│                                         │ Sends Reply       │
└─────────────────────────────────────────┼───────────────────┘
                                          │  Encrypted Traffic
                                          ▼
                                   [ client.asm ]
                                   Receives & Validates
                                   Decrypts Payload
                                   Decompresses (Hybrid)
                                   Reassembles & Prints

组件

client.asm — 操作者控制台

攻击者侧终端。负责 UI、动态内存管理和目标状态同步。可以 ICMP Echo 请求或 DNS TXT 查询的形式发送数据包。监听分片回复,防止缓冲区溢出,并重组输出。内置“活动目标重连(Active Target Reconnection)”模块,用于恢复失联会话。

sniff.asm — PIC 植入体代理

运行在目标上的植入体。编译为原始二进制(位置无关、无 ELF 头),因此可注入到任意内存地址。它会根据操作者的跳转命令,动态更新内部 VTable,以在 ICMP 嗅探与 UDP DNS 绑定之间切换。

Phantom_Loader/loader.asm — 注入引擎

投递机制。扫描 /proc,按 comm 名称查找目标进程,并通过多阶段 ptrace 状态机将 PIC shellcode 注入其中。注入后干净退出——不留任何痕迹。


隐蔽与逃逸技术

双通道协议跳转(ICMP ↔ DNS)

Ghost-C2 v3.6.2 允许操作者在不丢失 agent 的情况下热切换网络协议。通过发送特定的跳转命令,Master 和 Agent 中的 VTable 都会被动态覆写:

  • !D(跳转到 DNS): 两个节点均关闭 ICMP 套接字并初始化 UDP 53 端口通信。通过混入企业 DNS 流量,适合绕过严格的第三层过滤。
  • !I(跳转到 ICMP): Agent 关闭 UDP 套接字、解除端口绑定,并回落到静默的原始套接字嗅探。非常适合“幽灵(Phantom)”隐身模式。

DPCM-RLE 混合 x64 压缩器

Ghost-C2 的数据传输引擎采用在 x86-64 汇编中深度优化的混合压缩与编码层。

  • DPCM(差分脉冲编码调制):计算并发送参考字符与后续字符之间的数学差值(Delta),从而降低数据熵。
  • RLE(游程编码):在位级别对连续空格和重复块进行打包。
  • 效果: 将整体数据负载减少 40% 到 55%,最大限度地减小网络足迹和注入数据包的数量。

ICMP 协议模仿

每个外发的 ICMP 数据包在结构上都与标准 Linux ping 无法区分:

  • 动态 RDTSC 时间戳模仿 struct timeval。
  • 精确的 Linux iputils 填充(0x10 至 0x1F)可绕过基本的启发式防火墙。

滚动 XOR 加密

双向通信均使用逐步移位的 QWORD 密钥进行加密。这使 Shannon 熵保持在较低水平(不同于熵值约为 8.0、会触发 DPI 异常的 AES)。滚动 XOR 产生的熵看起来就像自然的噪声数据。没有加密常量、没有 S 盒,YARA 没有任何可匹配的东西。

非对称认证

植入体会忽略所有 ID + SEQ ≠ 45,000 的 ICMP 数据包。植入体以 ID + SEQ = 55,000 的数据包进行回复。这可以防止操作系统回显混淆,并过滤掉互联网扫描器或蜜罐。

通过 memfd_create 实现无文件执行

命令输出从不落盘。Shell 输出通过匿名 RAM 文件(memfd_create)捕获,并命名为 [shm],以混入 /proc/PID/fd 中合法的共享内存映射。

W^X 内存注入(Phantom Loader)

突破现代内核禁止 RWX 内存的缓解机制。加载器采用两阶段方案(以 RW 权限 Remote mmap → 注入 → 以 RX 权限 Remote mprotect)。任何内存页都不会同时具有 W 和 X 权限。

无 libc 系统调用混淆

所有系统调用号都被拆分到两条指令中,以对抗静态分析和基于 grep 的简单扫描器。


武器化:配置与构建 Agent

为保持严格的 OPSEC,Ghost-C2 agent(sniff.asm)不使用外部配置。你必须在编译和注入之前,直接在汇编代码中定义你的 Master C2 IP、端口和诱饵 DNS 域名。

第 1 步:配置 OPSEC 变量

打开 sniff.asm,滚动到 .text 段的最底部。(注意:由于 agent 是严格的位置无关代码(PIC),因此没有 .data 段。所有配置变量均以内联方式存储。)

修改以下值以匹配你的 Master 服务器:

  • IP 地址: 将 db 127, 0, 0, 1 改为你 Master 的 IP。
  • UDP 端口: 将 dw 0xB414(端口 5300)改为你所需的端口,需使用网络字节序(例如端口 53 为 0x3500)。

第 2 步:汇编为原始 Shellcode

nasm -f bin sniff.asm -o shellcode.bin

第 3 步:格式化 Shellcode

python3 -c "data = open('shellcode.bin', 'rb').read(); lines = ['\tdb ' + ', '.join(f'0x{b:02x}' for b in data[i:i+12]) for i in range(0, len(data), 12)]; open('c2_payload.txt', 'w').write('\n'.join(lines))"

第 4 步:加密负载(滚动 XOR)

  1. 复制生成的 c2_payload.txt 的内容。
  2. 打开 xor.py,用你复制的 shellcode 替换 raw_asm 变量的内容。
  3. 运行 python3 xor.py,然后复制加密后的输出。

第 5 步:注入 Phantom Loader

  1. 打开 loader.asm。
  2. 找到 c2_payload: 标签。
  3. 删除现有占位内容,将加密后的 shellcode 直接粘贴到该标签下方。
  4. (可选:修改 target db "cron", 10 可更改注入的目标进程。)

第 6 步:编译最终 Loader

nasm -f elf64 loader.asm -o loader.o
ld loader.o -o loader

以 root 权限在目标机器上执行(sudo ./loader)。至此,agent 完全以无文件方式运行。


配置操作者控制台(client.asm)

在编译 Master 控制台之前,你必须确保其监听器和目标配置与你的 Agent 配置一致。打开 client.asm,导航到 .data 区域。

第 1 步:配置监听端口

找到 master_bind_addr。这是 Master 监听入站 DNS 信标的位置。

UDP 端口:将 dw 0xB414 改为与你的 Agent 发送目标端口一致。

注意: 此处必须使用网络字节序。对于端口 53,使用 0x3500。

第 2 步:配置跳转/重连端口

找到 target_addr。该端口用于执行 DNS 跳转(!D)或使用重连模块时。

端口对齐:将 dw 0xB414 改为与 Agent 监听的 UDP 端口一致。如果这些端口不匹配,将发生(死锁),因为 Master 会对着错误的虚空大喊。

第 3 步:构建控制台

配置完成后,汇编并链接 Master:

nasm -f elf64 client.asm -o client.o
ld client.o -o client
下载工具