標籤:系統 conf devkit 綁定 裝置 tca 自己的 市場 遠程伺服器
問題
在實際開發項目中,原型產品在推向市場、實際部署使用之前,也需要在實際環境進行實驗性運行,以便測試和改進。
但可能出現的一個問題是,部署測試的實際環境與辦公室有一定的距離,甚至在不同的城市裡。當應用服務程式異常後者掛掉的時候,就沒有辦法探查裝置的實際情況了。
要是在辦公室裡,就可以基於區域網路 ssh 登入訪問,甚至基於調試串口登入。由於裝置在遠程,是無法通過 ssh 直接登入了。
基本概念
我們上面說的“登入”,其實都是是指通過 Linux 的 shell 登入系統。那下面準備介紹的反向 shell 就是基於 Linux shell 的一種技術。這裡先介紹這個概念以及相似的 bind shell 概念。
Bind Shell
bind shell 是使用者用 bash,將 shell 綁定到一個本地連接埠上,這樣外部系統就可以基於網路往這裡發送 shell 命令。自己這裡是作為服務端接收命令。但請注意,這需要外部系統有訪問這個系統的網路支援,所以一般是在同一個區域網路內。
Reverse Shell
反向 shell 是把自己作為用戶端,向特定的遠程系統發送自己的 shell。雖然在底層上也是通過網路接收 shell 命令並執行,但是這樣的“反向”方式適用於不同的網路環境。作為網路通訊的發起者,本地終端裝置可以主動串連遠程伺服器,讓伺服器“登入”上來,執行 shell 命令。
解決方案netcat 的編譯
下載源碼:https://sourceforge.net/projects/netcat/
用於 x86 平台的編譯
./configure --prefix=/home/jack/others/netcat-0.7.1/netcatmakemake install
用於 ARM 平台的編譯(以 OMAPL138 為例)
source /home/jack/omapl138/ti/mcsdk_1_01_00_02/linux-devkit/environment-setup./configure --prefix=/home/jack/others/netcat-0.7.1/netcat --host=arm-arago-linux-gnueabimakemake install
產生的檔案在目前的目錄下 netcat 裡。
netcat 的使用先在服務端啟動監聽
nc -l -p 8089 -vvv
8089 連接埠號碼可隨意指定一個未被使用的。
在裝置端發起反向 shell
./netcat/bin/netcat -e /bin/sh 192.168.1.60 8089
IP 為服務端 IP,連接埠號碼與服務端監聽的一致。這裡 IP 是伺服器的公網 IP。
此時就可以在服務端讓裝置端執行 shell 命令了。
非同步發起反向 shell
在項目實踐中我們使用了 MQTT,用戶端與服務端保持串連。然後我們就讓每台裝置訂閱對應的反向 shell 主題,服務端就可以在需要的時候發送某台裝置對應的主題,讓其發起一個 netcat 反向 shell 串連了。當然,服務需要事先啟動對應的 netcat 監聽連接埠。
這樣,就相當於登入了這台裝置,可以進行必要的調試操作了。
參考
17756203
廖傑良 - 2018-9-4
使用 netcat 實現反向 shell 訪問以便於遠端偵錯裝置