基于FRP反向代理工具實現內網穿透
前言
當我們拿下目標單位的一臺外網服務器后,需要借助外網服務器作為跳板機去開展內網滲透,這個時候必不可少的就是在跳板機上設置代理。在前面的文章中,曾經在實際案例中介紹了兩種代理方式:
Webshell 管理工具——冰蝎直接設置 HTTP 隧道代理實現內網穿透:2021強網杯全國網絡安全挑戰賽Writeup;
Cobaltstrike 建立 Socks4 代理實現內網穿透:Cobaltstrike內網滲透神器入門使用教程。
以上兩種代理方式雖均能實現內網穿透的目的,但是代理質量相對來說并不穩定,難以滿足內網滲透的需求。本文將介紹一個專注于內網穿透的高性能的反向代理應用——FRP,其支持 TCP、UDP、HTTP、HTTPS 等多種協議,可以將內網服務以安全、便捷的方式通過具有公網 IP 節點的中轉暴露到公網。
FRP反向代理
FRP 的 中文官方文檔 可了解其作用和用法。
簡而言之,FRP 通過在具有公網 IP 的節點上部署 frp 服務端,可以輕松地將內網服務穿透到公網,同時提供諸多專業的功能特性,這包括:
1. 客戶端服務端通信支持 TCP、KCP 以及 Websocket 等多種協議。
2. 采用 TCP 連接流式復用,在單個連接間承載更多請求,節省連接建立時間。
3. 代理組間的負載均衡。
4. 端口復用,多個服務通過同一個服務端端口暴露。
5. 多個原生支持的客戶端插件(靜態文件查看,HTTP、SOCK5 代理等),便于獨立使用 frp 客戶端完成某些工作。
6. 高度擴展性的服務端插件系統,方便結合自身需求進行功能擴展。
7. 服務端和客戶端 UI 頁面。
內網環境搭建
本文將借助以下靶場環境進行 FRP 工具實現內網穿透的實驗演示:

沒錯,以上環境基于紅日安全 Vulnstack 內網靶場環境,詳情可參見Vulnstack紅日安全內網域滲透靶場1實戰。
https://bwshen.blog.csdn.net/article/details/118353886
1、由于虛擬機僅主機模式下默認是可與物理機連通的,故在 Win2008 域控主機上,防火墻新建了如下入站規則來拒絕 Win10 物理機的訪問(禁止訪問的 IP 為物理機的僅主機模式 VMnet1 網卡的網關 192.168.52.1):

2、此時 Win7 跳板機訪問 Win2008 的 80 端口 Web 服務是正常的:

3、但是“外網”角色的 Win10 物理機則無法正常訪問 Win2008 的 Web 服務:

4、而同樣是與物理機做了僅主機模式網絡連接的 Win2003 虛擬機,由于沒有做防火墻策略,Win10 物理機是可以直接連通的:

以上就是本次實驗的演示環境,接下來我的目標就是借助 FRP 反向代理工具,實現 Win10 物理機通過 Win7 跳板機的代理成功訪問到內網 Win2008 的 Web 服務!
服務端的配置
FRP 代理工具可以直接在 Github下載 :
https://github.com/fatedier/frp

從下圖的 frp 架構圖可以看出 frp 的工作流程——在服務端部署 frps,在要訪問的 內網機器(或者跳板機)上部署 frpc,實現服務端對該主機的反向代理,接著便可以通過訪問服務端來實現對該內網主機的遠程訪問(或者借助跳板機訪問內網):

1、下載 frp_0.37.0_linux_amd64.tar.gz 并傳輸到 VPS 服務器上后解壓縮獲得如下文件:

其中的關鍵文件如下:
├── frpc #frp客戶端執行程序├── frpc_full.ini ├── frpc.ini #frp客戶端配置文件├── frps #frp服務端執行程序├── frps_full.ini├── frps.ini #frp服務端配置文件└── LICENSE
2、frp 服務默認不設置連接密碼,frps.ini 文件默認只設置了端口:

我們可以修改服務端配置文件frps.ini來配置代理的連接密碼,如下圖所示:

3、執行命令./frps -c ./frps.ini開始運行 FRP 服務:

客戶端的配置
1、將對應版本的 FRP 工具下載到 Win7 跳板機上并解壓縮,客戶端配置文件frpc.ini初識參數如下:

2、同樣的修改 FRP 客戶端配置文件frpc.ini來設置服務端的 IP 地址、端口、連接密碼:

參數釋義:
[common]server_addr = 104.168.***.*** #VPS服務器的 IPserver_port = 7000 #VPS服務器上設置的 FRP 服務綁定端口token = ftp1234 #VPS服務端設置的 FRP 服務連接密碼 [socks5] #這個是反向代理的名稱,可以隨意設置type = tcp #socks5 是 TCP 協議的remote_port = 6666 #指定建立的反向代理的連接端口plugin = socks5 #指定建立 socks5 代理隧道use_encryption = trueuse_compression = true
3、接下來執行命令frpc.exe -c frpc.ini啟動客戶端即可:

4、此時查看 VPS 服務器監聽的 7000 端口已成功與客戶端連接,同時開啟了 6666 端口并建立了 socks5 代理通道:

