安排幾款實用的內網穿透工具(附教程)

前言

本文以滲透的視角,總結幾種個人常用的內網穿透,內網代理工具,介紹其簡單原理和使用方法。

1、nps-npc

1.1 簡介

nps 是一款輕量級、高性能、功能強大的內網穿透代理服務器。目前支持 tcp、udp 流量轉發,可支持任何 tcp、udp 上層協議(訪問內網網站、本地支付接口調試、ssh 訪問、遠程桌面,內網 dns 解析等等……),此外還支持內網 http 代理、內網 socks5 代理、p2p 等,並帶有功能強大的 web 管理端。

1.2 特點

  1. Go 語言編寫

  2. 支持跨平臺

  3. 支持多種協議的代理

  4. web 管理端

1.3 使用方法

https://github.com/ehang-io/nps/releases

NPS

安裝配置

找到自己服務器相應版本的 server:

cd ~
wget https://github.com/cnlh/nps/releases/download/v0.23.2/linux_amd64_server.tar.gz
tar xzvf linux_amd64_server.tar.gz
cd ~/nps

在 nps 目錄下面會有一個 nps 可執行文件、conf 配置目錄和 web 網頁目錄,我們只需要修改conf/nps.conf即可:

vim conf/nps.conf

需要改一下#web下面的幾個參數,

web_host= 服務器IP或者域名  
web_username= admin(登錄用戶名)  
web_password= 你的密碼  
web_port=8080(web管理端口)

修改#bridge 可以更改 NPC 的連接端口。比如我們拿到一臺權限受限的服務器,有防火牆,可能只有部分端口(80,443)可以出網,就需要修改成出網端口。

##bridge  
bridge_type=tcp  
bridge_port=443  # 修改連接端口  
bridge_ip=0.0.0.0

啓動

#Mac/Linux  
./nps test|start|stop|restart|status  測試配置文件|啓動|停止|重啓|狀態  
  
#Windows  
nps.exe test|start|stop|restart|status 測試配置文件|啓動|停止|重啓|狀態

NPC

./npc -server=你的IP:8024 -vkey=唯一驗證密碼 -type=tcp

新建好客戶端後,也可以在+中看到,詳細的客戶端連接命令:

web 管理端

在客戶端界面可以通過新增的方式添加客戶端連接,每一個連接的 vkey 都是唯一區分的。

每一個客戶端,在建立連接後,都可以建立多個不同協議的隧道,這一個個隧道就是不同的代理了。

通過不同的協議和端口就可以連接代理的內網機器。

2、frp

2.1 簡介

frp 是一個專注於內網穿透的高性能的反向代理應用,支持 TCP、UDP、HTTP、HTTPS 等多種協議。可以將內網服務以安全、便捷的方式通過具有公網 IP 節點的中轉暴露到公網。

2.2 特點

2.3 使用方法

下載:https://github.com/fatedier/frp/releases

以下內容摘自:https://segmentfault.com/a/1190000021876836

1. 通過 rdp 訪問家裏的機器

  1. 修改 frps.ini 文件,爲了安全起見,這裏最好配置一下身份驗證,服務端和客戶端的 common 配置中的 token 參數一致則身份驗證通過:
# frps.ini
[common]
bind_port = 7000
# 用於身份驗證,請自行修改,要保證服務端與客戶端一致
token = abcdefgh
  1. 啓動 frps:
./frps -c ./frps.ini
  1. 修改 frpc.ini 文件,假設 frps 所在服務器的公網 IP 爲 x.x.x.x:
# frpc.ini
[common]
server_addr = x.x.x.x
server_port = 7000
# 用於身份驗證,請自行修改,要保證服務端與客戶端一致
token = abcdefgh

[rdp]
type = tcp
local_ip = 127.0.0.1
local_port = 3389
remote_port = 6000
  1. 啓動 frpc:
./frpc -c ./frpc.ini
  1. 通過 rdp 訪問遠程的機器,地址爲:
x.x.x.x:6000

開機自啓

針對 Windows 系統,爲了便於使用,可以配置一下開機的時候靜默啓動。

  1. 在 frpc.exe 的同級目錄創建一個 start_frpc.vbs:
'start_frpc.vbs
'請根據實際情況修改路徑
CreateObject("WScript.Shell").Run """D:\Program Files\frp_windows_amd64\frpc.exe""" & "-c" & """D:\Program Files\frp_windows_amd64\frpc.ini""",0
  1. 複製 start_frpc.vbs 文件,打開以下目錄,注意將
<USER_NAME>

改爲你的用戶名:

C:\Users\<USER_NAME>\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup

  1. 鼠標右擊,粘貼爲快捷方式即可。

2. 通過 SSH 訪問公司內網機器

frps 的部署步驟同上。

  1. 啓動 frpc,配置如下:
# frpc.ini
[common]
server_addr = x.x.x.x
server_port = 7000
# 用於身份驗證,請自行修改,要保證服務端與客戶端一致
token = abcdefgh

