跳板攻击之:frp代理转发

1 frp 介绍

frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。

文档 | frp (gofrp.org)

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 实验准备

  1. 添加 A 记录 <your_vps_ domain> 指向 VPS IP
  2. CentOS2主机开放了22与80端口与服务

3.2 实验拓扑

4 frp代理socks

  1. 实现:kali通过frp socks代理,访问蓝队内网2 CentOS2 的 ssh 服务。

  2. 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
  3. 蓝队内网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
  4. kali配置/etc/proxychains4.conf

    socks5          <your_vps_IP> 32123 fcarey Aadmin@123
    • 代理服务器IP为:VPS 的 IP
  5. kali通过frp socks代理,访问蓝队内网2 CentOS2 的 ssh 服务。

5 frp代理stcp安全地暴露内网服务

  1. 实现:kali通过frp stcp代理,创建一个只有自己能访问到蓝队内网2 CentOS2 的 SSH 服务代理。

    :使用 stcp(secret tcp) 类型的代理可以避免让任何人都能访问到要穿透的服务,但是kali也需要运行另外一个 frpc 客户端。

  2. 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
  3. 蓝队内网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
  4. 红队内网 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
  5. kali通过frp stcp代理,访问到蓝队内网2 CentOS2 的 SSH 服务。

6 frp代理tcp

  1. 实现:kali通过frp tcp代理,访问蓝队内网2 CentOS2 的 ssh 服务。

  2. 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
  3. 蓝队内网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
  4. 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 服务

  1. 实现:kali通过frp代理http,使用http://<your_vps_ domain>:8888,访问蓝队内网2 CentOS2上的 WEB 服务器(80端口)。

  2. 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
  3. 蓝队内网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
  4. 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对外提供简单的文件访问服务

  1. 实现:kali通过frp代理static_file,下载蓝队内网1 CentOS上文档。

  2. 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
  3. 蓝队内网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
  4. 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

  1. 实现:kali通过frp xtcp代理,创建一个只有自己能访问到蓝队内网2 CentOS2 的 SSH 服务代理。

    • frp 提供了一种新的代理类型 xtcp 用于应对在希望传输大量数据且流量不经过服务器的场景,使用方式同 stcp 类似,kali也需要运行另外一个 frpc 客户端。
    • xtcp目前处于开发的初级阶段,并不能穿透所有类型的 NAT 设备,所以穿透成功率较低。穿透失败时可以尝试 stcp 的方式。
    • 本次实验没有成功。
  2. 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
  3. 蓝队内网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
  4. 红队内网 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
  5. kali通过frp stcp代理,访问到蓝队内网2 CentOS2 的 SSH 服务。

    失败。

10 高级功能

功能特性 | frp (gofrp.org)

跳板攻击之:frp代理转发的更多相关文章

  1. FRP代理及其在数据库安全上的实践

    1 代理 现如今的互联网世界里,代理服务已经十分常见,它通常作为一个第三方或者说中转站角色替代用户取得信息或者服务. 根据代理对象的不同,代理服务可以分为正向代理和反向代理. 1.1 正向代理 我们通 ...

  2. ssh代理转发

    实验环境 serverA:172.16.2.116 serverB:172.16.2.225 serverC:172.16.2.115 "代理转发"是针对ssh认证过程的一种转发 ...

  3. curl运行json串,代理转发格式

    curl -b 'uin=o0450654733; skey=@tq9xjRvYy' -H "Content-Type: application/json" -X POST -d ...

  4. windows下使用密钥登录Linux及xshell代理转发

    1.密钥登录原理 一般我们使用xshell访问远程主机(Linux主机)时,都是先请管理员给我们开一个账户,即为我们设置一个一个用户名和对应的密码,然后我们就可以使用下面的方式登录到远程主机了: 在这 ...

  5. IIS充当代理转发请求到Kestrel

    接着上篇博文为ASP.NetCore程序启用SSL的code,这篇将介绍如何用IIS充当反向代理的角色转发请求到Kestrel服务器 与ASP.NET不同,ASP.netCore使用的是自托管web服 ...

  6. Nginx代理转发Apache+svn

    1.安装svn和httpd yum install httpd yum install subversion mod_dav_svn 创建仓库目录 mkdir -p /var/www/svn 3.创建 ...

  7. nginx反向代理转发后页面上的js css文件无法加载【原创】

    故障现象:nginx做代理转发后,发现页面上的js css文件无法加载,页面样式乱了. 原因:没有配置静态资源 解决js css文件无法加载无法访问的问题 解决办法: 修改配置文件nginx.conf ...

  8. Docker Kubernetes hostPort 代理转发

    Docker Kubernetes  hostPort 代理转发 hostPort: 1. 类似docker -p 映射宿主级端口到容器. 2. 容器所在的主机暴露端口转发到指定容器中. 3. hos ...

  9. IIS充当反向代理转发请求到Kestrel

    接着上篇博文为ASP.NetCore程序启用SSL的code,这篇将介绍如何用IIS充当反向代理的角色转发请求到Kestrel服务器 介绍 与ASP.NET不同,ASP.netCore使用的是自托管w ...

  10. iis和apache共用80端口,IIS代理转发apache

    为什么共用80端口应该不用多说了,服务器上程序运行环境有很多套,都想抢用80端口,所以就有了共用80端口的解决方案. 网上很多的教程一般都是设置APACHE使用默认80端口,代理转发IIS的网站,II ...

