通過FRP實現內網滲透

2020-10-19 15:00:40

1、FRP 的作用

  1. 利用處於內網或防火牆後的機器,對外網環境提供 httphttps 服務。
  2. 對於 httphttps 服務支援基於域名的虛擬主機,支援自定義域名系結,使多個域名可以共用一個 80 埠。
  3. 利用處於內網或防火牆後的機器,對外網環境提供 tcpudp 服務,例如在家裡通過 ssh 存取處於公司內網環境內的主機。

2、準備環境

(1)實現功能

  1. 外網通過ssh存取內網機器
  2. 自定義繫結域名存取內網web服務

(2)設定前準備

  1. 公網伺服器1臺,這裡準備了阿里雲的伺服器。
  2. 內網伺服器1臺(我這裡演示的是 linux 環境,win10 上面 vmware15 安裝的 centos7
  3. 公網伺服器繫結域名1個(若需要自定義繫結域名存取內網 web 服務,否則可以不用)
  4. 內網伺服器部署一個 web 服務,可以用 tomcat 模擬,這裡就不演示了

3、搭建 FRP

​ 公網伺服器與內網伺服器都需要下載 frp 進行安裝,這裡以 frp_0.34.1_linux_amd64.tar.gz 下載為例。

  • 下載地址:https://github.com/fatedier/frp/releases
  • 開發檔案:https://gofrp.org/docs/

3.1、伺服器端

伺服器端:這裡表示的是阿里雲的伺服器


3.1.1、伺服器端搭建

# 1.建立資料夾(看需求)
[topcloud@alihadoop opt]$ sudo mkdir software

# 2.更改資料夾所屬使用者和組(看需求)
[topcloud@alihadoop opt]$ sudo chown topcloud:topcloud software/

# 3.下載 FRP
[topcloud@alihadoop software]$ wget https://github.91chifun.workers.dev//https://github.com/fatedier
/frp/releases/download/v0.34.1/frp_0.34.1_linux_amd64.tar.gz

# 4.檢視是否下載完成
[topcloud@alihadoop software]$ ls
frp_0.34.1_linux_amd64.tar.gz

# 5.解壓 frp 檔案
[topcloud@alihadoop software]$ tar -zxvf frp_0.34.1_linux_amd64.tar.gz

# 6.行動資料夾
[topcloud@alihadoop software]$ mv frp_0.34.1_linux_amd64 /opt/module/frp

# 7.檢視 frp 檔案
# frps:伺服器端所需要的
# frpc:使用者端所需要的
[topcloud@alihadoop software]$ ll /opt/module/frp/
total 22608
-rwxrwxr-x 1 topcloud topcloud  9908224 Sep 30 15:38 frpc
-rw-rw-r-- 1 topcloud topcloud     7928 Sep 30 15:44 frpc_full.ini
-rw-rw-r-- 1 topcloud topcloud      126 Sep 30 15:44 frpc.ini
-rwxrwxr-x 1 topcloud topcloud 13205504 Sep 30 15:38 frps
-rw-rw-r-- 1 topcloud topcloud     4928 Sep 30 15:44 frps_full.ini
-rw-rw-r-- 1 topcloud topcloud       26 Sep 30 15:44 frps.ini
-rw-rw-r-- 1 topcloud topcloud    11358 Sep 30 15:44 LICENSE
drwxrwxr-x 2 topcloud topcloud       88 Sep 30 15:44 systemd

# 8.刪除使用者端的檔案(可以不刪,主要是為了避免操作時修改錯了檔案)
[topcloud@alihadoop frp]$ rm -rf frpc*

# 9.檢視是否刪除了
[topcloud@alihadoop frp]$ ll
total 12920
-rwxrwxr-x 1 topcloud topcloud 13205504 Sep 30 15:38 frps
-rw-rw-r-- 1 topcloud topcloud     4928 Sep 30 15:44 frps_full.ini
-rw-rw-r-- 1 topcloud topcloud       26 Sep 30 15:44 frps.ini
-rw-rw-r-- 1 topcloud topcloud    11358 Sep 30 15:44 LICENSE
drwxrwxr-x 2 topcloud topcloud       88 Sep 30 15:44 systemd

3.1.2、伺服器端檔案設定

[common]
#與使用者端繫結的進行通訊的埠
bind_port = 7000

#存取使用者端web服務自定義的埠號
vhost_http_port = 6081

3.1.3、伺服器端啟動

  • 前臺啟動方式(推薦後臺啟動方式)
[root@alihadoop frp]# ./frps -c ./frps.ini
  • 後臺啟動方式
# 進入 frp 所在的目錄,然後使用以下命令
# nohup 和 & 常一起使用,"nohup 命令 &":用於後端啟動
[root@alihadoop frp]# nohup ./frps -c ./frps.ini >/dev/null 2>&1 &
[1] 1363
  • 伺服器端啟動檢視
[root@alihadoop frp]# netstat -ntlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:5355            0.0.0.0:*               LISTEN      1029/systemd-resolv 
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1067/sshd           
tcp6       0      0 :::5355                 :::*                    LISTEN      1029/systemd-resolv 
tcp6       0      0 :::7000                 :::*                    LISTEN      1363/./frps         
tcp6       0      0 :::6081                 :::*                    LISTEN      1363/./frps

3.2、使用者端

使用者端:這裡表示的是內網伺服器


3.1.1、使用者端搭建

# 前面步驟與伺服器端搭建一致

# 8.刪除伺服器端的檔案(可以不刪,主要是為了避免操作時修改錯了檔案)
[topcloud@hadoop103 frp]$ rm -rf frps*

# 9.檢視是否刪除了
[topcloud@hadoop103 frp]$ ll
total 12920
-rwxrwxr-x 1 topcloud topcloud 13205504 Sep 30 15:38 frpc
-rw-rw-r-- 1 topcloud topcloud     4928 Sep 30 15:44 frpc_full.ini
-rw-rw-r-- 1 topcloud topcloud       26 Sep 30 15:44 frpc.ini
-rw-rw-r-- 1 topcloud topcloud    11358 Sep 30 15:44 LICENSE
drwxrwxr-x 2 topcloud topcloud       88 Sep 30 15:44 systemd

3.1.2、使用者端檔案設定

[common]
#公網伺服器ip
server_addr = 47.114.110.230
#與伺服器端bind_port一致
server_port = 7000
 
[ssh]
#連線協定
type = tcp
#內網伺服器ip
local_ip = 192.168.10.102
#ssh預設埠號,代理伺服器的埠
local_port = 22
#自定義的存取內部ssh埠號
remote_port = 6102
 
#公網存取內部web伺服器以http方式
[web]
#存取協定
type = http
#內網web服務的埠號
local_port = 8081
#所繫結的公網伺服器域名,一級、二級域名都可以
custom_domains = lin.topcloud.com

若想連線到多個區域網內的使用者端,可以設定 [sshXXX],如下所示

#公網通過ssh存取內部伺服器,
[ssh103]
#連線協定
type = tcp
#內網伺服器ip
local_ip = 192.168.10.103
#ssh預設埠號,代理伺服器的埠
local_port = 22
#自定義的存取內部ssh埠號
remote_port = 6103

3.1.3、使用者端啟動

  • 前臺啟動方式(推薦後臺啟動方式)
[topcloud@hadoop103 frp]# ./frpc -c ./frps.ini
  • 後臺啟動方式
# 進入 frp 所在的目錄,然後使用以下命令
# nohup 和 & 常一起使用,用於後端啟動
[topcloud@hadoop103 frp]# nohup ./frpc -c ./frpc.ini >/dev/null 2>&1 &
[1] 1688
  • 啟動檢視
[topcloud@hadoop103 frp]$ ps -ef | grep 1688
topcloud   1688   1600  2 15:44 pts/0    00:00:00 ./frpc -c ./frpc.ini
topcloud   1699   1600  0 15:44 pts/0    00:00:00 grep --color=auto 1688

4、知識補充

4.1、’>/dev/null 2>&1’ 是什麼意思?

  • >:用於重定向
  • /dev/null:是一個黑洞,任何傳送的資料都將被丟棄
  • '2':是標準錯誤的檔案描述符
  • >:用於重定向
  • &:是檔案描述符的符號(沒有它,以下 1 將被視為檔名)
  • 1:是標準輸出的檔案描述符

0 15:44 pts/0 00:00:00 grep --color=auto 1688


# 4、知識補充

## 4.1、'>/dev/null 2>&1' 是什麼意思?

* `>`:用於重定向
* `/dev/null`:是一個黑洞,任何傳送的資料都將被丟棄
* `'2'`:是標準錯誤的檔案描述符
* `>`:用於重定向
* `&`:是檔案描述符的符號(沒有它,以下 1 將被視為檔名)
* `1`:是標準輸出的檔案描述符

因此 `>/dev/null 2>&1` 將程式的輸出重定向到 `/dev/null`。包括 ==Standard Error== 和 ==Standard Out==。