我正在创建一个安全“dropbox”,它可以部署在 nat 或任何防火墙后面,调用受控的可公开访问的服务器,然后从服务器启动控制。
我知道这可以通过 ssh -R 命令轻松完成,但是,我正在寻找一种能够通过适当的 SSL/TLS 和端口 443 有效逃避 IDS/IPS 的方法。
目前,我的设置正在运行(仅 SSL),我的 dropbox(我们称之为客户端)正在调用并启动与服务器的 stunnel 连接。然后我可以从客户端手动 ssh 到服务器。
这很好,但是,我需要能够通过已建立的隧道从服务器 ssh 到客户端。
问题:
- 我可以通过现有的 stunnel 连接(由客户端启动的 stunnel)直接从服务器进行 ssh 吗?这可能需要更改 stunnel 配置,我只是有点不知道应该更改什么。
- 我可以通过 stunnel 将客户端的 SSH 隧道反向连接到服务器,以便服务器有一个本地端口可以 ssh 返回到客户端吗?如果是这样,我无法让 ssh -R 命令正常工作,因为我认为我最终创建了一个循环。
以下是我的 stunnel 配置:
服务器:
cert=/path/to/cert.pem
pid=/tmp/stunnel.pid
[ssh]
accept = 443
connect = 127.0.0.1:22
客户:
cert=/path/to/cert.pem
pid=/tmp/stunnel.pid
client=yes
[ssh]
accept=2200
connect=<serverpubip>:443
尝试通过 stunnel 连接从客户端反向连接到服务器的 SSH 命令示例:
ssh -i /path/to/cert -R 2200:localhost:2200 -p 2200 admin@localhost -f -N
请记住,要求是只有客户端可以调用服务器来启动初始连接(stunnel),并且流量必须通过格式良好的 SSL/TLS 加密。我还需要获得从服务器到客户端的 shell 访问权限。提前致谢!
更新:
最终发现这是一个错误的 ssh 命令。对我有用的 ssh 命令是:
ssh -i /path/to/cert -R 2201:localhost:22 -p 2200 admin@localhost -f -N
答案1
我认为所需要做的就是将ssh 命令更改-R 2200:localhost:2200
为。-R 2200:localhost:22
目前,您正在将服务器上的端口 2200 重新连接到客户端上的端口 2200。是的,这会创建一个转发循环,因为客户端:2200 会通过隧道重新连接到服务器。
假设客户端的ssh在22端口上运行,那么-R 2200:localhost:22
将服务器的2200端口连接到客户端的ssh。
为了使这一点更清楚一些,我建议从服务器选择一个不同的端口号来反向隧道:比如说。-R 2201:localhost:22
这样你就不会在两个主机上使用端口 2200,这将有助于防止你混淆两个端口。
答案2
你用实际工具无法达到你的目标,因为
stunnel
无法实现此反向连接功能,ssh
无法作为守护进程运行,并且协议与 https 略有不同。足够智能的 IDS 将能够检测到这一点。
你需要做的是:
- 正如@NilsToedtmann 所建议的,你应该使用某种棘手的东西,至少是 OpenVPN。openvpn 的客户端应该在里面运行。注意超时/保持活动设置!你必须尽可能减少开销流量。
- OpenVPN 流量与普通 https 有很大不同,但有一个名为代理服务器有了它,您可以将 OpenVPN 流量嵌入到看起来更友好的数据流中。此工具是 tor 项目的一部分,但也可以独立使用(最初是针对中国大型防火墙开发的)。
- 如果图片中有某种类型的企业防火墙,你可以使用控制论让它看起来像 ie8,并使其与经过 Kerberos 认证的企业代理兼容。
- 在服务器端,有一个工具可能非常有用,它的名字是安全组. 它允许你多路复用使用普通 https 服务通过 https 流量传输您的 openvpn/ssh。
所以,你的实际数据连接并不像你想象的那么简单,但你可以达到你想要的效果。如果你使用所有这些技术,它甚至可以抵挡智能网络安全检查。
答案3
为什么不在“dropbox”上安装一个持久的reverse_http(s) meterpreter?我认为这是通过http(s)获取反向shell的最简单方法。