前言
最近渗透遇到许多linux服务器,在多方信息收集无果后,想到了ssh的秘钥登录。但诸多知识点有点混乱,趁此时间再次复现一遍。
ssh协议
ssh中文名称叫安全外壳协议,是一种加密的网络传输协议。我们现在经常说的ssh指的是openssh,是对ssh协议的实现。
ssh口令认证
我们都知道ssh提供了两种安全级别的认证,一种口令认证,一种秘钥认证。
基于口令的认证时需要输入正确的用户名和密码,且连接加密。
ssh的连接过程为:
- 用户向ssh远程服务端发出请求,服务端就会将自己的公钥返回给用户;
- 用户用公钥加密自己的登录密码后再发送给远程服务端;
- 远程服务端接收到加密后的密码后, 用自己的私钥解密, 如果结果正确则建立起连接。
这里指的就是无法确定host的真实性,只知道它的公钥指纹。问你是否连接,
yes后就需要远程服务端的用户密码。密码输入正确后才可以登录。
当远程服务端的公钥被接受以后,就会保存在当前用户的/.ssh/known_hosts之中。下次再连接这台主机时,系统就会知道公钥已经保存在本地了,从而跳过警告部分,直接提示输入密码。
现在企业更流行使用秘钥登录。修改远程服务端的/etc/ssh/sshd_config
配置文件,
PasswordAuthentication no
重启sshd服务,就可以禁用密码验证。
image.pngssh秘钥登录
ssh秘钥登录,其实就是"公钥登录",首先需要用户自己生成一对公钥和私钥。然后用户将自己的公钥放在远程服务端上。此时远程服务器持有公钥,用户持有私钥。满足"公钥加密,私钥解密"。
过程如下:
- 用户生成秘钥对
ssh-keygen
该命令用于生成秘钥对。
-b 指定密钥长度
-t 指定要创建的密钥类型,包括rsa和dsa,默认rsa非对称加密的方式
-f 指定用来保存密钥的文件名
-C 添加注释
-N 提供密语
image.png
需要注意的是:
- 生成的私钥默认叫id_rsa,默认保存在当前用户的/.ssh/文件夹下,且生成的公钥名字通常是私钥后面加 .pub 的后缀。
- 提示输入密码,保证私钥的安全。
生成后可以在当前用户的.ssh文件夹下看到。
image.png- 将公钥放在远程服务端
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- 登录远程服务器
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
网友评论