首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >内网隧道之frp

内网隧道之frp

作者头像
中龙技术
发布于 2022-09-29 13:12:04
发布于 2022-09-29 13:12:04
76600
代码可运行
举报
文章被收录于专栏:kaydenkayden
运行总次数:0
代码可运行

内网隧道之frp

前言

本文研究通过TCP和HTTP出网的一个工具,frp

github:https://github.com/fatedier/frp

一、概述

1、简介

写于2015年,持续更新,用Go编写,经典出网工具

  • 支持TCP和UDP,以及HTTP和HTTPS协议,同时也支持P2P
  • 支持加密和压缩
  • 支持跨平台
  • 有GUI
  • 依赖于配置文件

2、原理

  • 首先,frpc 启动之后,连接 frps,并且发送一个请求 login(),之后保持住这个长连接,如果断开了,就重试
  • frps 收到请求之后,会建立一个 listener 监听来自公网的请求
  • 当 frps 接受到请求之后,会在本地看是否有可用的连接( frp 可以设置连接池),如果没有,就下发一个 msg.StartWorkConn 并且 等待来自 frpc 的请求
  • frpc 收到之后,对 frps 发起请求,请求的最开始会指名这个连接是去向哪个 proxy 的
  • frps 收到来自 frpc 的连接之后,就把新建立的连接与来自公网的连接进行流量互转
  • 如果请求断开了,那么就把另一端的请求也断开

3、用法

(1)服务端

frps.ini配置文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[common]
#frp服务器监听地址,如果是IPV6地址必须用中括号包围
bind_addr = 0.0.0.0 
#frp服务器监听端口
bind_port = 7000
 
#kcp的udp监听端口,如果不设那就不启用
#kcp_bind_port = 7000
#指定使用的协议,默认tcp,可选kcp
#protocol = kcp
 
#如果要使用vitual host,就必须设置
#vhost_http_port = 80
#vhost_https_port = 443
 
#Web后台监听端口
dashboard_port = 7500
 
#Web后台的用户名和密码
dashboard_user = admin
dashboard_pwd = admin
 
#Web后台的静态资源目录,调试用的,一般不设
#assets_dir = ./static
 
#日志输出,可以设置为具体的日志文件或者console
log_file = /var/log/frps.log
 
#日志记录等级,有trace, debug, info, warn, error
log_level = info
#日志保留时间
log_max_days = 3
 
#启用特权模式,从v0.10.0版本开始默认启用特权模式,且目前只能使用特权模式
#privilege_mode = true
 
#特权模式Token,请尽量长点且复杂
privilege_token = 12345678
 
#特权模式允许分配的端口范围
privilege_allow_ports = 2000-3000,3001,3003,4000-50000
 
#心跳超时,不用改
#heartbeat_timeout = 90
 
#每个代理可以设置的连接池上限
#max_pool_count = 5
 
#认证超时时间,一般不用改
#authentication_timeout = 900
 
#如果配置了这个,当你的模式为http或https时,就能设置子域名subdomain
#subdomain_host = frps.com
 
#是否启用tcp多路复用,默认就是true,不用管
#tcp_mux = true

运行

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
./frps -c ./frps.ini
./frps -c ./frps.ini & # 后台运行
# 如果要运行多个服务端:只需要复制并修改frps.ini配置文件中的端口号

(2)客户端

frpc.ini配置文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[common]
#frp服务器地址
server_addr = 1.2.3.4
#frp服务器端口
server_port = 7000
#特权模式Token
privilege_token = 12345678
#转发SSH
[ssh]
type = tcp
#可以指定为其它IP,默认是本地
#local_ip = 127.0.0.1
local_port = 22  #代理出去的端口
remote_port = 6000 #出去的端口
#启用加密
use_encryption = true
#启用压缩
use_compression = true
 
#转发Web
[web]
type = http
local_port = 80
custom_domains = www.yourdomain.com
#修改header中的host
#host_header_rewrite = dev.yourdomain.com
#启用简单HTTP认证
#http_user = abc
#http_pwd = abc
#在服务端配置了subdomain_host的情况下用于自定义二级域名
#subdomain = test
#在存在多个相同域名的情况下通过请求的URL路由到不同的配置
#locations = /news,/about
 
#转发DNS请求
[dns]
type = udp
local_ip = 8.8.8.8
local_port = 53
remote_port = 6000
 
#转发Unix域套接字(这儿是Docker)
[unix_domain_socket]
type = tcp
remote_port = 6000
plugin = unix_domain_socket
plugin_unix_path = /var/run/docker.sock
 
#HTTP代理
[http_proxy]
type = tcp
remote_port = 6000
plugin = http_proxy
#配置http代理的简单认证
#plugin_http_user = abc
#plugin_http_passwd = abc