随机推荐

  1. Isaac SDK & Sim 环境

    Isaac 是 NVIDIA 开放的机器人平台.其 Isaac SDK 包括以下内容: Isaac Apps: 各种机器人应用示例,突出 Engine 特性或专注 GEM 功能 Isaac Engin ...

  2. 解读JVM级别本地缓存Caffeine青出于蓝的要诀2 —— 弄清楚Caffeine的同步、异步回源方式

    大家好,又见面了. 本文是笔者作为掘金技术社区签约作者的身份输出的缓存专栏系列内容,将会通过系列专题,讲清楚缓存的方方面面.如果感兴趣,欢迎关注以获取后续更新. 上一篇文章中,我们继Guava Cac ...

  3. 如何用3D流体实现逼真水流效果?

    华为应用市场在2022年HDC大会期间发布了一款3D水流主题,基于华为HMS Core Scene Kit服务能力,展现立体灵动的水流岛屿,可跟随用户指尖实现实时流体波动效果,既趣味又解压. 让变幻莫 ...

  4. des_招标

    网站 aHR0cHM6Ly9jdGJwc3AuY29tLyMv 翻到第二页,加载了一个2,并且返回的都是加密的数据  点到initiator,可以看到发送的Axios请求,尝试全局搜索intercep ...

  5. drf快速使用 CBV源码分析 drf之APIView分析 drf之Request对象分析

    目录 序列化和反序列化 drf介绍和安装 使用原生django写接口 django DRF安装 drf快速使用 模型 序列化类 视图 路由 datagrip 使用postman测试接口 CBV源码分析 ...

  6. Html飞机大战(十八): 模块化+项目开源

    好家伙,好久好久没有更新这个系列了   为了使文档更方便阅读,使代码更容易维护,来把这个飞机大战模块化 项目已开源: https://gitee.com/tang-and-han-dynasties/ ...

  7. Windowsのcmd命令

    Windowsのcmd命令 网络操作: ipconfig命令: ipconfig -all 查看网络信息 ipconfig -release 释放ip/tcp ipconfig -renew 重新获取 ...

  8. 让 Win8.1 微软拼音新体验模式支持 Metro 应用

    内容回顾: [1]十个步骤找回 Win8 中的微软拼音新体验模式 [2]发布个工具,一键恢复Win8/8.1中的微软拼音长句模式(新体验模式) 在 [1] 中,我们找回了 Win8 里的微软拼音新体验 ...

  9. SOFAJRaft源码阅读-ShutdownHook如何优雅的停机

    Java程序经常会遇到进程挂掉的情况,一些状态没有正确的保存下来,这时候就需要在JVM关掉的时候执行一些清理现场的代码.JAVA中的ShutdownHook提供了比较好的方案.而在SOFAJRaft- ...

  10. TCP通信的客户端代码实现-TCP通信的服务器端代码实现

    TCP通信的客户端代码实现 两端通信时步骤:1.服务端程序,需要事先启动,等待客户端的连接.⒉.客户端主动连接服务器端,连接成功才能通信.服务端不可以主动连接客户端.在Java中,提供了两个类用于实现 ...