iT邦幫忙

2023 iThome 鐵人賽

DAY 28
1
AI & Data

AIoT的藍藥丸與紅藥丸,你選哪個?系列 第 53

Day 28:Flask計畫.IP 與 PORT 之門

  • 分享至 

  • xImage
  •  

前情提要

  你們拆開後發現裡面居然藏著一塊電路板!原來,這就是你們在找的隱藏的電路板。你們終於可以用電路板來欺騙門禁系統,讓門禁系統以為你們是合法的使用者,這樣你們就可以逃出密室,看到大漂亮了!
  你們想到可以用電路板來模擬 USB 裝置(用 Pythonpyusb 模組來控制 USB 的通訊協定),然後傳送一些指令給門禁系統,讓它認為你們是合法的使用者。你們還分析門禁系統的型號和版本,嘗試找到提示或漏洞。你們發現這個型號的門禁系統是用 Raspberry Pi 作為核心,還使用了 Flask 當作 Web 框架,用一個 Web 介面 來管理和控制門禁系統。這個門禁系統的 Flask 容器沒有設定密碼或驗證機制,所以你們打算用Docker直接訪問它的 Web 介面,然後用 POST 請求來傳送開門指令。

如果想了解為什麼可以「用Docker直接訪問它的 Web 介面,然後用 POST 請求來傳送開門指令」,可以參考我的用 Docker 架設 Flask Web Server的潛在安全風險的補充,以及參考興趣使然的小胃(2019)翻譯的這篇文章,原文為Luke Paris(2019)寫的這篇文章

用Python開發Flask網頁程式

  「剛好我發現了一個漏洞。」眼鏡仔興奮地說,「你們看這裡,這個門禁系統的 Flask 容器沒有設定密碼或驗證機制,所以我們可以直接訪問它的 Web 介面,然後用 POST 請求來傳送開門指令。」
  「我猜可能是設計門禁系統的時候對自己設計的系統太有自信了。」眼鏡哥繼續說著他的猜測,「她認為我們不知道 Flask 容器IP 位址PORT 號碼,肯定沒辦法駭入系統。」
  「那我們有辦法找出Flask 容器IP 位址PORT 號碼嗎?」毛帽哥半信半疑地說,「還是這其實是陷阱?」
  「我們可以用Docker exec這個Docker 指令,來找出Flask 容器IP 位址PORT 號碼嗎?」你問,「我記得Docker exec可以在運行中的容器內執行任意命令,例如 docker exec -it <container_id> ip addr show可以顯示容器的IP 位址。」
  「那我們要先取得 Docker 容器的存取權限才可以。」眼鏡仔說,「如果我們沒有取得 Docker 容器的存取權限,也沒辦法用 docker inspect 指令或 docker port 指令來查出容器的 IP 位址PORT 號碼。因為這些指令需要在 Docker 主機上執行,而且需要有相應的權限。」

關於「 Docker exec 指令」,可以參考小賴(2022)寫的這篇文章
關於「 docker inspect 指令」,可以參考Enoxs(2021)寫的這篇文章
關於「 docker port 指令」,可以參考阿展展展(2021)寫的這篇文章

  「還是我們試試看用 Pythonrequests 模組來發送 HTTP 請求,然後用 try-except 語句來捕捉錯誤和異常。」毛帽哥提議,「如果發送請求成功,就表示找到了正確的 IP 位址PORT 號碼、還有能夠成功回應的 URL;如果發送請求失敗,就表示找錯了或者沒有回應。」

關於「requests 發送HTTP請求」,可以參考plusone(2018)寫的這篇文章

  • 作者從基本的安裝、使用、到進階的 header 設定等方面,詳細說明了如何用 requests 發送和接收 HTTP 請求
  • 作者還舉了一些實例,如如何用 requests 爬取 Google 搜尋結果,並將其儲存為 HTML 檔案

上一篇
補充:用 Docker 架設 Flask Web Server的潛在安全風險
下一篇
Day 28:Flask計畫.RESTful API 之門
系列文
AIoT的藍藥丸與紅藥丸,你選哪個?62
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言