0x00 前言
frp 是一个开源、简洁易用、高性能的内网穿透和反向代理软件,支持 tcp、 udp、http、https 等协议。
https://github.com/fatedier/frp
目前最新的0.44版:
-
plugin_key_path如果和plugin_crt_path对于插件https2https和为空,则使用自动生成的证书https2http;
-
服务器仪表板支持 TLS 配置。
特点:
-
客户端服务端通信支持 TCP、KCP 以及 Websocket 等多种协议;
-
采用 TCP 连接流式复用,在单个连接间承载更多请求,节省连接建立时间。
-
代理组间的负载均衡;
-
端口复用,多个服务通过同一个服务端端口暴露;
-
多个原生支持的客户端插件(静态文件查看,HTTP、SOCK5 代理等),便于独立使用 frp;
-
客户端完成某些工作;
-
高度扩展性的服务端插件系统,方便结合自身需求进行功能扩展;
-
服务端和客户端 UI 页面。
FRP代理类型:
类型 |
描述 |
tcp |
单纯的 TCP 端口映射,服务端会根据不同的端口路由到不同的内网服务。 |
udp | 单纯的 UDP 端口映射,服务端会根据不同的端口路由到不同的内网服务。 |
http |
针对 HTTP 应用定制了一些额外的功能,例如修改 Host Header,增加鉴权。 |
https |
针对 HTTPS 应用定制了一些额外的功能。 |
stcp | 安全的 TCP 内网代理,需要在被访问者和访问者的机器上都部署 frpc,不需要在服务端暴露端口。 |
sudp |
安全的 UDP 内网代理,需要在被访问者和访问者的机器上都部署 frpc,不需要在服务端暴露端口。 |
xtcp |
点对点内网穿透代理,功能同 stcp,但是流量不需要经过服务器中转。 |
tcpmux |
支持服务端 TCP 端口的多路复用,通过同一个端口访问不同的内网服务。 |
1.了解目录:
作者工具的帮助手册
https://gofrp.org/docs/overview/
大概分析了一下它的内容:
cmd:命令行模式
conf:配置文件示例
pkg:主要文件
web:web模式w
2.工作模式
客户端:(frpc) 加载配置:(frpc.ini)
服务端:(frps) 加载配置:(frps.ini)
3.使用
命令:
(linux)
./frps -c frps.ini
./frpc -c frpc.ini
(windows)
frps.exe -c frps.ini
frpc.exe -c frpc.ini
0x01 正文
二开:
https://github.com/CllmsyK/nsfrp_0.45_amd64
TLS加密
tlsenable = true #frpc.ini中加入
传输压缩
use_encryption = true
use_compression = true #frpc.ini中加入,开启tls不必进行传输压缩
信息修改
新版:frp-devpkgmsgmsg.go
旧版:frpmodelsmsgmsg.go
Version string 'json:"NS_learn"'
Hostname string 'json:" NS_ip"'
Os string 'json:" NS_0s"'
Arch string 'json:" NS_ac"'
User string 'json:" NS_username"'
PrivilegeKey string 'json:" NS_pKEY"'
Timestamp int64 'json:" NS_time"'
RunId string 'json:" NS_rID"'
Metas map[string]string 'json:" NS_m"'
流量特征修改
新版:pkgutilnettls.go
旧版:frputilsnettls.go
var (FRP_TLS_HEAD_BYTE = 0x16
c.Write([]byte{byte(FRP_TLS_HEAD_BYTE),byte(0x71),byte(0x72)})
sc, r := gnet.NewSharedConnSize(c, {4})
buf := make([]byte, {3})
if n == 1 && int(buf[0]) == FRP_TLS_HEAD_BYTE {
写死配置
pkgconfigclient.go # frpc
pkgconfigserver.go # frps
(根据自己想要的配置来进行写死)
GO编译
set GOARCH=amd64
set GOOS=linux
go build main.go
效果
使用
目标:nsfrp_0.44.exe
VPS:./nsfrp_0.44_mad64
0x03 拓展方法
方法一:远程加载 frpc.ini(配置隐藏)
缺点:看命令日志会暴露一个web服务端,对流量做分析仔细点还是能看到
优点:隐藏配置文件,给溯源团队增加工作量
使用:
思考:配置文件只是用于加载,通过快速打点获取公网上的任何一台 web 服务,将配置文件上传,再通过公网的配置文件来加载进去 frpc.exe 中,接着把该配置文件从该 web 服务器上删除,如果再给该 vps Ip 做个 CDN 隐藏,是否能让溯源团队工作量增加。
方法二:购买 CDN 域名来替代真实 IP(有钱即可)
方法三:通过域前置隐藏真实 IP(未实现)
原文始发于微信公众号(NS Demon团队):优化Frp研究与使用
- 我的微信
- 微信扫一扫
-
- 我的微信公众号
- 微信扫一扫
-
评论