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公鑰在滲透測試中的應用應該遠不止這么多,后續還會補充以及更新其他類似的東西。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM