內(nèi)網(wǎng)穿透工具總結(jié)

前言

之前寫了一篇搭建http隧道的文章,用來總結(jié)在不出網(wǎng)的情況下如何內(nèi)網(wǎng)滲透。所以這里就再總結(jié)一下在出網(wǎng)的情況下用來內(nèi)網(wǎng)穿透的好用工具。

frp

frp 簡(jiǎn)介

frp 使用go語言開發(fā),是一款高性能的反向代理應(yīng)用,可以輕松地進(jìn)行內(nèi)網(wǎng)穿透,對(duì)外網(wǎng)提供服務(wù)。frp支持 TCP、UDP、KCP、HTTP、HTTPS等協(xié)議類型。

frp 下載

https://github.com/fatedier/frp/releases?after=v0.31.0 下載amd文件,測(cè)試使用0.28.2版本

frp 配置文件

下載好后,先看一下frp的相關(guān)文件
服務(wù)段frps.ini

[common]
# 通用設(shè)置
bind_addr = 0.0.0.0
bind_port = 7000
# frp 監(jiān)聽地址
bind_udp_port = 7001
# 配置udp端口
kcp_bind_port = 7000
# 用于kcp協(xié)議的udp端口,如果未設(shè)置,則在frps中禁用kcp
proxy_bind_addr = 127.0.0.1
# 代理服務(wù)器綁定地址
vhost_http_port = 80
vhost_https_port = 443
# 配置http與https端口
dashboard_addr = 0.0.0.0
dashboard_port = 7500
dashboard_user = admin
dashboard_pwd = admin
# 配置dashboard以查看儀表盤與登陸信息
enable_prometheus = true
# 普羅米修斯運(yùn)維服務(wù)
log_file = ./frps.log
# 日志路徑
log_level = info
log_max_days = 3
# 日志信息和日志記錄最大時(shí)間
disable_log_color = false
# 禁用日志顏色,默認(rèn)值為false
detailed_errors_to_client = true
# 是否將錯(cuò)誤信息發(fā)送到frpc。默認(rèn)情況下true。
authentication_method = token
# 授權(quán)驗(yàn)證方式
authenticate_heartbeats = false
# 是否在發(fā)送到frp的心跳中包含身份驗(yàn)證令牌,默認(rèn)false
authenticate_new_work_conns = false
# 是否在發(fā)送到frp的新工作連接中包含身份驗(yàn)證令牌。默認(rèn)false
token = 12345678
# 秘鑰
oidc_client_id =
# 用于在OIDC身份驗(yàn)證中獲取令牌的客戶端ID
oidc_client_secret = 
# 用于在OIDC身份驗(yàn)證中獲取令牌的客戶端密碼
oidc_audience = 
# 指定OIDC身份驗(yàn)證中令牌的訪問群體
oidc_token_endpoint_url = 
# 如果AuthenticationMethod =="oidc",它將用于獲取OIDC令牌
allow_ports = 2000-3000,3001,3003,4000-50000
# 允許的端口
max_pool_count = 5
# 僅允許frpc綁定您列出的端口
max_ports_per_client = 0
# pool_count的最大值
tls_only = false
# tlsonly指定是否僅接受TLS加密連接,默認(rèn)false
subdomain_host = frps.com
# 當(dāng)測(cè)試子域時(shí),路由使用的主機(jī)
tcp_mux = true
# 使用tcp流多路復(fù)用,默認(rèn)為true
[plugin.user-manager]
addr = 127.0.0.1:9000
path = /handler
ops = Login
# 插件管理
[plugin.port-manager]
addr = 127.0.0.1:9001
path = /handler
ops = NewProxy
# 插件管理

客戶端frpc.ini