运行

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
./frpc -c ./frpc.ini
./frpc -c ./frpc.ini & # 后台运行
# 如果要运行多个客户端:只需要复制并修改frpc.ini配置文件中的端口号

二、实践

1、测试场景

攻击机(服务端):kali 192.168.10.128

目标机(客户端):ubuntu 192.168.10.129

都没有限制TCP连接

2、建立隧道

(1)服务端

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
./frps -c ./frps.ini

(2)客户端

开启Apache

配置文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
./frpc -c ./frpc.ini

(3)隧道建立

类似地,可以根据服务来确定端口

3、抓包看看

三次握手建立连接

调用服务期间

三、探索

1、源码与分析

frp 的程序代码为了糅合 frpc 和 frps 之间的请求,自己在TCP之上进行协议封装,因此大量使用了 channel, 所以代码被割散到各处,很不容易连贯起来

可参见:https://jiajunhuang.com/articles/2019_06_19-frp_source_code_part2.md.html

2、检测与绕过

(1)配置文件

用配置文件是个大把柄

绕过方法:重构,不用配置文件

(2)特征字符串和特征码

命令和log里的特征字符串可以作为检测特征

然后是代码里的特征码

绕过方法:修改掉相应的特征

(3)端口控制

做好端口控制,只开放必须的端口

绕过方法:端口复用

(4)进程和库调用

通过终端的进程链控制和第三方库的调用情况在做检测

绕过方法:白进程利用,尽可能不调用库,加壳,主要是木马免杀那套

结语

frp太有名太成熟了(也就是说针对frp的检测应该也是很成熟的事儿了),但是源码十分分散


红客突击队于2019年由队长k龙牵头,联合国内多位顶尖高校研究生成立。其团队从成立至今多次参加国际网络安全竞赛并取得良好成绩,积累了丰富的竞赛经验。团队现有三十多位正式成员及若干预备人员,下属联合分队数支。红客突击队始终秉承先做人后技术的宗旨,旨在打造国际顶尖网络安全团队。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-05-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 红客突击队 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
内网穿墙利器frp,实现无公网IP穿透(支持windows+linux)
开源项目下载地址→https://github.com/fatedier/frp/releases frp 是一个可用于内网穿透的高性能的反向代理应用,支持 tcp, udp, http, https 协议。
Lcry
2022/11/29
4.2K0
搭建frp内网穿透
frp脚本下载:https://github.com/fatedier/frp/releases/
R0A1NG
2022/02/19
1.9K0
搭建frp内网穿透
常见内网穿透工具,收好了!
目前支持tcp、udp流量转发,可支持任何tcp、udp上层协议(访问内网网站、本地支付接口调试、ssh访问、远程桌面,内网dns解析等等……)。
网络工程师笔记
2023/09/09
1.5K0
常见内网穿透工具,收好了!
Frp内网穿透
Frp是一个用于内网穿透的反向代理工具,可以方便的从外网访问内网中的主机。frp分为服务器端(frps)和客户端(frpc),想要实现内网穿透,除了需要frp工具,我们还需要一台VPS。接下里就演示一下内网穿透的效果。
Tommonkey
2023/02/27
2.3K0
Frp内网穿透
推荐几款实用的内网穿透工具
本文以渗透的视角,总结几种个人常用的内网穿透,内网代理工具,介绍其简单原理和使用方法。
Java团长
2022/02/10
9.1K1
推荐几款实用的内网穿透工具
内网渗透 | 内网穿透工具FRP的使用
FRP(Fast Reverse Proxy) 是一款简单,好用,稳定的隧道工具。FRP 使用 Go 语言开发,它是一款高性能的反向代理应用,可以轻松地进行内网穿透,对外网提供服务。FRP 支持 TCP、UDP、KCP、HTTP、HTTPS等协议类型,并且支持 Web 服务根据域名进行路由转发。在进行内网渗透中,FRP是常用的一款隧道工具。
谢公子
2022/01/19
2.6K0
内网渗透 | 内网穿透工具FRP的使用
FRP 搭建内网穿透
下载最新的 FRP :https://github.com/fatedier/frp/releases 几种常用架构如:
chuchur
2022/10/25
2K0
FRP 搭建内网穿透
frp配置-内网穿透工具最佳实践
frp是一个可用于内网穿透的高性能的反向代理应用,支持 tcp, udp 协议,为 http 和 https 应用协议提供了额外的能力,且尝试性支持了点对点穿透。
zhangheng
2020/04/29
9.2K0
frp配置-内网穿透工具最佳实践
使用frp配置内网穿透访问(超详细)
frp 是一个开源、简洁易用、高性能的内网穿透和反向代理软件,支持 tcp, udp, http, https等协议。
网络安全自修室
2021/11/25
3K0
使用frp配置内网穿透访问(超详细)
内网穿透工具 frp 使用教程
frp 适用于有公网IP需求的用户,如果有需要在互联网中找到自己的电脑,但是电脑又没有公网IPv4地址,又不想用IPv6地址,恰好还有一个空闲的拥有IPv4公网地址的云服务器,那么frp 是使用你需要的工具。
为为为什么
2022/08/06
6.4K0
内网穿透工具 frp 使用教程
frp实现外网访问群晖synology
    下载Linux(centos7)版本的frp_0.21.0,所有版本frp点这里
