zoukankan      html  css  js  c++  java
  • SSH公钥详细介绍及拓展

    0X00  前提概念:

      对称加密:对称加密是最快速、最简单的一种加密方式,加密(encryption)与解密(decryption)用的是同样的密钥(secret key)。对称加密有很多种算法,由于它效率很高,所以被广泛使用在很多加密协议的核心当中。对称加密通常使用的是相对较小的密钥,一般小于256 bit。因为密钥越大,加密越强,但加密与解密的过程越慢。如果你只用1 bit来做这个密钥,那黑客们可以先试着用0来解密,不行的话就再用1解;但如果你的密钥有1 MB大,黑客们可能永远也无法破解,但加密和解密的过程要花费很长的时间。密钥的大小既要照顾到安全性,也要照顾到效率。对称加密的一大缺点是密钥的管理与分配,换句话说,如何把密钥发送到需要解密你的消息的人的手里是一个问题。在发送密钥的过程中,密钥有很大的风险会被黑客们拦截。现实中通常的做法是将对称加密的密钥进行非对称加密,然后传送给需要它的人。

       非对称加密:非对称加密为数据的加密与解密提供了一个非常安全的方法,它使用了一对密钥,公钥(public key)和私钥(private key)。私钥只能由一方安全保管,不能外泄,而公钥则可以发给任何请求它的人。非对称加密使用这对密钥中的一个进行加密,而解密则需要另一个密钥。比如,你向银行请求公钥,银行将公钥发给你,你使用公钥对消息加密,那么只有私钥的持有人--银行才能对你的消息解密。与对称加密不同的是,银行不需要将私钥通过网络发送出去,因此安全性大大提高。目前最常用的非对称加密算法是RSA算法。虽然非对称加密很安全,但是和对称加密比起来,它非常的慢,所以我们还是要用对称加密来传送消息,但对称加密所使用的密钥我们可以通过非对称加密的方式发送出去。

       公钥和私钥:

    1、一个公钥对应一个私钥。
    2、密钥对中,让大家都知道的是公钥,不告诉大家,只有自己知道的,是私钥。
    3、如果用其中一个密钥加密数据,则只有对应的那个密钥才可以解密。
    4、如果用其中一个密钥可以进行解密数据,则该数据必然是对应的那个密钥进行的加密。

       RSA算法:公钥加密、私钥解密。

         用途1:加密,主要用于将数据资料加密不被其他人非法获取,保证数据安全性。使用公钥将数据资料加密,只有私钥可以解密。即使密文在网络上呗第三方获取,由于没有私钥无法被解密,从而保证数据安全性。

          具体流程:

    1. A在自己电脑上生成RSA钥匙文件,一个私钥文件一个公钥文件,并将他的公钥传送给B。
    2. 此时B要传送信息给A,于是B用A的公钥加密他的消息,然后传送给A。【网络上传输的密文,没有A的私钥无法解密,其他人获取之后也没用】
    3. A用他的私钥解密B的消息。

         用途2:认证,主要用于身份验证,判断某个身份的真实性。使用私钥加密以后,用对应的公钥解密从而验证身份的真实性。

          验证的具体流程:

    这里以SSH公钥登录为例介绍:
    1、A发送自己的公钥(id_rsa.pub)到B主机的/root/.ssh/目录下,并将其重命名为authorized_ keys
    2、A使用自己的私钥(id_rsa)来登录。
    使用命令:ssh -i id_rsa root@xx.xx.xx.xx

    0X01  SSH登录:

      密码登录:

    1、客户端向服务端发起登录请求,并将SSH的账号密码发送到服务端。
    2、服务端验证发送来的登陆请求中的账号密码。如果账号密码均正确,则允许登录;反之则拒绝登录。

       公钥登录:

    A想要免密登录B主机
    1、客户端生成RSA公钥和私钥
    2、客户端将自己的公钥发送到B主机,保存在/root/.ssh/目录下,并重命名为authorized_keys
    3、客户端请求连接服务器,服务器将一个随机字符串发送给客户端。
    4、客户端根据自己的私钥加密这个随机字符串之后再发送给服务器
    5、服务器接受到加密后的字符串之后用公钥解密,如果正确就让客户端登录;反之就拒绝。

    0X02  SSH公钥生成及简单使用:

      这里使用rsa算法并假设A想要免密登录B主机:
        1、生成公钥和私钥:ssh-keygen -t rsa,然后全部回车。这里生成了两个文件,id_rsa.pub和id_rsa。
        2、将id_rsa.pub传输到B主机的/root/.ssh/目录下,并将其重命名为authorized_keys
        3、使用:ssh -i id_rsa root@xx.xx.xx.xx的命令即可登录,首次登录需要根据提示输入yes才能登录,后面就不需要了。

      tips:/root/.ssh/目录是需要在本主机生成公钥才会存在。

      进阶:http://www.jinbuguo.com/openssh/ssh-keygen.html

    0X03  应用:

      日常应用:

        1、hadoop集群的免密登录,具体参考: http://dblab.xmu.edu.cn/blog/1177-2/#more-1177

        2、大数据的其他应用基本上都涉及到集群,一般涉及到集群的都需要做SSH免密的配置。

        渗透测试中的独特应用:

        1、redis未授权访问、弱口令或账号密码泄露,如果以root权限开启的服务,则可以写入ssh公钥来使用ssh服务登入主机的。具体参考: https://p0sec.net/index.php/archives/69/

        2、 远程代码执行漏洞,爆发远程代码执行漏洞的时候,执行命令的权限一般都不会太低。如果目标主机是linux主机或者unix主机的时候,就可以采用这种攻击方式。

        具体例子:
          paper在CVE-2016-3088分析中的第二种利用姿势,文章链接: https://paper.seebug.org/346/
          19年很火的泛微OA远程代码执行漏洞,权限大部分都是root,证明文章链接: https://www.cnblogs.com/liliyuanshangcao/p/11572800.html

    0X04  总结:

      ssh公钥登录本质是为了工作中的方便,但是在认真思索以后就变成了渗透的思路。其他情况则要根据具体情况判断,ssh公钥在渗透测试中的应用应该远不止这么多,后续还会补充以及更新其他类似的东西。

  • 相关阅读:
    Python 基础【第三篇】输入和输出
    把linux可执行程序做成一个服务[转]
    linux 下启动程序的时候会显示坏的解释器,或者没有那个文件
    利用GDB进行多线程调试
    两个结构体ifconf和ifreq
    centos系统修改网络配置注意事项
    yum错误:rpmdb: BDB0113 Thread/process 4227/139813012539200 failed: BDB1507 Thread died in Berkeley DB library
    CentOs安装MySql
    周末遐想(计算最长英语单词链)
    单词词频统计(12组)
  • 原文地址:https://www.cnblogs.com/sq-smile/p/13181032.html
Copyright © 2011-2022 走看看