寫了一個 SRE 除錯工具,類似一個小木馬

SRETalk發表於2024-04-18

遠端操作機器有時會比較麻煩,我寫了一個工具,主要功能:1.遠端執行命令 2.上傳下載檔案。是一個 Web Server,透過 HTTP 請求來操作機器,類似一個小木馬。當然,因為是一個 Web Server,所以也提供了列印 HTTP 請求的能力,方便除錯 Webhook 場景。下面給大家演示一下。

安裝

工具程式碼放到 Github 上了,感興趣的朋友可以瞧瞧,沒多少行程式碼。也給大家編譯好了,下載地址在這裡:https://github.com/UlricQin/gohttpd/releases。提供 x86 和 arm64 的 Linux 版本,下載後解壓就可以直接執行。

# 我是 arm64 架構的機器,所以下載 arm64 版本,下載完了解壓縮
tar zxvf gohttpd-v0.3-linux-arm64.tar.gz

# 進入解壓縮出來的目錄裡
cd gohttpd-v0.3-linux-arm64

# 執行 gohttpd,監聽 8888 埠,認證密碼是 Pa55word
./gohttpd 8888 Pa55word

如上,執行 gohttpd 時,需要傳入兩個引數,第一個是要監聽的埠號,第二個是認證密碼。這裡我傳入的是 8888 和 Pa55word。我這個機器的 IP 是 10.211.55.3,下面給大家演示一下。

操作演示

命令執行

我先透過這個 HTTP Server 在目標機器執行個命令:

ulric@ulric-flashcat ~ % curl 10.211.55.3:8888/run -d 'hostname;uptime'
Authorization is blank

報錯了,說 Authorization 為空,這是缺少認證資訊,認證資訊就是 Pa55word,所以我再加上認證資訊(放 header 裡):

ulric@ulric-flashcat ~ % curl -H "Authorization: Pa55word" 10.211.55.3:8888/run -d 'hostname;uptime'
ubuntu-linux-22-04-desktop
 11:01:56 up 2 days, 16:42,  3 users,  load average: 0.29, 0.15, 0.11

OK,正常輸出了機器名和 uptime 資訊。當然,透過 -d 的方式可能不方便編輯,尤其是在換行的時候,我們可以使用 postman 這類工具,更方便的編輯請求體。比如

20240410110756

下載檔案

剛才命令執行的時候,呼叫的介面(URL路徑)是 /run,我們不加任何 URL 路徑,直接請求,就可以列出當前目錄下的檔案,比如:

20240410111420

點選對應的檔案,就可以下載了。如果你在 Linux 根目錄下執行 gohttpd,那麼你就可以下載整個系統的檔案了,所以要注意安全。

上傳檔案

上傳檔案的 URL 是 /upload,使用瀏覽器開啟,如圖:

20240410111625

可以選擇多個檔案,上傳,完事去首頁看看,就可以看到上傳的檔案了。

介面除錯

有些產品對外提供 Webhook 能力,但是我想之後 Webhook 的具體內容格式,這時候可以用這個工具來列印 HTTP 請求,比如:

ulric@ulric-flashcat ~ % curl 10.211.55.3:8888/request
r.RequestURI: /request
r.URL.Path: /request
r.URL.Host:
r.URL.Hostname():
r.Method: GET
r.URL.Scheme:
gohttpd pid: 842085

Headers:
User-Agent: curl/8.4.0
Accept: */*

Payload:

ulric@ulric-flashcat ~ % curl 10.211.55.3:8888/request -d 'hello world'
r.RequestURI: /request
r.URL.Path: /request
r.URL.Host:
r.URL.Hostname():
r.Method: POST
r.URL.Scheme:
gohttpd pid: 842085

Headers:
User-Agent: curl/8.4.0
Accept: */*
Content-Length: 11
Content-Type: application/x-www-form-urlencoded

Payload:
hello world

如上,透過 /request 介面,可以列印出 HTTP 請求的詳細資訊,包括 URL、Method、Headers、Payload 等。但是這個內容是透過 HTTP Response 直接返回的。不方便除錯 Webhook 場景,Webhook 場景可以使用 /print 介面,別的服務呼叫 /print 介面的時候,就會在 gohttpd 的控制檯列印出 HTTP 請求的詳細資訊。

比如我 curl 一下 /print

ulric@ulric-flashcat ~ % curl 10.211.55.3:8888/print -d 'hello world'
ok

然後到啟動 gohttpd 的控制檯看看:

root@ubuntu-linux-22-04-desktop:~/download/gohttpd-v0.2-linux-arm64# ./gohttpd 8888 Pa55word
2024/04/10 11:00:04 main.go:211: listening http on 8888
r.RequestURI: /print
r.URL.Path: /print
r.URL.Host:
r.URL.Hostname():
r.Method: POST
r.URL.Scheme:
gohttpd pid: 842085

Headers:
Accept: */*
Content-Length: 11
Content-Type: application/x-www-form-urlencoded
User-Agent: curl/8.4.0

Payload:
hello world

對於除錯 Webhook 的場景,這就比較方便了。

如上知識,希望對你有幫助。文末請允許我插播一個小廣告。本人創業兩年了,我們公司的業務如下,如果你有這方面的需求,歡迎聯絡我們做產品技術交流哈。

🎯 關於快貓星雲

快貓星雲是一家雲原生智慧運維科技公司,由知名開源專案“夜鶯(Nightingale)”的核心開發團隊組成,創始團隊均來⾃阿⾥、百度、滴滴等互聯⽹公司。夜鶯是一款開源雲原生監控工具,是中國計算機學會接受捐贈並託管的第一個開源專案,在GitHub上有超過8000顆星,迭代釋出了超過100多個版本,上百位社群貢獻者,是國內領先的開源可觀測性解決方案。

快貓星雲以開源夜鶯為核心打造的“Flashcat平臺”,是國內頂級互聯⽹公司可觀測性實踐的產品化落地,致力於讓可觀測性技術更好的服務企業,保障服務穩定性。Flashcat 平臺具有以下特點:

  • 統一採集:採用外掛化思路,內建整合上百種採集外掛,伺服器、網路裝置、中介軟體、資料庫、應用、業務,均可監控,開箱即用。
  • 統一告警:支援幾十種資料來源對接,收集各類監控系統的告警事件,進行統一的告警收斂、降噪、排班、認領、升級、協同,大幅提升告警處理效率。
  • 統一觀測:將 Metrics、Logs、Traces、Events、Profiling 等多種可觀測性資料融會貫通,並預置行業最佳實踐,既提供全域性業務視角、技術視角的駕駛艙,也提供層層下鑽的故障定位能力,有效縮短故障發現和定位時間。

快貓星雲,讓可觀測性資料更有價值!
https://flashcat.cloud/

相關文章