渗透测试-SSH秘钥登录

前言

最近渗透遇到许多linux服务器,在多方信息收集无果后,想到了ssh的秘钥登录。但诸多知识点有点混乱,趁此时间再次复现一遍。

ssh协议

ssh中文名称叫安全外壳协议,是一种加密的网络传输协议。我们现在经常说的ssh指的是openssh,是对ssh协议的实现。

ssh口令认证

我们都知道ssh提供了两种安全级别的认证,一种口令认证,一种秘钥认证。
基于口令的认证时需要输入正确的用户名和密码,且连接加密。

ssh的连接过程为:

  1. 用户向ssh远程服务端发出请求,服务端就会将自己的公钥返回给用户;
  2. 用户用公钥加密自己的登录密码后再发送给远程服务端;
  3. 远程服务端接收到加密后的密码后, 用自己的私钥解密, 如果结果正确则建立起连接。
image.png

这里指的就是无法确定host的真实性,只知道它的公钥指纹。问你是否连接,
yes后就需要远程服务端的用户密码。密码输入正确后才可以登录。
当远程服务端的公钥被接受以后,就会保存在当前用户的/.ssh/known_hosts之中。下次再连接这台主机时,系统就会知道公钥已经保存在本地了,从而跳过警告部分,直接提示输入密码。

image.png

现在企业更流行使用秘钥登录。修改远程服务端的/etc/ssh/sshd_config配置文件,

PasswordAuthentication no

重启sshd服务,就可以禁用密码验证。

image.png

ssh秘钥登录

ssh秘钥登录,其实就是"公钥登录",首先需要用户自己生成一对公钥和私钥。然后用户将自己的公钥放在远程服务端上。此时远程服务器持有公钥,用户持有私钥。满足"公钥加密,私钥解密"。

过程如下:

  1. 用户生成秘钥对
ssh-keygen

该命令用于生成秘钥对。

-b   指定密钥长度
-t   指定要创建的密钥类型,包括rsa和dsa,默认rsa非对称加密的方式
-f   指定用来保存密钥的文件名
-C   添加注释
-N   提供密语
image.png

需要注意的是:

  • 生成的私钥默认叫id_rsa,默认保存在当前用户的/.ssh/文件夹下,且生成的公钥名字通常是私钥后面加 .pub 的后缀。
  • 提示输入密码,保证私钥的安全。

生成后可以在当前用户的.ssh文件夹下看到。

image.png
  1. 将公钥放在远程服务端
ssh-copy-id -i ~/.ssh/id_rsa.pub test@10.211.55.26

ssh-copy-id 命令将公钥写到远程服务端kali的test用户下的/.ssh/authorized_key文件中。

image.png

如果是第一次登录,用户也会在/.ssh/文件夹下创建known_hosts,记录了远程服务端的ip和对应的公钥指纹。

image.png
  1. 登录远程服务器
ssh  test@10.211.55.26
image.png

连接时默认去查找当前用户/.ssh/文件下是否存在私钥,如果没有需要指定私钥进行连接。

ssh  test@10.211.55.26 -i /home/cseroad/.ssh/id_rsa
image.png

如果设置了证书的密码,则在远程服务器时需要输入密码。

image.png

扩展

/etc/hosts可以配置主机名和IP地址

10.211.55.26 test1

此时就可以直接ssh主机名。

ssh test@test1
image.png

总结

当渗透测试拿到一台linux服务器,查找/.ssh/文件夹下是否存在私钥文件,或*.pub文件,因为私钥和公钥一块生成。结合known_hosts文件,可以去连接未知的机器。
反之,如果拿到的机器只存在known_hosts文件,则无法利用。该文件只能说明曾经接收过公钥。
如果拿到的机器只有authorized_key文件,则证明存在用户连接过该机器。

参考资料

http://www.ruanyifeng.com/blog/2011/12/ssh_remote_login.html
https://www.jianshu.com/p/fab3252b3192
https://www.cnblogs.com/ailx10/p/7664040.html

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。