用户1086810
2018/09/27
7.3K0
frp+nginx实现内网穿透
写在前面:上一篇文章写了关于ngrok+nginx实现内网穿透的流程,并提出了一些存在的问题,昨天试过frp之后,将之前ngrok存在的无法映射本地域名的问题解决了 frp 是一个可用于内网穿透的高性能的反向代理应用,支持 tcp, udp, http, https 协议。 先决条件 有一个域名,并解析到自己服务器上,如:*.frp.lestat.me 有一个具备固定ip的公网服务器 系统环境 假设环境为: 服务器OS:ubuntu17.10 客户端OS:macOS High Sierra 以下内容将
lestat
2018/04/17
11.5K0
frp+nginx实现内网穿透
FRP 内网穿透下载配置[通俗易懂]
搭建FRP很简单,关键的步骤只有三步: 1,获取FRP文件; 2,设置FRP配置文件; 3,启动FRP服务。
全栈程序员站长
2022/09/30
1.6K0
FRP 内网穿透下载配置[通俗易懂]
安排几款实用的内网穿透工具+教程
本文以渗透的视角,总结几种个人常用的内网穿透,内网代理工具,介绍其简单原理和使用方法。
民工哥
2021/11/26
1.4K0
内网隐藏通信隧道技术——FRP隧道
frp是一个专注于内网穿透的高性能的反向代理应用,支持TCP、UDP、HTTP、HTTPS等多种协议。可以将内网服务以安全、便捷的方式通过具有公网IP节点的中转暴露到公网。frp的好处是利用内网或防火墙后的机器,对外网环境提供http或https服务。对于http和https服务支持基于域名的虚拟主机,支持自定义域名绑定,使多个域名可以共用一个80端口。利用处于内网或防火墙后的机器,对外网环境提供tcp和udp服务,例如在家里通过ssh或者web访问公司内网环境内的主机或者业务进行办公。frp采用Golang编写,支持跨平台,除了二进制文件,没有额外依赖
释然IT杂谈
2022/10/27
3.9K0
内网隐藏通信隧道技术——FRP隧道
Frp内网穿透教程记录
很久很久以前从学校那嫖了台服务器,可惜是内网的,但是总比没有好啦,那时候一直觉得内网映射很麻烦,遥不可及,然后也就一直没有去弄。
SingYi
2022/07/13
7400
Frp内网穿透教程记录
FRP内网穿透工具
frp 是一个可用于内网穿透的高性能的反向代理应用,支持 tcp, udp, http, https 协议。主要他是一个开源的。
Javen
2018/08/21
3.8K2
FRP内网穿透工具
内网穿透FRP搭建教程
        开篇先虾扯蛋一会儿,看到上一篇博文更新已经是1个多月之前的文章了,当时学习小程序忙!拖拖拉拉一个多月,也没学到什么,不过基本的构建明白了!今天是给大家分享一下,内网穿透教程!顺便分享一下自己的frp服务器!
十月梦想
2018/08/29
3.7K0
frp使用说明(转)
frp 是一个可用于内网穿透的高性能的反向代理应用,支持 tcp, udp 协议,为 http 和 https 应用协议提供了额外的能力,且尝试性支持了点对点穿透。GitHub地址
yaodo
2022/08/26
1.5K0
树莓派折腾记:使用FRP穿透内网
文章更新:   20170525 初次成文 问题提出:   在实际网络环境中,树莓派常常处于内网环境下,由于内外网相互隔离的原因,我们无法在外网访问处于内网中的树莓派。为了解决这个问题,"内网穿透"技术应运而生。   FRP是一个可用于内网穿透的高性能的反向代理应用,支持 tcp, udp, http, https协议。在这篇文章中,小苏将为大家介绍FRP服务端和客户端的配置,通过FRP,让树莓派穿透内网,使大家在外网环境下也能轻松访问处于内网中的树莓派~   本篇文章只做抛砖引玉目的 ,请大家在看完文章
美丽应用
2018/07/20
2.5K0
相关推荐
内网穿墙利器frp,实现无公网IP穿透(支持windows+linux)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档