[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000
  1. 通過 SSH 訪問內網機器,假設用戶名爲 test:

ssh -oPort=6000 test@x.x.x.x

3. 通過自定義域名訪問部署於內網的 Web 服務

有時想要讓其他人通過域名訪問或者測試我們在本地搭建的 Web 服務,但是由於本地機器沒有公網 IP,無法將域名解析到本地的機器,通過 frp 就可以實現這一功能,以下示例爲 http 服務,https 服務配置方法相同, vhost_http_port 替換爲 vhost_https_port, type 設置爲 https 即可。

  1. 修改 frps.ini 文件,設置 http 訪問端口爲 8080:
# frps.ini
[common]
bind_port = 7000
vhost_http_port = 8080
# 用於身份驗證,請自行修改,要保證服務端與客戶端一致
token = abcdefgh
  1. 啓動 frps:

./frps -c ./frps.ini

  1. 修改 frpc.ini 文件,假設 frps 所在的服務器的 IP 爲 x.x.x.x,local_port 爲本地機器上 Web 服務對應的端口, 綁定自定義域名 www.yourdomain.com:
# frpc.ini
[common]
server_addr = x.x.x.x
server_port = 7000
# 用於身份驗證,請自行修改,要保證服務端與客戶端一致
token = abcdefgh

[web]
type = http
local_port = 80
custom_domains = www.yourdomain.com
  1. 啓動 frpc:

./frpc -c ./frpc.ini

  1. 將 www.yourdomain.com 的域名 A 記錄解析到 IP x.x.x.x,如果服務器已經有對應的域名,也可以將 CNAME 記錄解析到服務器原先的域名。

  2. 通過瀏覽器訪問 http://www.yourdomain.com:8080 即可訪問到處於內網機器上的 Web 服務。

4. 對外提供簡單的文件訪問服務

通過 static_file 插件可以對外提供一個簡單的基於 HTTP 的文件訪問服務。

frps 的部署步驟同上。

  1. 啓動 frpc,啓用 static_file 插件,配置如下:
# frpc.ini
[common]
server_addr = x.x.x.x
server_port = 7000
# 用於身份驗證,請自行修改,要保證服務端與客戶端一致
token = abcdefgh

[test_static_file]
type = tcp
remote_port = 6000
plugin = static_file
# 要對外暴露的文件目錄
plugin_local_path = /tmp/file
# 訪問 url 中會被去除的前綴,保留的內容即爲要訪問的文件路徑
plugin_strip_prefix = static
plugin_http_user = abc
plugin_http_passwd = abc
  1. 通過瀏覽器訪問 http://x.x.x.x:6000/static/ 來查看位於 /tmp/file 目錄下的文件,會要求輸入已設置好的用戶名和密碼。

常用功能

統計面板(Dashboard)

通過瀏覽器查看 frp 的狀態以及代理統計信息展示。

注:Dashboard 尚未針對大量的 proxy 數據展示做優化,如果出現 Dashboard 訪問較慢的情況,請不要啓用此功能。

需要在 frps.ini 中指定 dashboard 服務使用的端口,即可開啓此功能:

[common]
dashboard_port = 7500
# dashboard 用戶名密碼,默認都爲 admin
dashboard_user = admin
dashboard_pwd = admin

打開瀏覽器通過 http://[server_addr]:7500 訪問 dashboard 界面,用戶名密碼默認爲 admin

加密與壓縮

這兩個功能默認是不開啓的,需要在 frpc.ini 中通過配置來爲指定的代理啓用加密與壓縮的功能,壓縮算法使用 snappy:

# frpc.ini
[ssh]
type = tcp
local_port = 22
remote_port = 6000
use_encryption = true
use_compression = true

如果公司內網防火牆對外網訪問進行了流量識別與屏蔽,例如禁止了 SSH 協議等,通過設置 use_encryption = true,將 frpc 與 frps 之間的通信內容加密傳輸,將會有效防止流量被攔截。

如果傳輸的報文長度較長,通過設置 use_compression = true 對傳輸內容進行壓縮,可以有效減小 frpc 與 frps 之間的網絡流量,加快流量轉發速度,但是會額外消耗一些 CPU 資源。

[TLS

從 v0.25.0 版本開始 frpc 和 frps 之間支持通過 TLS 協議加密傳輸。通過在 frpc.ini 的 common 中配置 tls_enable = true 來啓用此功能,安全性更高。

爲了端口複用,frp 建立 TLS 連接的第一個字節爲 0x17。

注意:啓用此功能後除 xtcp 外,不需要再設置 use_encryption。

代理限速

目前支持在客戶端的代理配置中設置代理級別的限速,限制單個 proxy 可以佔用的帶寬。

# frpc.ini
[ssh]
type = tcp
local_port = 22
remote_port = 6000
bandwidth_limit = 1MB

在代理配置中增加 bandwidth_limit 字段啓用此功能,目前僅支持 MB 和 KB 單位。

範圍端口映射

在 frpc 的配置文件中可以指定映射多個端口,目前只支持 tcp 和 udp 的類型。

這一功能通過 range: 段落標記來實現,客戶端會解析這個標記中的配置,將其拆分成多個 proxy,每一個 proxy 以數字爲後綴命名。

例如要映射本地 6000-6005, 6007 這 6 個端口,主要配置如下:

# frpc.ini
[range:test_tcp]
type = tcp
local_ip = 127.0.0.1
local_port = 6000-6006,6007
remote_port = 6000-6006,6007

實際連接成功後會創建 8 個 proxy,命名爲 test_tcp_0, test_tcp_1 ... test_tcp_7

3、ew

3.1 簡介

EW 是一套便攜式的網絡穿透工具,具有 SOCKS v5 服務架設和端口轉發兩大核心功能,可在複雜網絡環境下完成網絡穿透。但是,現在工具已經不更新了。。。

3.2 特點

  1. 輕量級,C 語言編寫

  2. 可以設置多級代理

  3. 跨平臺

  4. 但是隻支持 Socks5 代理

3.3 使用方法

以下使用方法均摘自:http://rootkiter.com/EarthWorm/

以下所有樣例,如無特殊說明代理端口均爲 1080,服務均爲 SOCKSv5 代理服務.

該工具共有 6 種命令格式(ssocksd、rcsocks、rssocks、lcx_slave、lcx_listen、lcx_tran)。

1. 正向 SOCKS v5 服務器

$ ./ew -s ssocksd -l 1080

2. 反彈 SOCKS v5 服務器

這個操作具體分兩步:

a) 先在一臺具有公網 ip 的主機 A 上運行以下命令:

$ ./ew -s rcsocks -l 1080 -e 8888

b) 在目標主機 B 上啓動 SOCKS v5 服務 並反彈到公網主機的 8888 端口