[common]
# 通用設(shè)置
server_addr = 0.0.0.0
server_port = 7000
# 服務(wù)端配置
http_proxy = http://user:passwd@192.168.1.128:8080
# 通過http代理或socks5代理連接frps
log_file = ./frps.log
# 日志路徑
log_level = info
log_max_days = 3
# 日志信息和日志記錄最大時(shí)間
disable_log_color = false
# 禁用日志顏色,默認(rèn)值為false
token = 12345678
# 用于身份驗(yàn)證
admin_addr = 127.0.0.1
admin_port = 7400
admin_user = admin
admin_pwd = admin
# 通過api設(shè)置frpc控制臺(tái)
pool_count = 5
# 連接將提前建立,默認(rèn)值為零
tcp_mux = true
# 使用tcp流多路復(fù)用,默認(rèn)為"true"
user = your_name
# 更改代理名稱
login_fail_exit = true
# 第一次登錄失敗時(shí)是否退出程序,默認(rèn)true
protocol = TCP
# 用于連接服務(wù)器的通信協(xié)議,支持tcp,kcp,websocket。默認(rèn)tcp協(xié)議。
tls_enable = true
# 如果tls_enable為true,則frpc將通過tls連接frps
dns_server = 8.8.8.8
# 指定一個(gè)dns服務(wù)器,因此frpc將使用此服務(wù)器代替默認(rèn)服務(wù)器
meta_var1 = 123
meta_var2 = 234
# 客戶端的其他元信息


[ssh]
# 支持 tcp | udp | http | https | stcp | xtcp,默認(rèn)為tcp
type = tcp
local_ip = 127.0.0.1
local_port = 22
# 限制此代理的帶寬
use_encryption = false
# 對(duì)frps和frpc之間的消息進(jìn)行加密,默認(rèn)為false
use_compression = false
# 是否壓縮,默認(rèn)fasle
remote_port = 6001
# 設(shè)置遠(yuǎn)程監(jiān)聽端口

group = test_group
# 設(shè)置組
group_key = 123456
# 設(shè)置組密碼
health_check_type = TCP
# frpc連接本地服務(wù)的端口以檢測(cè)其健康狀態(tài)
health_check_timeout_s = 3
# 設(shè)置檢查連接超時(shí)時(shí)間
health_check_max_failed = 3
# 設(shè)置連續(xù)3次失敗,則代理將從frps中刪除
health_check_interval_s = 10
# 設(shè)置每10秒進(jìn)行一次健康檢查
meta_var1 = 123
meta_var2 = 234
# 每個(gè)代理的其他元信息

以下就是一些實(shí)例:
[ssh_random]
[range:tcp_port]
[DNS]
[range:udp_port]
[web01]
[web02]

frp使用

搭建socks5隧道

frps.ini

[common]
bind_addr = 0.0.0.0
# 綁定的ip,為本機(jī)
bind_port = 7000
# 綁定的端口
dashboard_addr = 0.0.0.0
# 管理地址
dashboard_port = 4000
# 管理端口
dashboard_user = root
# 管理的用戶名
dashboard_pwd  = 1qaz2wsx
# 管理用戶的密碼
token = 1qaz2wsx
# 客戶端服務(wù)端連接的密碼
heartbeat_timeout = 90
# 心跳超時(shí)時(shí)間
max_pool_count = 5
# 最大同時(shí)連接數(shù)

服務(wù)端運(yùn)行命令

./frps -c  frps.ini
image.png

frpc.ini

[common]
server_addr = 106.53.97.7
server_port = 7000
# 服務(wù)器綁定的端口
token = 1qaz2wsx
# 連接的密碼
tls_enable = true
# 啟用tls
pool_count = 5        
protocol = tcp
# 協(xié)議類型
health_check_type = tcp
health_check_interval_s = 100
# 設(shè)置健康檢查時(shí)間

[test] 
remote_port = 2333
# 代理的端口
plugin = socks5
# 使用的協(xié)議
use_encryption = true
# 是否加密
use_compression = true
# 是否壓縮

