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主機的時候,就可以采用這種攻擊方式。
0X04 總結:
ssh公鑰登錄本質是為了工作中的方便,但是在認真思索以后就變成了滲透的思路。其他情況則要根據具體情況判斷,ssh公鑰在滲透測試中的應用應該遠不止這么多,后續還會補充以及更新其他類似的東西。