$ ./ew -s rssocks -d 1.1.1.1 -e 8888

成功。

3. 多級級聯

工具中自帶的三條端口轉發指令, 它們的參數格式分別爲:

$ ./ew -s lcx_listen -l  1080   -e 8888    
$ ./ew -s lcx_tran   -l  1080   -f 2.2.2.3 -g 9999    
$ ./ew -s lcx_slave  -d 1.1.1.1 -e 8888    -f 2.2.2.3  -g  9999

通過這些端口轉發指令可以將處於網絡深層的基於 TCP 的服務轉發至根前, 比如 SOCKS v5。首先提供兩個 “二級級聯” 本地 SOCKS 測試樣例:

a) lcx_tran 的用法

$ ./ew -s ssocksd  -l 9999  
$ ./ew -s lcx_tran -l 1080 -f 127.0.0.1 -g 9999

b) lcx_listenlcx_slave 的用法

$ ./ew -s lcx_listen -l 1080 -e 8888  
$ ./ew -s ssocksd    -l 9999  
$ ./ew -s lcx_slave  -d 127.0.0.1 -e 8888 -f 127.0.0.1 -g 9999

再提供一個 “三級級聯” 的本地 SOCKS 測試用例以供參考

$ ./ew -s rcsocks -l 1080 -e 8888   
$ ./ew -s lcx_slave -d 127.0.0.1 -e 8888 -f 127.0.0.1 -g 9999    
$ ./ew -s lcx_listen -l 9999 -e 7777    
$ ./ew -s rssocks -d 127.0.0.1 -e 7777

數據流向: SOCKS v5 -> 1080 -> 8888 -> 9999 -> 7777 -> rssocks

4、ngrok

4.1 簡介

ngrok 是一個反向代理,通過在公共端點和本地運行的 Web 服務器之間建立一個安全的通道,實現內網主機的服務可以暴露給外網。ngrok 可捕獲和分析所有通道上的流量,便於後期分析和重放,所以 ngrok 可以很方便地協助服務端程序測試。

4.2 特點

  1. 官方維護,一般較爲穩定

  2. 跨平臺,閉源

  3. 有流量記錄和重發功能

4.3 使用方法

  1. 進入 ngrok 官網(https://ngrok.com/),註冊 ngrok 賬號並下載 ngrok;

  2. 根據官網給定的授權碼,運行如下授權命令;

  3. ./ngrok authtoken 1hAotxhmORtzCYvUc3BsxDBPh1H_******************

  4. ./ngrok http 80即可將機器的 80 端口 http 服務暴露到公網,並且會提供一個公網域名。

可以通過官網的 UI 界面查看數據包和流量等等(但是要付費 ==、)

還可以通過一些命令將內網的文件和其他 TCP 服務 暴露到公網中。

有授權的設置文件共享

ngrok http -auth="user:password" file:///Users/alan/share

無授權的設置文件共享

ngrok http "file:///C:\\Users\\alan\\Public Folder"

將主機的 3389 的 TCP 端口暴露到公網

ngrok tcp 3389

更多使用方法參考:https://ngrok.com/docs

參考鏈接

  1. 內網滲透之內網穿透

  2. 開源內網穿透工具 frp 簡單使用教程

  3. http://rootkiter.com/EarthWorm/

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/fbIAE7n64X_KnxE31POkEg