先對(duì)流量加密,再用TLS加密,保障傳輸安全。
客戶端運(yùn)行

./frpc -c  frpc.ini
image.png

對(duì)應(yīng)上面test設(shè)置的socks5代理。

image.png

使用SocksCap64設(shè)置firefox瀏覽內(nèi)網(wǎng)網(wǎng)頁。

image.png

這里的socks5代理沒有設(shè)置用戶名、密碼。
如果設(shè)置,需要增加兩個(gè)配置項(xiàng)。

plugin_user = cseroad
plugin_passwd = cseroad123

再推薦幾個(gè)配置項(xiàng)

tls_enable = true      # 從0.25.0版本開始 frp 支持通過 TLS 協(xié)議加密傳輸
use_encryption = true  # 通信內(nèi)容加密傳輸
use_compression = true # 是否壓縮

wireshark抓取未配置這幾項(xiàng)之前的通信流量。

image.png

可以顯而易見看到來源地址,目的地址,通信的端口,以及正在訪問的網(wǎng)頁。

添加上面幾項(xiàng)后,再次抓取數(shù)據(jù)包,可以看到通信內(nèi)容已經(jīng)加密。

image.png

防護(hù)手法:可以在流量設(shè)備上禁止gryphon協(xié)議,因?yàn)閒rp每次連接都會(huì)有g(shù)ryphon協(xié)議的包去認(rèn)證frp服務(wù)器。

搭建tcp隧道

frps.ini

[common]
bind_addr = 0.0.0.0
# 綁定的ip,為本機(jī)
bind_port = 7000
# 綁定的端口
dashboard_addr = 0.0.0.0
# 管理地址
dashboard_port = 4000
# 管理端口
dashboard_user = root
# 管理的用戶名
dashboard_pwd  = 1qaz2wsx
# 管理用戶的密碼
token = 1qaz2wsx
# 客戶端服務(wù)端連接的密碼
heartbeat_timeout = 90
# 心跳超時(shí)時(shí)間
max_pool_count = 5
# 最大同時(shí)連接數(shù)

frpc.ini

[common]
server_addr = 109.xxx.xxx.9
server_port = 7000
token = 1qaz2wsx
tls_enable = true

[test]
type = tcp
local_ip = 127.0.0.1
local_port = 3389
remote_port = 33389
use_encryption = true
use_compression = true

訪問公網(wǎng)的33389即可訪問客戶端的3389端口,完美實(shí)現(xiàn)端口轉(zhuǎn)發(fā)。

image.png

補(bǔ)充:
linux后臺(tái)運(yùn)行

nohup ./frps -c frps.ini >/dev/null 2>&1 &

停止方式

ps -aux|grep frp| grep -v grep  # 找到進(jìn)程
kill -9 進(jìn)程號(hào)   # 殺死進(jìn)程

frp 的缺點(diǎn)是需要落地配置文件。
當(dāng)然,uknowsec 大佬改造出了配置文件不落地的方案。https://github.com/uknowsec/frpModify

nps

nps簡(jiǎn)介

nps也是go語言編寫,是一款強(qiáng)大的內(nèi)網(wǎng)穿透工具。同樣支持tcp、udp流量轉(zhuǎn)發(fā)、內(nèi)網(wǎng)http代理、內(nèi)網(wǎng)socks5代理、p2p等,并帶有強(qiáng)大的web管理端。比frp更強(qiáng)大。

nps下載

https://github.com/ehang-io/nps/releases/tag/v0.25.1 下載amd文件

nps配置

下載后查看一下文件目錄。
server端

image.png

在nps目錄下有一個(gè)nps可執(zhí)行文件、conf配置目錄和web網(wǎng)頁目錄,我們使用的時(shí)候只需要修改conf/nps.conf即可。
以下表格來源 官方文檔

