目录
1.前言
2.准备工作(以我自己复现成功举例)
3.基于frp的ssh内网穿透
3.1服务器部署
3.2客户端部署
3.3远程连接内网电脑
4.绕过防火墙内网穿透
4.1开启防火墙
5.基于frp的web内网穿透服务
6.注意事项
我们知道公司电脑在一个局域网,家里电脑在一个局域网内,家里的电脑我们可以认为是在内网当中,我们一般是访问不到内网的主机的。但是处于内网或者是防火墙后面的机器,对外网提供tcp和udp服务,所以我们可以使用frp实现用公司电脑远程登录家里电脑。frp 是一个可用于内网穿透的高性能的反向代理应用,支持 tcp, udp, http, https 协议。
如果我们在攻击时候拿到内网一台主机,我们可以使用frp绕过防火墙进行内网渗透,进而攻击其他主机。因为内网的机子是可以互相访问的。
需要一个公网服务器(我是自己买的阿里云)
需要一个内网机器(这里我用的是我物理机安装的虚拟机linux系统,桥接模式的)
frp下载地址https://github.com/fatedier/frp/releases
1.直接登录我的服务器使用下载命令(截至我写的日期,最新版本是0.39.1),因为我的服务器是linux所以下载inux对应l版本,window下载window对应版本,
wget https://github.com/fatedier/frp/releases/download/v0.39.0/frp_0.39.0_linux_amd64.tar.gz
2.下载完成,进行解压,
tar -zxvf frp_0.39.0_linux_amd64.tar.gz
3.解压完成进入目录会看到以下几个文件,我们只需要关注frps有关的文件,因为s代表servers, frpc有关文件可以删除也可以不用管它。frps是运行在服务器端,frpc是运行在客户端,也就是我们的内网的一台电脑,如果只是通过ssh访问内网电脑frps.ini文件不需要配置
4.将frps运行起来,运行代码如下,可以看到成功运行,这时候就放着不动,不要关闭终端。
./frps -c ./frps.ini
1.我的客户端是我的一台虚拟机,和物理机使用桥接模式连接,使用同样下载命令,也是同样命令解压,这时候我们需要配置frpc.ini文件
vim frpc.ini
[common]
server_addr = 11x.x.x.x#你的服务器IP地址,我自己就不放出来了
server_port = 7000 # 之前frps.ini里面的端口,
[ssh]
type = tcp
local_ip = 192.168.43.141#虚拟机的IP地址(你想渗透的那天电脑IP地址)
local_port = 22#因为我们是希望通过ssh服务连接,所以端口是22 这是linux 如果是window则改成3389
#本地需要替换的端口
remote_port = 6000 #这是我们内网的电脑将22端口映射到服务器端6000端口。
#替换成6000端口
2.运行frpc,命令如下
./frpc -c ./frpc.ini
这时候我们就来远程控制这台家里的电脑,我让我家里人打开我家里电脑运行frpc,我在外面进行连接,就远程连接上了可以进行命令操作。连接命令如下:
ssh [email protected] -p 6000#服务器端的IP地址
刚才我们在没有开启防火墙的状态利用frp远程连接了处于内网的电脑, 接下来是当我们开启防火墙是否还能进行连接。那这个实验就比较简单了。
1.首先我们来到虚拟机使用命令开启防火墙,那么我把有关防火墙命令给到大家。
1. 检查防火墙的状态(默认 inactive) # ufw status
2. 防火墙版本 # ufw version
3. 启动ufw防火墙 # ufw enable
4. 关闭ufw防火墙 # ufw disable
5. 默认禁止访问所有 # ufw default deny
6.
7. 开放22/TCP端口 # ufw allow 22/tcp
8. 开放53端口(tcp/udp) # ufw allow 53
9. 禁止外部访问 # ufw deny 3306
10. 删除已经添加过的规则 # ufw delete allow 22
11. 允许此IP访问所有的本机端口 # ufw allow from 192.168.1.100
12. 删除上面的规则 # ufw delete allow from 192.168.1.100
13.
14. 查看规则,显示行号 # ufw status numbered
15. 删除第三条规则 # ufw delete 3
16. 关闭ufw # ufw disable
17. 禁止对8888端口的访问 # ufw deny 8888
18.
19. 打开来自192.168.0.1的tcp请求的22端口 # ufw allow proto tcp from 192.168.0.1 to any port 2
2.可以看到我的虚拟机防火墙处于开启状态,这时候我们在物理机cmd里面使用ssh去连接发现连接不上
3. 当我关闭防火墙的时候,物理机去连的时候是可以远程登录的。接下来我们关闭防火墙,使用frp进行连接。
4.我们在服务器向之前一样运行frps ,在虚拟机开启防火墙的状态下运行frpc,在物理机进行连接,但是注意的是这个时候连接时候需要使用你服务器地址加端口号进行连接。我之前虚拟机IP地址连接是给你看,开启防火墙我的本地物理机已经连不上了模拟一下。可以看到成功绕过防火墙进行远程连接。
上面都是基于ssh的远程连接,下面我们是基于web服务,如果内网的主机提供web服务,我们可以利用frp进一步渗透。
1.将frps.ini配置文件改成下面
[common]
bind_port = 7000
vhost_http_port = 801
2.将frpc.ini配置文件改成如下,custom_domains这个写你服务器域名或者IP地址。
3.开启80端口
4.分别运行frps和frpc,在浏览器通过服务器IP/域名+端口就可以访问内网web服务
1.服务器要开启7000端口
2.客户端开启ssh服务也就是22端口和80端口
3.如果你的ssh服务出现拒绝连接可以参考以下连接解决kali中开启ssh连接功能_不知其所以然的博客-CSDN博客_kali ssh连接
4.客户端不需要服务端与保持环境一致,可以服务器是Linux,客户端电脑是Windows
5.如果客户端是windows,frpc.ini配置文件需要和linux有点不一样,改成如下
[common]
server_addr = 11x.x.x.x#你的服务器IP地址,我自己就不放出来了
server_port = 7000 # 之前frps.ini里面的端口,
[rdp]
type = tcp
local_ip = 192.168.43.141#虚拟机的IP地址(你想渗透的那天电脑IP地址)
local_port = 3389#因为我们是希望通过ssh服务连接,所以端口是22 这是linux 如果是window则改成3389
#本地需要替换的端口
remote_port = 6000 #这是我们内网的电脑将22端口映射到服务器端6000端口。
#替换成6000端口
运行命令如下
frpc.exe -c frpc.ini
6.ssh远程连接时候的需要输入用户密码,那个是客户端电脑的用户和用户密码。