linux 下可以使用 iptables 做端口复用,windows 下就没啥办法了。
除非你花一大笔钱找微软买个签名把驱动给签了然后做端口复用,这个土豪的方法我们先不提。
还有一个方法就是使用 Neo 这种类型的,挺好用的,但是有没有更快一点的方案?
比如:websocket?直接长连接?直接做到原生 tcp 的运行效率?
如果我们直接请求目标服务器的任意端口,只要能在 netstat -anpt 里面看到我们的请求 IP,我们就能根据这个 IP 用 iptables 做一个端口转发
iptables -t nat -A PREROUTING -p tcp -s 我们的IP --dport 目标WEB端口 -j REDIRECT --to-port 转发端口
gost -L ws://:7000
然后在中间件各种配置,最后在我们本地使用
gost -L=:8080 -F=ws://远程web地址:远程web端口
就可以使用 web 端口复用走Web应用的长连接的websocket代理了
location /ws {
proxy_redirect off;
proxy_pass http://ws监听ip:本地ws监听代理;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $http_host;
proxy_read_timeout 300s;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
nginx -s reload
Apache 修改的就有点多了, 得给配置文件添加模块引用。然而唯一有点安慰的就是,这玩意的模块是自带的。
先引用模块,有两个方案,直接用命令
sudo a2enmod proxy proxy_http proxy_ajp proxy_balancer mod_proxy_wstunnel.so
LoadModule proxy_module /usr/lib/apache2/modules/mod_proxy.so # 填写apache模块的绝对路径
....
ProxyPass /ws ws://127.0.0.1:7000/ws
service apache2 reload
应该可以用 powershell 解决,但是 windows 上其实非常滴麻烦,因为要手动安装两个模块,并不自带所以推荐还是 Neo 或者 IIS 插件后门,除非你觉得管理员水平实在太差。
首先是启用 Websocket,打开控制面板,启用或删除 windows 功能。
选上Websocket接下来就是安装 ARR 和 URL REWRITE
安装 ARR:application-request-routing
安装 URL REWRITE:url-rewrite
然后配置 ARR
点击启用就行
然后配置一个 URL 转发,找到你的项目吃,点击 URL 重写
也不需要什么通配符,直接完全匹配 GOST 的 ws 就行
原理基本就是配一个 websocket 转发,大差不差
上面的 ws 全部应该都可以改成 MWS,我看 gost 是支持多路复用的,虽然不知道实际提升有多大,但是听起来很牛逼,那就当它很牛逼就好了
还有一个就是 ws 的通讯协议没加密,可以考虑升级 WSS,但是 WSS 配置又会遇到很多很麻烦的东西。最典型的就是证书啊证书啊证书啊。
还有一个就是 gost 的 ws 默认监听路由也得改一改,流量特征太大了。这些后续都要自己处理一下,避免实战中被发现。
原文始发于微信公众号(SecretTeam安全团队):渗透Tips之 不同中间件端口复用代理解决方案
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论