返回
Featured image of post FRP内网穿透

FRP内网穿透

神奇小知识👉又来了👇

0x01 技术介绍


0x01.01 项目介绍


FRP下载地址:
快速反向代理

项目介绍:快速反向代理,帮助用户将 NAT 或防火墙后面的本地服务器暴露给 Internet

0x01.02 FRP 隧道技术介绍


| frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议,且支持 P2P 通信

在 FRP 中,一个代理对应一个需要公开访问的内网服务。一个客户端可以同时配置多个代理,以满足不同的需求。

0x02 环境&文件准备


安装环境:Ubuntu Server 24.0LTS FRP 版本: 最新

0x02.01 下载安装


0x02.01.A 自动下载 git


使用命令:

1
git clone https://gitclone.com/github.com/fatedier/frp.git

进入目录:

0x02.01.B 手动下载


手动文件下载:

选择对应版本下载,解压,进入对应目录

Wget: Linux 下还可以用 wget 程序下载文件 使用命令:

1
wget https://github.com/fatedier/frp/releases/download/v0.60.0/frp_0.60.0_linux_amd64.tar.gz

之后解压: 使用命令:

1
tar -zxvf 对应文件名.tar.gz 

之后进入对应目录

0x03 配置编辑&服务运行


文件目录结构: | 主要就编辑两个配置文件

0x03.01 服务端(一般为内网跳板机或者公网服务器)


运行命令: | 旧版配置文件名叫 frps.ini

1
2
3
4
# 给运行权限
chmod +x frps
#运行
./frps -c ./frps.toml

配置实例:

1
2
3
4
5
6
# frps.toml  
bindPort = 7000 # 服务端与客户端通信端口  
  
transport.tls.force = true # 服务端将只接受 TLS链接  
  
auth.token = "public" # 身份验证令牌,frpc要与frps一致  

0x03.02 客户端 (一般配置在需要穿透的主机上)


运行命令: | 旧版配置文件名叫 frpc.ini

1
2
3
4
# 给运行权限
chmod +x frpc
#运行
./frpc -c ./frpc.toml

配置实例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
# frpc.toml  
transport.tls.enable = true # 从 v0.50.0版本开始,transport.tls.enable的默认值为 true  
serverAddr = "x.x.x.x"  #自己的公网地址
serverPort = 7000 # 公网服务端通信端口  
  
auth.token = "public" # 令牌,与公网服务端保持一致  
  
[[proxies]]  
name = "ssh"  
type = "tcp"  
localIP = "127.0.0.1" # 需要暴露的服务的IP  
localPort = 22 # 将本地22端口的服务暴露在公网的6666端口  
remotePort = 6666 # 暴露服务的公网入口  
  
[[proxies]]  
name = "web"  
type = "tcp"  
localIP = "127.0.0.1"  
localPort = 80  
remotePort = 8888  

0x04 拓展_二层代理实操


0x04.01 环境准备


[!tip] 内网两台主机需要互通

实验环境:

  1. 攻击机
  2. 公网服务器
  3. 内网靶机一(出网,已攻陷)192.168.31.200
  4. 内网靶机二(不出网)192.168.31.6

实验流程:内网靶机二 22端口映射到内网靶机一 2222端口,最后出网到公网服务器 3559 端口,攻击机连接

0x04.02 实验过程


0x04.02.A 配置

靶机一配置: | 配置客户端连接公网服务器

| 配置服务端,留给靶机二连接

靶机一配置: | 客户端配置

公网服务端配置:将端口在防火墙放开,配置文件添加对应端口

0x04.02.B 连接


| 启动靶机一的客户端,服务端

| 启动靶机二的客户端 查看靶机一日志

| 使用公网地址连接

连接成功,执行命令

0x05 拓展_二层代理实操_2

0x04.01 环境准备


[!tip] 内网两台主机需要互通

0x04.01.A 实验环境


  1. 攻击机 (kali)
  2. 公网服务器
  3. 内网靶机一(出网,已攻陷)192.168.0.2|10.0.0.3
  4. 内网靶机二(不出网)10.0.0.2

实验流程:靶机一是双网卡主机联通两个网段,靶机二不出网,并设置有数据库

0x04.01.B 配置


[!tip] 此次实验环境使用 docker 配置

Docker: 目录结构: project/ ├── docker-compose.yml ├── Dockerfile.First_layer ├── Dockerfile.Second_layer ├── init.sql

运行命令:

1
2
3
4
# 启动!!
docker compose up -d
# 查看状态
docker ps

配置内容:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# docker-compose.yml 
version: '3.8'

services:
  first_layer:
    build: 
      context: .
      dockerfile: Dockerfile.first_layer
    container_name: first_layer
    tty: true
    stdin_open: true
    networks:
      external_net:
        ipv4_address: 192.168.0.2
      internal_net:
        aliases:
          - first_layer
    ports:
      - "2222:22"

  second_layer:
    build: 
      context: .
      dockerfile: Dockerfile.second_layer
    container_name: second_layer
    tty: true
    stdin_open: true
    networks:
      internal_net:
        ipv4_address: 10.0.0.2
    environment:
      MYSQL_ROOT_PASSWORD: root@123

volumes:
  mysql_data:

networks:
  external_net:
    driver: bridge
    ipam:
      driver: default
      config:
        - subnet: 192.168.0.0/24

  internal_net:
    driver: bridge
    ipam:
      driver: default
      config:
        - subnet: 10.0.0.0/24
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
# Dockerfile.first_layer
FROM ubuntu:latest
RUN apt-get update && apt-get install -y wget openssh-server
RUN wget https://github.com/fatedier/frp/releases/download/v0.38.0/frp_0.38.0_linux_amd64.tar.gz && \
    tar -zxvf frp_0.38.0_linux_amd64.tar.gz && \
    mv frp_0.38.0_linux_amd64/frp /usr/local/bin/ && \
    rm -rf frp_0.38.0_linux_amd64.tar.gz frp_0.38.0_linux_amd64
# SSH配置
RUN mkdir /var/run/sshd
RUN echo 'root:root' | chpasswd
RUN sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config
# SSH登录修复
RUN sed -i 's@session\s*required\s*pam_loginuid.so@session optional pam_loginuid.so@g' /etc/pam.d/sshd
EXPOSE 22
CMD ["/usr/sbin/sshd", "-D"]
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
# Dockerfile.second_layer
FROM ubuntu:latest
RUN apt-get update && apt-get install -y mysql-server wget
RUN wget https://github.com/fatedier/frp/releases/download/v0.38.0/frp_0.38.0_linux_amd64.tar.gz && \
    tar -zxvf frp_0.38.0_linux_amd64.tar.gz && \
    mv frp_0.38.0_linux_amd64/frp /usr/local/bin/ && \
    rm -rf frp_0.38.0_linux_amd64.tar.gz frp_0.38.0_linux_amd64
# MySQL配置
ENV MYSQL_ROOT_PASSWORD=root@123
COPY init.sql /docker-entrypoint-initdb.d/
EXPOSE 3306
CMD ["mysqld"]
1
2
3
4
# init.sql
CREATE DATABASE IF NOT EXISTS exampledb;
GRANT ALL PRIVILEGES ON exampledb.* TO 'exampleuser'@'%' IDENTIFIED BY 'examplepassword';
FLUSH PRIVILEGES;

frp: ssh 连接:

查看网卡信息: 可互通:

分别配置 frp: | 靶机 2 客户端

| 靶机 1 客户端/服务端

0x04.02 实验过程


0x04.02.A 连接数据库

INP-xx-001-MII0