前言
frp反弹确实很爽,但是很多时候这B服务器不出网,或者说动不动就被流量设备检测到了
linux下可以使用iptables做端口复用,windows下就没啥办法了。
除非你花一大笔钱找微软买个签名把驱动给签了然后做端口复用,这个土豪的方法我们先不提。
还有一个方法就是使用Neo这种类型的,挺好用的,但是有没有更快一点的方案?
比如。。。websocket?直接长连接?直接做到原生tcp的运行效率?
二话不说,开干!
iptables 端口复用
这里就随口提一下iptables端口复用
如果我们直接请求目标服务器的任意端口,只要能在netstat -anpt
里面看到我们的请求IP,我们就能根据这个IP用iptables做一个端口转发
iptables -t nat -A PREROUTING -p tcp -s 我们的IP --dport 目标WEB端口 -j REDIRECT --to-port 转发端口
GOST
原本想动手写的,但是想了想还是不能乱造轮子,于是乎github稍微搜索了一番,愉快的找到了这个工具
项目地址:GOST
我们目标也很简单,就是听个websocket的代理,然后使用各种中间件中转,最后用本地代理,设置级联就行
项目里的功能正好符合我们的需要,我们只需要在远程服务器上,运行
gost -L ws://:7000
然后在中间件各种配置,最后在我们本地使用
gost -L=:8080 -F=ws://远程web地址:远程web端口
就可以使用web端口复用走Web的,长连接的,websocket的代理了
Nginx中间件配置
nginx的配置挺简单的,一个端口转发就行
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有个好,就是有热重载功能,直接一句nginx -s reload
就行,至少不怕炸原本的业务
Apache
Apache修改的就有点多了, 得给配置文件添加模块引用。然而唯一有点安慰的就是,这玩意的模块是自带的。
先引用模块,有两个方案,直接用命令
sudo a2enmod proxy proxy_http proxy_ajp proxy_balancer mod_proxy_wstunnel.so
或者直接在你的conf里面添加,把上面这些模块都加进去
LoadModule proxy_module /usr/lib/apache2/modules/mod_proxy.so # 填写apache模块的绝对路径
....
然后写入代码
ProxyPass /ws ws://127.0.0.1:7000/ws
最后再service apache2 reload
就行
IIS
windows就不大一样了,可以图形化点点点,也能命令行,啊,但是命令行操作我不会.jpg
应该可以用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默认监听路由也得改一改,流量特征太大了。这些后续都要自己处理一下,避免实战中被发现。