SSH-Snake:一个自我传播、自我复制、无文件的脚本,可自动执行 SSH 私钥和主机发现的利用后任务

介绍

SSH-Snake 是一款功能强大的工具,旨在使用系统上发现的 SSH 私钥执行自动网络遍历,目的是创建网络及其依赖关系的全面映射,确定使用 SSH 和 SSH 私钥对网络造成危害的程度从特定系统开始的密钥。

SSH-Snake 可以自动揭示通过 SSH 连接的系统之间的关系,这通常需要花费大量的时间和精力来手动执行。

换句话说,SSH-Snake 自动且递归地执行以下任务:

  1. 在当前系统上,找到任何 SSH 私钥,
  2. 在当前系统上,找到任何user@host可以接受私钥的主机或目的地( ),
  3. 尝试使用发现的所有私钥通过 SSH 连接到所有目标,
  4. 如果成功连接到目标,则在连接到的系统上重复步骤 #1 – #4。

它是完全自我复制和自我传播的——并且完全无文件。从很多方面来说,SSH-Snake 实际上是一种蠕虫病毒:它会自我复制并尽可能地从一个系统传播到另一个系统。

无需像超级马里奥游戏那样使用 SSH 密钥在系统之间手动跳转,而是让 SSH-Snake 为您完成这项工作。

尽管此工具旨在用于黑客目的,但系统管理员也可以使用它来更好地了解其基础设施和网络。如果您想禁止打印发现的私钥,请注释掉这行代码

要深入了解该脚本的实际工作原理、技术细节、有趣的发现、设计决策、基准测试和经验教训,请查看此博客文章

截图

图片[1]-SSH-Snake:一个自我传播、自我复制、无文件的脚本,可自动执行 SSH 私钥和主机发现的利用后任务-IT熊技术站
非常小的网络中 SSH-Snake 输出的缩小屏幕截图
图片[2]-SSH-Snake:一个自我传播、自我复制、无文件的脚本,可自动执行 SSH 私钥和主机发现的利用后任务-IT熊技术站
蓝色节点表示目标可以连接到其自身 (user@host<–>user@host)。红色边缘表示连接是双向的(user1@host1<–>user2@host2)
图片[3]-SSH-Snake:一个自我传播、自我复制、无文件的脚本,可自动执行 SSH 私钥和主机发现的利用后任务-IT熊技术站
绿色节点表示可以连接到自身的主机(没有用户名)(host1<–>host1)。绿色边缘表示连接是双向的(主机 1 <–> 主机 2)。右上角的灰色主机是最初执行脚本的主机
图片[4]-SSH-Snake:一个自我传播、自我复制、无文件的脚本,可自动执行 SSH 私钥和主机发现的利用后任务-IT熊技术站
蓝色节点表示目标可以连接到其自身 (user@host<–>user@host)。红色边缘表示连接是双向的(user1@host1<–>user2@host2)



使用和运行 SSH-Snake

SSH-Snake 可以下载或通过管道传输到 bash 中:

wget https://raw.githubusercontent.com/MegaManSec/SSH-Snake/main/Snake.nocomments.sh
stdbuf -o0 bash ./Snake.nocomments.sh

或者

curl https://raw.githubusercontent.com/MegaManSec/SSH-Snake/main/Snake.nocomments.sh | stdbuf -o0 bash

关于 SSH-Snake

SSH-Snake 无缝模拟人类对手会做什么来发现 SSH 私钥和可用于连接的目的地。它完全用 Bash 编写,以主要 Linux 系统上常见的最小依赖集运行:bashsshgetconfcoreutilsgetentawksortgreptrfindcat。同样,也可以使用sudohostnameip和 ,xargs但它们不是必需的(并且脚本可以正常处理它们不存在的情况)。如果发现系统没有任何所需的软件包,则会正常失败,警告用户无法在该特定系统上继续扫描(并回溯,从先前的系统继续)。

SSH-Snake 是完全无文件的:用户运行脚本后,它通过 stdin 和 bash 参数(通过 SSH)传递到目标的 bash。在扫描的任何系统上都不存在脚本的实质性证据:脚本运行的唯一证据是在进程树中,并且不可避免地会发生大量无效的 SSH 尝试。

SSH-Snake 采用深度优先的发现方法:一旦连接到一个系统,它就会在回溯之前尝试从该系统进一步连接。

SSH-Snake 这个名字来源于这样一个事实:脚本的输出看起来像一条在网络中爬行的蛇。然而,与贪吃蛇游戏不同的是,SSH-Snake 在咬住自己的尾巴时不会死亡(连接到它已经扫描或当前正在扫描的系统):它会像平常一样简单地打印它的连接方式,但会返回而不是重新连接。扫描目的地(以避免无限递归)。

