背景
内网渗透需要
官网
https://github.com/fatedier/frp
当前最新版
https://github.com/fatedier/frp/releases/tag/v0.59.0
部署
写两个简单的加入systemctl的脚本
create_frps_service.sh
#!/bin/bash
install_path=$(cd $(dirname $0); pwd)
frps_exec=$install_path/frps
frps_config=$install_path/frps.toml
cat > /etc/systemd/system/frps.service <<EOF
[Unit]
Description=frps daemon
After=network.target[Service]
User=root
Group=root
Type=simple
ExecStart=$frps_exec -c $frps_config
Restart=on-failure
RestartSec=5s[Install]
WantedBy=multi-user.target
EOFsystemctl daemon-reload
create_frpc_service.sh
#!/bin/bash
install_path=$(cd $(dirname $0); pwd)
frpc_exec=$install_path/frpc
frpc_config=$install_path/frpc.toml
cat > /etc/systemd/system/frpc.service <<EOF
[Unit]
Description=frps daemon
After=network.target[Service]
User=root
Group=root
Type=simple
ExecStart=$frpc_exec -c $frpc_config
Restart=on-failure
RestartSec=5s[Install]
WantedBy=multi-user.target
EOFsystemctl daemon-reload
配置
frps.toml
bindPort = 6000
auth.method = "token"
auth.token = "ixxxssfsfr254235hthtvdcv242dhrfjfgj35we832743532twfdysHG4Bq8ff39u35fvxxx"
webServer.addr = "0.0.0.0"
webServer.port = 7000
webServer.user = "admin"
webServer.password = "admin"
frpc.toml
serverAddr = "frps服务器ip"
serverPort = 6000
auth.method = "token"
auth.token = "ixxxssfsfr254235hthtvdcv242dhrfjfgj35we832743532twfdysHG4Bq8ff39u35fvxxx"[[proxies]]
name = "test-web"
type = "tcp"
localIP = "192.168.35.226"
localPort = 6180
remotePort = 6001[[proxies]]
name = "plugin_socks5"
type = "tcp"
remotePort = 6002
[proxies.plugin]
type = "socks5"
username = "admin"
password = "admin"[[proxies]]
name = "secret_ssh"
type = "stcp"
# 只有与此处设置的 secretKey 一致的用户才能访问此服务
secretKey = "abcdefg"
localIP = "192.168.35.108"
localPort = 22
操作命令
启停:
systemctl start frps
systemctl stop frps
systemctl start frpc
systemctl stop frpc
看日志调试:
journalctl -u frps -f
journalctl -u frpc -f
功能
一.将内网的某一台服务器上的某个端口穿透至云服务器上的6001,协议tcp。
frps:101.37.252.158
frpc:192.168.35.86
目标服务器ip及端口:192.168.35.226:6180
穿透到云服务器ip及端口:101.37.252.158:6001
frpc端配置:
内网访问效果:
配置生效后:
成功将内网的某个web服务穿透至公网。
二.socks代理,协议tcp,插件socks5
frps:101.37.252.158
frpc:192.168.35.86
穿透到云服务器ip及socks5端口:101.37.252.158:6002
socks5账号:admin
socks5密码:admin
frps服务器
vim /etc/proxychains.conf
底部添加:
socks5 127.0.0.1 6002 admin admin
验证,通过proxychains4访问内网web服务器页面
成功通过socks5穿透访问内网资源。
三.配置服务端Dashboard
frps端
webServer.addr = "0.0.0.0"
webServer.port = 7000
webServer.user = "admin"
webServer.password = "admin"
四.安全的内网穿透
https://gofrp.org/zh-cn/docs/examples/stcp/
这是在功能一上做了改良,加了secretKey来认证,并新增了visitors这个概念。
frps:101.37.252.158
frpc:192.168.35.86
目标服务器ip及端口:192.168.35.226:22
发起访问的主机:192.168.11.55
比如说:
我在家里,我只要在家里的电脑安装一个frpc客户端,我可以通过云端的frps,将公司内网的某台服务器的某个端口,穿透到我家电脑的某个端口上。我访问家里本机上的端口等于访问公司服务器的某个目标端口。
这里需要改动的配置是公司的frpc:192.168.35.86,我家的frpc:192.168.11.55,而我家的这个frpc就是所谓的visitors。两边的frpc都需要加入secretKey,提供安全性。type为"stcp"。
公司frpc:192.168.35.86配置:
我家电脑frpc:192.168.11.55配置:
[[visitors]]
name = "secret_ssh_visitor"
type = "stcp"
# 要访问的 stcp 代理的名字
serverName = "secret_ssh"
secretKey = "abcdefg"
# 绑定本地端口以访问 SSH 服务
bindAddr = "127.0.0.1"
bindPort = 5555
验证成功:
五、更加安全的点到点的穿透
https://gofrp.org/zh-cn/docs/examples/xtcp/
在第四个功能上又做了改良,按官方的说法,代理类型xtcp,类似于功能四的stcp,用于在需要传输大量数据且不希望流量经过服务器frps进行中转的情况下实现内网穿透。
这个实验回头再补充。。。无非就是type改变一下就差不多了。