FRP內網穿透
配置完 FRP 服務端和客戶端并建立起 socks5 隧道后,下面就來見證下利用該 FRP 代理隧道如何穿透內網!
1、在 Win10 物理機的谷歌瀏覽器設置如下代理:

2、然后讓 Win10 的谷歌瀏覽器流量走 VPS 建立的 FRP socks5 代理,即可訪問到內網域控主機的 Web 服務,成功實現內網穿透!

返回 VPS 也能查看到對應流量轉發的信息:

3、以上除了在瀏覽器直接連接 frp 的 socks5 代理外,在實際滲透過程中為了結合 BurpSsuite 對內網 Web 系統進行抓包測試,還可以在瀏覽器連接 BurpSuite 代理,并在 BurpSuite 中設置流量走 frp 服務器的 socks5 代理即可,如下圖所示:

4、此時谷歌瀏覽器掛著 BurpSuite 的代理便可以訪問到內網的服務了:

同時 BurpSuite 也能抓到內網服務的數據包了:

至此已成功借助 frp 搭建 socks5 代理隧道、實現內網穿透的目的!
FRP進階使用
上文搭建的 socks5 隧道用于將公網主機(本文代指 Win10 物理機)訪問內網服務器的請求流量直接通過訪問 Win7 跳板機轉發,從而實現內網穿透的目的。
FRP 反向代理還可以將內網主機的 22、3389 等端口轉發到公網主機的指定端口,從而實現遠程連接內網服務器的目的,如下圖所示:

相關用法請參見前文提及的 FRP 的 中文官方文檔:https://gofrp.org/docs/overview/,此處不再演示。
fscan內網神器
此處搞點跟本文題目無關的題外知識hh,某次攻防演習看到同事使用了 fscan 掃描內網的服務,被秀了一把,不得不感嘆真香!在此順便借助該靶場環境記錄下該工具的用法。
Fscan 工具的 Github 項目地址:https://github.com/shadow1ng/fscan,有使用說明:

可直接下載:

簡單用法:

下面來體驗下該工具,看看實際的使用效果!
1、拿到 Win7 跳板機的 Shell:

2、上傳 fscan64.exe 文件到跳板機上:

3、在 Cknife 中打開命令終端,執行命令fscan64.exe -h 192.168.52.0/24 -o result.txt,進行內網信息探測:

4、下載并打開程序運行結果 result.txt,可以看到如下搜集到的全面的內網信息:

附上所有結果:
192.168.52.138:445 open192.168.52.143:139 open192.168.52.138:88 open192.168.52.141:7001 open192.168.52.143:3306 open192.168.52.141:445 open192.168.52.143:445 open192.168.52.141:139 open192.168.52.138:139 open192.168.52.143:135 open192.168.52.141:135 open192.168.52.141:21 open192.168.52.143:80 open192.168.52.138:80 open192.168.52.141:8099 open192.168.52.141:7002 open192.168.52.138:135 open192.168.52.141:8098 openNetInfo:[*]192.168.52.143 [->]stu1 [->]192.168.52.143 [->]169.254.129.186 [->]192.168.92.130NetInfo:[*]192.168.52.138 [->]owa [->]192.168.52.138[*] 192.168.52.143 __MSBROWSE__\STU1 Windows 7 Professional 7601 Service Pack 1[+] 192.168.52.143 MS17-010 (Windows 7 Professional 7601 Service Pack 1)NetInfo:[*]192.168.52.141 [->]root-tvi862ubeh [->]192.168.52.141[*] WebTitle:http://192.168.52.141:7002 code:200 len:2632 title:Sentinel Keys License Monitor[*] 192.168.52.141 GOD\SNTL_ROOT-TVI86 [+] 192.168.52.138 MS17-010 (Windows Server 2008 R2 Datacenter 7601 Service Pack 1)[*] 192.168.52.138 [+]DC GOD\OWA Windows Server 2008 R2 Datacenter 7601 Service Pack 1[+] 192.168.52.141 MS17-010 (Windows Server 2003 3790)[*] WebTitle:http://192.168.52.138 code:200 len:4 title:IIS7[*] WebTitle:http://192.168.52.141:8099 code:403 len:1409 title:The page must be viewed over a secure channel[*] WebTitle:http://192.168.52.143 code:200 len:21 title:phpStudy 探針 2014[+] ftp://192.168.52.141:21:anonymous
可以看到,掃描結果里包括了幾大類信息:
1. 掃描的內網網段里存活的主機 IP 及其開放的端口;
2. 掃描的內網網段里主機的名稱、MS17-010 永恒之藍等漏洞掃描結果(兩臺主機存在該漏洞);
3. 掃描的內網網段里主機開放的 Web 服務的標題、端口地址!
此處驗證下掃描到的幾個內網 Web 服務是否真實存在:



看到這,你應該明白 fscan 這款內網神器有多香了吧!收集到如此多的內網資產信息,接下來的內網橫向滲透就更加簡便清晰了!
總結
本文學習、總結了內網穿透神器 FRP 反向代理工具的使用方法,同時介紹了 fscan 內網資產情況掃描神器的使用。在實際的攻防演習、內網滲透中,拿到外網跳板機的 Shell 權限后,我們可以使用 fscan 在跳板機上掃描內網進行資產搜集,然后使用 FRP 進行內網穿透后對收集到的內網資產進行橫向滲透攻擊!