特征

  • 使用本地 SSH 私钥从一个系统递归 SSH 到另一个系统,
  • 仅使用 stdin 和 bash 参数对远程系统进行 SSH-Snake 脚本的无文件遍历和传播/复制,
  • 如果可能的话,使用 sudo 自动提升 root 权限,
  • 从条目中发现SSH私钥文件.bash_history
  • 从常用文件和文件夹中发现 SSH 私钥,
  • 渗透 SSH 私钥作为脚本的输出,
  • 每个系统上可配置的自定义命令执行,
  • 即插即用的模块化系统,用于发现私钥和系统,
  • 从 IP 范围、上次登录、已知主机、SSH 配置文件等中检测主机,
  • 能够检测系统何时已被扫描或正在被扫描,以便像 A->B->C 这样的网络也能够发现 C->A,但不会回归到 A->B-> CA->B->C->A->B->…,
  • 能够从脚本的输出生成网络的图形可视化,
  • … 和更多。

设置

SSH-Snake 附带了一些可以配置的常规设置。这些设置记录在SETTINGS.md#general-settings中。

SSH-Snake 还附带各种可配置/即插即用策略(功能),可用于发现系统上的 SSH 私钥并发现要尝试连接的主机和目标。已提供健全的默认设置,但是如果您想尽可能彻底地执行扫描,那么启用更多发现技术会有所帮助。如果扫描需要很长时间,禁用某些发现技术可能会有所帮助。除了一种策略 ( find_ssh_keys) 之外,每种策略都可以关闭/打开。这些记录在SETTINGS.md#configurable-discovery-strategies中。

了解输出

SSH-Snake 的原始输出包含有关发现的私钥、目的地和错误消息的混合信息。

有关 SSH-Snake 完整输出的详细说明可以在OUTPUT.md中找到。

可视化系统关系

SSH-Snake 的输出可用于创建脚本遍历的网络的图形/可视化。

有关如何从 SSH-Snake 的输出创建和解释图像/可视化的详细说明可以在GRAPHICS.md中找到。

其他工具

除了创建 SSH-Snake 遍历的网络可视化的能力之外,还提供了三个其他工具。即:

  1. forward-lookup-host.py:给定源主机或目的地,确定可以直接或间接(即通过三级系统)访问的所有系统。
  2. reverse-lookup-host.py:给定目标主机或目的地,确定可以直接或间接访问它的所有系统。
  3. shortest-path-create-chain.py:给定主机或目的地 A 和 B,确定连接两者的最短路径。

第三个工具还生成一个可用于从目的地 A 连接到目的地 B 的命令。例如:

$ python3 tools/shortest-path-create-chain.py --file output.log --src 'jrogers@10.2.3.4' --dest 'root@10.25.49.1'

Shortest path from jrogers@10.2.3.4 to root@10.25.49.1: jrogers@10.2.3.4->user@10.44.39.21->user@10.19.29.54->root@10.25.49.1

[..]

ssh -i "/home/jrogers/.ssh/key" user@10.44.39.21 'sudo ssh -i "/root/.ssh/id_rsa" user@10.19.29.54 'ssh -i "/tmp/key" root@10.25.49.1''

Snake.sh 与 Snake.nocomments.sh

由于脚本非常大,因此将脚本加载到此处文档(它会自动执行,因为该脚本实际上是 Quine会导致 bash 写入临时文件(因为它大于 65535 字节)。

为了减小大小以使其保持 100% 无文件,Snake.nocomments.sh 提供了一个删除了所有注释、不必要的空格和空行的版本。这会减小文件的大小,这样 bash 就不会创建临时文件。

错误/问题

如果您遇到与脚本相关的任何错误或问题,请将其作为 GitHub 问题报告。请包含您的配置设置。

[line]我对与脚本未捕获的错误相关的任何有趣的输出特别感兴趣。

局限性

  • 仅限 IPv4:与所有最好的程序一样,该脚本不支持 IPv6。我无法想象很快就会有对此的支持。
  • 仅端口 22:一般假设 SSH 在端口 22 上运行。
  • GNU coreutils:该脚本严重依赖于 GNU coreutils。我还没有确定脚本中使用了多少(如果有的话)GNU-ism。
  • find ... -readable ...在脚本中的多个地方使用。-readable并非所有版本的find(1).
  • 该脚本当前不查找 SSH 代理套接字。
© 版权声明
THE END
喜欢就支持一下吧
点赞662赞赏 分享
评论 共1条

请登录后发表评论