电视台网站策划书,全网营销新胜天下,pinterest设计网站,wordpress站外连接SSH#xff08;Secure Shell#xff09;是一个用于远程登录和执行命令的网络协议#xff0c;其认证方式通常有两种#xff1a;基于密码的认证和基于公私钥的认证。本文将详细介绍SSH公私钥认证机制#xff0c;并探讨在渗透测试场景中#xff0c;如何利用对靶机具有读取和…SSHSecure Shell是一个用于远程登录和执行命令的网络协议其认证方式通常有两种基于密码的认证和基于公私钥的认证。本文将详细介绍SSH公私钥认证机制并探讨在渗透测试场景中如何利用对靶机具有读取和写入权限的情况下进行公私钥认证攻击。 公私钥认证基础知识
SSH公私钥认证流程
SSH的公私钥认证机制基于非对称加密原理旨在通过验证客户端的身份来确保远程访问的安全性。与传统的密码认证不同公私钥认证不依赖于明文密码因此具有更高的安全性。其认证流程可以分为以下几个关键步骤
1. 客户端生成公私钥对
首先客户端需要生成一对公私钥。公钥可以公开而私钥则必须严格保密。生成密钥对的常用工具是 ssh-keygen生成的私钥通常存储在客户端机器的 ~/.ssh/id_rsa 路径中而公钥则存储在 ~/.ssh/id_rsa.pub 文件中。
生成命令如下
ssh-keygen -t rsa -b 2048-t rsa指定使用RSA算法生成密钥对。-b 2048指定密钥长度为2048位以提高加密强度。
2. 客户端将公钥添加到远程主机的 authorized_keys 文件
生成公私钥对后客户端需要将公钥上传到远程主机的 authorized_keys 文件中。该文件通常位于远程主机的用户主目录下的 .ssh/authorized_keys 路径。
常用的上传方法是通过 ssh-copy-id 工具
ssh-copy-id usernameremote_host此命令将客户端的公钥自动添加到目标主机的 authorized_keys 文件中。如果手动操作客户端可以将 id_rsa.pub 中的内容复制到远程主机的 authorized_keys 文件。
3. 客户端发起SSH连接
当客户端准备登录远程主机时会通过 ssh 命令发起连接并指定使用私钥进行身份验证。此时客户端会向远程主机提供自己的私钥启动身份验证过程。
ssh -i ~/.ssh/id_rsa usernameremote_host4. SSH连接的身份验证过程
身份验证是SSH公私钥认证的核心步骤包含以下几个阶段 远程主机发送挑战消息当客户端连接到远程主机时远程主机会向客户端发送一个随机生成的“挑战消息”。 客户端使用私钥签名客户端使用私钥对挑战消息进行签名。由于私钥是唯一的只有客户端持有私钥其他人无法伪造签名。 客户端发送签名结果客户端将签名结果发送回远程主机。 服务器验证签名远程主机使用客户端事先上传的公钥验证签名。如果签名验证成功表示客户端的身份是合法的SSH连接被允许建立。若公钥不匹配则连接会被拒绝。
5. 私钥加密保护与密码输入
如果客户端的私钥设置了密码保护系统会在使用该私钥进行身份验证时要求输入密码。密码保护增强了安全性即使私钥泄露未经授权的人也无法使用私钥登录。
6. 登录成功
一旦签名验证成功且如果有私钥密码输入正确远程主机会建立SSH会话允许客户端访问远程主机。客户端即可执行命令、传输文件等。
公钥和私钥的信任关系 私钥私钥用于身份验证保存在客户端必须严格保密。私钥的安全性至关重要一旦私钥泄露攻击者可以伪装成客户端进行登录。 公钥公钥是用来授权的存放在远程主机的 authorized_keys 文件中。公钥允许服务器确认客户端身份服务器根据客户端提供的签名验证公钥的合法性。
虽然公钥可以公开但公钥本身并不提供认证功能认证过程依赖于私钥和公钥的匹配关系。也就是说公钥和私钥是一对匹配的密钥只有拥有私钥的一方才能通过公钥认证成功。
信任链的建立
公私钥认证的安全性依赖于服务器是否信任已上传的公钥。一旦客户端的公钥被添加到远程主机的 authorized_keys 文件中远程主机就会信任该公钥所对应的私钥从而允许该私钥对应的客户端进行无密码登录。这种机制避免了密码明文传输提升了安全性。
公私钥生成与关联
私钥可以生成公钥但反过来公钥无法直接生成私钥。若你只拥有私钥可以通过以下命令从私钥中恢复对应的公钥
ssh-keygen -y -f id_rsa id_rsa.pub-y表示从已有的私钥生成公钥。-f id_rsa指定私钥文件的路径。 id_rsa.pub将生成的公钥输出到 id_rsa.pub 文件。
这种方法可以帮助恢复丢失的公钥前提是你已拥有对应的私钥。
几个重要文件介绍
SSH的公私钥认证机制依赖于以下几个关键文件通常位于用户的 ~/.ssh/ 目录下 私钥 (id_rsa)存储在客户端必须严格保密。如果私钥泄露攻击者可以使用该私钥登录目标主机。 公钥 (id_rsa.pub)可以公开通常用于授权其他系统进行无密码登录。公钥需要添加到远程主机的 authorized_keys 文件中。 授权文件 (authorized_keys)存储了允许通过SSH登录的公钥列表。每个公钥对应一个客户端服务器会根据该文件中的公钥来验证客户端身份。
对于这些文件SSH对权限的要求如下
authorized_keys 文件的权限通常设置为 600即只有文件所有者可以读取和写入。.ssh/ 目录的权限设置为 700即只有文件所有者可以访问该目录。
配置要求
为了启用公钥认证靶机的SSH服务需要进行相应配置。通常这些配置位于 /etc/ssh/sshd_config 文件中。以下是必须启用的配置项
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keysPubkeyAuthentication yes启用公钥认证。AuthorizedKeysFile .ssh/authorized_keys指定公钥存放路径通常为 ~/.ssh/authorized_keys。 攻击场景一获得靶机私钥进行登录
如果攻击者通过任意文件读取等漏洞获取了靶机用户的私钥则攻击者可以使用该私钥直接登录。
为什么不需要依赖 authorized_keys 文件中的公钥 当你持有对方的私钥时服务器已经信任该私钥与对应的公钥是匹配的。因此在进行SSH连接时服务器会直接信任该私钥不需要再验证是否有该公钥在 authorized_keys 文件中。因此一旦你获得了对方的私钥你就可以跳过公钥的验证过程直接进行身份验证。
步骤 确保私钥权限正确私钥文件的权限需要设置为 600否则无法正常使用 chmod 600 id_rsa尝试登录 如果私钥没有设置密码保护攻击者可以直接使用以下命令进行登录ssh username靶机IP -i id_rsa如果私钥加密即设置了密码保护攻击者需要知道私钥的密码。此时可以尝试进行密码爆破。
爆破私钥密码
如果私钥加密且密码丢失可以使用 john the ripper 工具进行密码爆破。以下是具体步骤 转换私钥格式 使用 ssh2john.py 脚本将私钥转换为 john 可以识别的格式 ssh2john id_rsa ~/id_rsa.hash进行密码爆破 使用 john 工具进行爆破 john ~/id_rsa.hash --wordlist/usr/share/wordlists/rockyou.txt成功登录 一旦密码爆破成功攻击者就可以使用私钥登录 ssh username靶机IP -i id_rsa攻击场景二通过公钥认证登录
如果攻击者对靶机具有目录写入权限且靶机配置了公钥认证那么攻击者可以将自己的公钥添加到靶机的 authorized_keys 文件中从而实现无密码SSH登录。
步骤 生成SSH密钥对 在攻击者的工作站如Kali Linux上生成一对新的SSH密钥对 ssh-keygen -t rsa-t rsa使用RSA算法生成密钥。按照提示完成生成过程通常使用默认路径如 /root/.ssh/id_rsa并选择不设置密码保护直接按回车跳过。 查看公钥并复制 查看并复制生成的公钥 cat /root/.ssh/id_rsa.pub将公钥添加到靶机的 authorized_keys 文件 如果攻击者具有写入靶机某些目录的权限可以将自己的公钥添加到目标用户的 ~/.ssh/authorized_keys 文件中 echo 公钥内容 /home/username/.ssh/authorized_keys无密码登录靶机 完成上述步骤后攻击者即可使用公钥进行无密码登录 ssh username靶机IP总结
在了解了SSH公私钥认证机制后攻击者可以通过以下方式进一步扩大攻击面
获取SSH私钥如果攻击者能够获取靶机的SSH私钥并且目标系统配置了公钥认证则可以直接通过私钥进行登录。写入公钥实现无密码登录若攻击者能够访问靶机的 authorized_keys 文件则可以通过将自己的公钥写入该文件实现对靶机的无密码登录。