名稱 含義
web_port web管理端口
web_password web界面管理密碼
web_username web界面管理賬號(hào)
web_base_url web管理主路徑,用于將web管理置于代理子路徑后面
bridge_port 服務(wù)端客戶端通信端口
https_proxy_port 域名代理https代理監(jiān)聽端口
http_proxy_port 域名代理http代理監(jiān)聽端口
auth_key web api密鑰
bridge_type 客戶端與服務(wù)端連接方式kcp或tcp
public_vkey 客戶端以配置文件模式啟動(dòng)時(shí)的密鑰,設(shè)置為空表示關(guān)閉客戶端配置文件連接模式
ip_limit 是否限制ip訪問,true或false或忽略
flow_store_interval 服務(wù)端流量數(shù)據(jù)持久化間隔,單位分鐘,忽略表示不持久化
log_level 日志輸出級(jí)別
auth_crypt_key 獲取服務(wù)端authKey時(shí)的aes加密密鑰,16位
p2p_ip 服務(wù)端Ip,使用p2p模式必填
p2p_port p2p模式開啟的udp端口
pprof_ip debug pprof 服務(wù)端ip
pprof_port debug pprof 端口
disconnect_timeout 客戶端連接超時(shí),單位 5s,默認(rèn)值 60

client端

image.png

首先客戶端有多個(gè)使用方式。

  1. 可以直接無配置文件使用
./npc -server=ip:port -vkey=web界面中顯示的密鑰
  1. 也可以注冊(cè)到系統(tǒng)服務(wù)進(jìn)行使用
    如linux下
sudo ./npc install 其他參數(shù)(例如-server=xx -vkey=xx或者-config=xxx) 注冊(cè)
sudo npc start  啟動(dòng)
sudo npc stop   停止
sudo npc uninstall  卸載
  1. 也可以配置文件進(jìn)行是使用,這就類似frp了。
./npc -config=npc配置文件路徑

查看npc.conf配置文件

名稱 含義
server_addr 服務(wù)端ip/域名:port
conn_type 與服務(wù)端通信模式(tcp或kcp)
vkey 服務(wù)端配置文件中的密鑰(非web)
username socks5或http(s)密碼保護(hù)用戶名(可忽略)
password socks5或http(s)密碼保護(hù)密碼(可忽略)
compress 是否壓縮傳輸(true或false或忽略)
crypt 是否加密傳輸(true或false或忽略)
rate_limit 速度限制,可忽略
flow_limit 流量限制,可忽略

再往下示具體模式進(jìn)行配置。
具體參考官方文檔

nps使用

server端啟用nps
編輯nps.conf配置文件

appname = nps
#Boot mode(dev|pro)
runmode = dev

##bridge
#底層通信協(xié)議,默認(rèn)tcp,可選用kcp協(xié)議
bridge_type=tcp
#底層通信端口,默認(rèn)8024,如已被占用請(qǐng)指定其他端口
bridge_port=8024
bridge_ip=0.0.0.0

#當(dāng)客戶端以配置文件模式啟動(dòng)時(shí)會(huì)用到的驗(yàn)證密鑰,可自行設(shè)置
public_vkey=cseroad

#web 控制臺(tái)
web_host=10.xx.xx.7
web_username=cseroad
web_password=cseroad.com
web_port=18080
web_ip=0.0.0.0

啟動(dòng)nps

./nps start
image.png

訪問18080端口,輸入控制臺(tái)用戶密碼,即可登錄

image.png

搭建socks5隧道

新增一條客戶端。

image.png

設(shè)置"不以配置文件運(yùn)行",且壓縮加密。

image.png

客戶端運(yùn)行web控制臺(tái)給出的命令。

image.png

可以在無配置文件的情況下,上線成功。運(yùn)行成功后status狀態(tài)變?yōu)?online"

這時(shí)候就可以增加socks5代理。

image.png

這時(shí)候就可以使用SocksCap64 設(shè)置端口,以及basic權(quán)限認(rèn)證的用戶名密碼。訪問內(nèi)網(wǎng)。

image.png

當(dāng)然也可以選擇加載npc.conf配置文件來運(yùn)行npc,注意也要設(shè)置相對(duì)應(yīng)的basic權(quán)限認(rèn)證。

搭建tcp隧道

同樣創(chuàng)建tcp隧道。

image.png

用mac的microsoft remote desktop 遠(yuǎn)程連接公網(wǎng)的33389即可。完美實(shí)現(xiàn)端口轉(zhuǎn)發(fā)。

image.png

metasploit

metasploit作為紅隊(duì)神器,本身也有內(nèi)網(wǎng)穿透的功能。
在獲取session之后,可進(jìn)行端口轉(zhuǎn)發(fā)以及創(chuàng)建socks5隧道。

轉(zhuǎn)發(fā)端口

portfwd用來轉(zhuǎn)發(fā)單個(gè)端口

portfwd add -l 33389 –p 3389 -r 10.211.55.19
# 添加轉(zhuǎn)發(fā)
portfwd delete -l 33389 –p 3389 -r 10.211.55.19
# 刪除轉(zhuǎn)發(fā)
portfwd list
# 列出當(dāng)前轉(zhuǎn)發(fā)的列表
portfwd flush
# 移除所有轉(zhuǎn)發(fā)端口

創(chuàng)建socks5隧道

在有session基礎(chǔ)上,先添加路由

run get_local_subnets
# 獲取路由
run autoroute -s 10.211.55.0/24
# 添加路由
run autoroute -p
# 顯示路由
image.png

再創(chuàng)建socks5隧道

use auxiliary/server/socks5
set srvhost 127.0.0.1
set srvport 1080
run

沒有設(shè)置用戶名和密碼。

image.png

metasploit同時(shí)具有socks4和socks5兩個(gè)模塊。socks4只支持TCP協(xié)議,socks5支持TCP和UDP。
再使用proxychains命令進(jìn)行代理訪問

image.png

cobalt strike

cobalt strike也一樣具有內(nèi)網(wǎng)穿透的能力。同樣首先需要一個(gè)beacon

image.png

端口轉(zhuǎn)發(fā)

beacon自帶了一個(gè)端口轉(zhuǎn)發(fā)的命令rportfwd

rportfwd 本機(jī)端口 目標(biāo)ip 目標(biāo)端口  

創(chuàng)建socks4隧道

選擇SOCKS Server

image.png
image.png

可用來創(chuàng)建socks4隧道。
對(duì)應(yīng)的代理也需要設(shè)置為socks4協(xié)議

image.png

可成功訪問。

image.png

在創(chuàng)建成功后,可以使用"Proxy Pivots"代理metasploit走內(nèi)網(wǎng)。

image.png

復(fù)制該命令到metasploit配置里。該設(shè)置為全局設(shè)置,一次設(shè)置,metasploit各個(gè)模塊全部可用。
比如使用smb_login模塊

setg Proxies socks4:172.16.252.11:1080    設(shè)置本地的msf走cs的socks4代理
setg ReverseAllowProxy true               建立雙向通道
use auxiliary/scanner/smb/smb_version     探測(cè)smb版本
image.png

其余內(nèi)網(wǎng)穿透工具,如ew、ngork因?yàn)閷?shí)際應(yīng)用、免殺性就不多記錄了。

總結(jié)

  1. 實(shí)戰(zhàn)時(shí)注意將通信流量進(jìn)行加密、壓縮
  2. 注意將socks5代理設(shè)置為認(rèn)證狀態(tài)
  3. 在使用tcp協(xié)議上進(jìn)行加密、壓縮還不行的情況下,不妨試一下kcp協(xié)議

參考資料

https://blog.arey.fun/archives/8/
https://whoamianony.top/2020/07/07/shen-tou-ce-shi/nei-wang-chuan-tou-gong-ju-frp-de-shi-yong/#toc-heading-5

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容