在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

一個基于客戶端-服務器的消息發布/訂閱傳輸協議MQTT簡析

蛇矛實驗室 ? 來源:蛇矛實驗室 ? 作者:c4se ? 2022-11-23 14:12 ? 次閱讀

本環境是蛇矛實驗室基于"火天網演攻防演訓靶場"進行搭建,通過火天網演中的環境構建模塊,可以靈活的對目標網絡進行設計和配置,并且可以快速進行場景搭建和復現驗證工作。

自 2005年國際電信聯盟正式提出“物聯網IoT)”這一概念以來,物聯網在全球范圍內迅速獲得認可,并成為信息產業革命第三次浪潮和第四次工業革命的核心支撐。

同時,數以億計的設備接入物聯網,這些設備如今已滲透到我們生活的方方面面,從家居到工廠無處不在。一方面物聯網設備使我們的生活更加便捷,而另一方面物聯網安全事件頻發,全球物聯網安全支出不斷增加。

當前,大量物聯網設備及云服務端直接暴露于互聯網,這些設備和云服務端存在的漏洞一旦被利用,可導致設備被控制、用戶隱私泄露、云服務端數據被竊取等安全風險,甚至會對基礎通信網絡造成嚴重影響。

從2018年全球統計數據來看,路由器、視頻監控設備暴漏數量占比較高。路由器暴漏數量超過3000萬臺,視頻監控設備暴露數量超過1700萬臺,并且這些設備往后幾年會一年比一年多,物聯網安全的事件也會越來越多。由此,物聯網安全行業需要大力發展,物聯網安全人才的培養也刻不容緩。

蛇矛實驗室在后續將利用火天網境系列靶場中的相關目標仿真和環境構建的特性,將持續發布關于“物聯網安全-CVE實戰分析”系列的文章來幫助大家入門物聯網安全。

關于MQTT

MQTT是一個基于客戶端-服務器的消息發布/訂閱傳輸協議。MQTT協議是輕量、簡單、開放和易于實現的,這些特點使它適用范圍非常廣泛。

在很多情況下,包括受限的環境中,如:機器與機器(M2M通信和物聯網(IoT)。其在,通過衛星鏈路通信傳感器、偶爾撥號的醫療設備、智能家居、及一些小型化設備中已廣泛使用。

MQTT介紹

4bccdd54-3ed3-11ed-9e49-dac502259ad0.png

MQTT的幾個要素:

1

1. 客戶端(Client):使用MQTT的程序或設備,一般分為發布者和訂閱者

2. 服務端(Server):發布者和訂閱者之間的Broker

3. 主題(Topic):附加在消息上的一個標簽,Broker會將該消息發送給所有訂閱該主題的訂閱者

4. 主題過濾器(Topic Filter):訂閱者訂閱時可使用通配符同時訂閱一個或多個主題

MQTT基于發布和訂閱模型,MQTT 協議的訂閱與發布是基于主題的(Topic),MQTT工作在 TCP/IP協議族上。一個典型的 MQTT 消息發送與接收的流程如下:

1. Publisher 連接 Broker;

2. Suscriber連接 Broker,并訂閱主題 Topic;

3. Publisher 發送一條消息給 Broker,主題為 Topic;

4. Broker 收到 Publisher 的消息,查出 Suscriber 訂閱了 Topic,然后將消息轉發到 Suscriber;

我們可以簡單理解,將MQTT理解為微博工作模式,當你(Suscriber)點擊關注一個博主(Publisher)后,你就訂閱了博主(連接到了Broker),當博主發微博消息時(Publish message),微博的服務器(Broker)會將你訂閱博主的微博消息轉發給你(Subcribe message),這樣就完成了消息傳遞。

MQTT服務器搭建

Eclipse Mosquitto是一個開源消息代理,實現了MQTT協議版本3.1和3.1.1。Mosquitto輕量,適用于低功耗單板計算機到完整服務器的所有設備。Mosquitto項目還提供了用于實現MQTT客戶端的C庫,以及非常受歡迎的mosquitto_pub和mosquitto_sub命令行的MQTT客戶端(來自于翻譯)。

安裝Mosquitto的過程,首先添加mosquitto的ppa源:

sudo apt-add-repository ppa:mosquitto-dev/mosquitto-ppa

4c26d3e0-3ed3-11ed-9e49-dac502259ad0.png

安裝mosquitto程序和mosquitto-clients客戶端程序

sudo apt installmosquitto
sudo apt installmosquitto-clients

4f41baea-3ed3-11ed-9e49-dac502259ad0.png

我們接下來就可以啟動mosquitto服務了,啟動可以查看一下mosquitto進程是否啟動。這里可以看到mosquitto -c參數后運行配置文件的路徑

sudo service mosquitto start

ps -aux | grep mosquitto
或者
sudo service mosquitto status

4fb43f7a-3ed3-11ed-9e49-dac502259ad0.png

接下來,我們就可以測試mqtt協議的工作流程了,首先啟動一個終端

mosquitto_sub-t "topic_name"

然后再起一個終端,使用

mosquitto_pub-t "topic_name"-m "this is a test"

這時,客戶端就會接受到訂閱的消息,服務器再次發送后,客戶端將又會接受到訂閱消息

4febd34a-3ed3-11ed-9e49-dac502259ad0.png

我們可以添加一個用戶,這里我創建了一個example用戶,密碼為example

sudomosquitto_password -c /etc/mosquitto/example example

50118b08-3ed3-11ed-9e49-dac502259ad0.png

進入到"/etc/mosquitto"目錄下,可以看到剛剛創建example用戶名和密碼的配置文件

503746e0-3ed3-11ed-9e49-dac502259ad0.png

接下來我們可以添加一個用戶的配置文件,使用用戶的配置文件進行運行,我們先停止"mosquitto"服務,然后在"/etc/mosquitto/conf.d"目錄下創建一個default.conf(這里也可以拷貝"/usr/share/doc/mosquitto/example/mosquitto.conf"文件根據需求進行修改),然后重新啟動mosquitto服務,查看一下服務是否啟動。

505b87e4-3ed3-11ed-9e49-dac502259ad0.png

此時重復上面的信息發送過程,使用-u參數指定用戶名,-P參數輸入密碼

5073f2a2-3ed3-11ed-9e49-dac502259ad0.png

以上操作均在linux終端下運行,在Windows上可以使用MQTT X工具,MQTTX 是EMQ 開源的一款跨平臺 MQTT 5.0 桌面客戶端,它能運行在 macOS,Linux,Windows上。

MQTT X 的用戶界面借助聊天軟件的形式簡化了頁面的操作邏輯,用戶可以快速創建連接保存并同時建立多個連接客戶端,方便用戶快速測試 MQTT/TCP、MQTT/TLS 的連接、發布/訂閱功能及其他特性。

打開MQTT X官網下載好以后,我們可以使用wireshark進行抓包進行分析整個的流程。

首先啟動wireshark進行監聽,然后打開MQTTX軟件新建一個鏈接,如下圖,這里名稱我設置的"mqtt_test",Client ID我使用默認分配的,服務器地址協議為"mqtt://",后面填"broker.emqx.io"。這里的EMQ X Cloud 提供的公共 MQTT 服務器,可以供我們免費使用。

下面的端口號為1883,可以進行修改,賬號和密碼隨意設置。設置好以后,就可以點擊連接了。

50ba9932-3ed3-11ed-9e49-dac502259ad0.png

修改下面msg的值為我們要發送的內容,點擊小飛機進行發送。就可以看到消息的發布和訂閱過程了。

510917e2-3ed3-11ed-9e49-dac502259ad0.png

整個流程完畢后,點擊MQTTX上面的關閉連接按鈕。然后wireshark輸入"mqtt"進行過濾。

按時間排序,可以看到MQTT協議給Broker發送了一個Connect登錄請求,然后,服務器回應一個ACK,表示登錄成功。再雙擊Connect Command這條數據包,我們可以從下面窗口中看到數據包詳細的十六進制字節內容。

51267b0c-3ed3-11ed-9e49-dac502259ad0.png

接下來,查看Connect Ack數據包可以看到到服務器回應了"20 02 00 00",這里表示登錄成功。

52e4dcea-3ed3-11ed-9e49-dac502259ad0.png

接下來看MQTT協議的 Subcribe和Publish數據包。可以看到客戶端Subcribe一個topic("test_topic/1111")

530b24cc-3ed3-11ed-9e49-dac502259ad0.png

Broker返回了"90 03 99 47 00",其中"90"為 Subscribe ACK 報文固定報頭,"03" 為剩余長度,后面倆字節為id號,"00"結束。

5365d4a8-3ed3-11ed-9e49-dac502259ad0.png

當Publisher往這個topic 推送 Payload 時,Broker 就會把 Payload 轉發給定閱這個topic的Subcriber。這樣就完成了整個流程。

53c35fe2-3ed3-11ed-9e49-dac502259ad0.png

MQTT相關漏洞

授權和認證漏洞

1

MQTT 是一種機器對機器連接協議,被設計為一種極其輕量級的發布/訂閱消息傳輸,并被全球數百萬的物聯網設備廣泛使用。

MQTT-PWN 旨在成為 IoT Broker 滲透測試和安全評估操作的一站式商店,因為它結合了枚舉、支持功能和開發模塊,同時將其全部打包在命令行界面中,并易于使用和可擴展的類殼環境(來自翻譯)。

接下來,我們使用mqtt-pwn做一些mqtt授權和認證漏洞的演示,首先安裝mqtt-pwn

git clone https://github.com/akamai-threat-research/mqtt-pwn.git
cdmqtt-pwn
sudo docker-compose up--build --detach

543898a2-3ed3-11ed-9e49-dac502259ad0.png

然后就可以啟動MQTT-PWN了

sudo docker-compose ps
sudo docker-compose run cli

下圖為MQTT-PWN運行時狀態

546eca94-3ed3-11ed-9e49-dac502259ad0.png

有一些公網開放的MQTT服務端軟件默認是開啟匿名訪問,我們可以在shodan、fofa、zoomeye等,搜索MQTT,可以看到"MQTT Connection Code: 0"。

這里如果連接某個Broker,返回結果中"MQTT Connection Code"為0就代表成功連接,如果返回值為4說明賬號密碼錯誤,如果返回值為5說明該Broker不支持用戶密碼登陸。

549ea80e-3ed3-11ed-9e49-dac502259ad0.png

我們接下來使用mqtt-pwn進行連接,help 顯示幫助信息,可以使用connect命令進行連接。對于開啟匿名登錄的服務端,直接使用"connect -o host"命令就可連接,如果沒有報錯,就表示連接成功。

連接成功后,可使用system_info 查看系統信息。接下來使用discovery建立掃描,等待Scans完成才可進行下一步,否則會報錯。

54cf5d5a-3ed3-11ed-9e49-dac502259ad0.png

使用"scans -i id",id為建立discovery的線程id。然后就可以使用"topics"查看所有topic了。

550b26f0-3ed3-11ed-9e49-dac502259ad0.png

可以輸入`messages`查看topic的內容

5558507e-3ed3-11ed-9e49-dac502259ad0.png

我們可以用MQTT-PWN使用弱口令爆破某個MQTT Broker,得到其賬號密碼,然后接入Broker。

bruteforce --host host --port port

57b3083c-3ed3-11ed-9e49-dac502259ad0.png

這里的暴力破解,主要還是看自己收藏的字典是否強大,另一方面就是網速的快慢。我們可以使用如下命令進行爆破,爆破成功后會顯示用戶名和密碼。"mqtt-pwn/resources/wordlists"目錄下存放了mqtt-pwn的爆破的用戶名和密碼字典,這里可以添加我們自己收藏的字典。

57fab56a-3ed3-11ed-9e49-dac502259ad0.png

傳輸漏洞

2

MQTT可造成XSS攻擊,這里測試CVE-2020-13821漏洞,本次測試搭建的版本為hivemq 4.3.2。我們使用docker搭建環境進行復現,比較方便。

sudodockerpullhivemq/hivemq4:4.3.2

sudodockerrun-p8080:8080-p1883:1883hivemq/hivemq4:4.3.2

環境搭建好以后,使用瀏覽器訪問ip地址,發現運行正常。

582d80da-3ed3-11ed-9e49-dac502259ad0.png

使用上面提到的MQTTX工具進行連接。創建一個新的連接,名稱隨意填寫,Client ID為漏洞點,payload為"",然后端口填寫docker映射出的相對端口。

設置完畢后,點擊connect進行連接和發送。

586e5772-3ed3-11ed-9e49-dac502259ad0.png

連接成功后,去瀏覽器進行驗證。

589a316c-3ed3-11ed-9e49-dac502259ad0.png

點擊Clients,然后點擊“Refresh Snaphot”即可觸發執行payload

58d3bc48-3ed3-11ed-9e49-dac502259ad0.png

應用漏洞

3

以EMQX為例,EMQX 是一款大規模可彈性伸縮的云原生分布式物聯網 MQTT 消息服務器。作為全球最具擴展性的 MQTT 消息服務器,EMQX 提供了高效可靠海量物聯網設備連接,能夠高性能實時移動與處理消息和事件流數據,幫助您快速構建關鍵業務的物聯網平臺與應用。

我們可以搜索EMQX的相關文檔信息,獲取有用信息。

5989c088-3ed3-11ed-9e49-dac502259ad0.png

以默認用戶名和密碼為例,我們在fofa或者shodan等搜索18083端口,并且title有dashboard,就可以搜索出EMQX的相關站點,我們使用默認用戶名和密碼即可進行登錄查看。

59cba05c-3ed3-11ed-9e49-dac502259ad0.png

其他漏洞

4

對于無法通過一般途徑獲取賬號密碼的客戶端,我們可以通過提取設備的固件,對其逆向分析,然后把文件系統中的證書或是賬號密碼提取出來。亦或者MQTT使用加密通信,通過提取固件分析其加密流程進行解密,并進行后續攻擊操作。

總結

這一小節我們本文簡單介紹MQTT安全相關內容,使用mosquito和mqttx完成了整個mqtt信息傳輸流程,然后復現了幾個分類中常見的MQTT漏洞。最后提醒一下大家,自己在學習過程中最好自己搭建服務進行測試,請勿對網絡上的機器目標進行測試和破壞。





審核編輯:劉清

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 傳感器
    +關注

    關注

    2553

    文章

    51467

    瀏覽量

    756964
  • 過濾器
    +關注

    關注

    1

    文章

    433

    瀏覽量

    19760
  • MQTT協議
    +關注

    關注

    0

    文章

    98

    瀏覽量

    5496

原文標題:物聯網安全實戰從零開始-MQTT協議分析

文章出處:【微信號:蛇矛實驗室,微信公眾號:蛇矛實驗室】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    百問MQTT協議分析 - MQTT簡述及協議報文格式組成

    16.1 mqtt協議介紹 16.1.1 概述 ?MQTT客戶端
    發表于 12-13 09:29

    socket 客戶端服務器的實現

    1. 理解Socket 在計算機網絡中,socket是種通信機制,允許兩程序(客戶端
    的頭像 發表于 11-12 14:30 ?412次閱讀

    物聯網行業中MQTT通信協議詳解以及使用

    在物聯網、小型設備、移動應用等方面有較廣泛的應用。 二 MQTT協議特點 MQTT基于 客戶端
    的頭像 發表于 09-20 17:08 ?1706次閱讀
    物聯網行業中<b class='flag-5'>MQTT</b>通信<b class='flag-5'>協議</b>詳解以及使用

    NTP網絡時間服務器能帶同步多少客戶端

    NTP網絡時間服務器能帶同步多少客戶端
    的頭像 發表于 09-04 10:43 ?519次閱讀
    NTP網絡時間<b class='flag-5'>服務器</b>能帶同步多少<b class='flag-5'>客戶端</b>?

    IG902如何連接公有MQTT測試平臺?

    使用MQTT客戶端訂閱相同的Topic,接收IG設備發送的數據。 1)使用MQTTBox 充當MQTT協議
    發表于 07-25 08:06

    使用windows版mosquitto軟件自建服務器

    通 e.打開第一個CMD終端,啟動代理服務器(指定配置文件): f.打開第二CMD終端,作為客戶端1,訂閱主題(指定IP、端口、用戶名
    發表于 07-24 06:39

    使用ESP8266板和AT命令集構建客戶端HTTP服務器遇到的疑問求解

    我們正在嘗試使用ESP8266板和 AT 命令集構建客戶端 HTTP 服務器,通過串行端口連接到 Arduino 板。我們正在使用 Arduino Mega 2560 板。它有更
    發表于 07-18 08:03

    如果ESP上的TCP客戶端服務器斷開連接,如何啟用自動重連?

    ESP - TCP 客戶端 嵌入式 Linux 服務器 - TCP 服務器 如果ESP上的TCP客戶端服務器斷開連接,如何啟用自動重連?
    發表于 07-17 06:25

    來了解MQTT Broker代理

    MQTT Broker是MQTT(Message Queuing Telemetry Transport)協議中的核心組件,它是種輕量級的、發布
    的頭像 發表于 07-15 17:03 ?434次閱讀
    來了解<b class='flag-5'>一</b>下<b class='flag-5'>MQTT</b> Broker代理

    服務端測試和客戶端測試區別在哪

    服務端測試和客戶端測試是軟件開發過程中的兩重要環節,它們分別針對服務器端客戶端的軟件進行測試。本文將詳細介紹
    的頭像 發表于 05-30 15:27 ?3470次閱讀

    求助,關于BLE服務器傳輸數據問題求解

    ,但我想知道是否有其他方法可以傳輸更大量的數據。 如果只能使用通知進行傳輸,我想實現客戶端功能,將命令寫入某個特征值,并自動啟用
    發表于 05-23 07:55

    安科瑞終端監測設備與MQTT協議的結合使用

    摘要:MQTT基于客戶端-服務器的消息發布/訂閱
    的頭像 發表于 05-13 13:54 ?480次閱讀
    安科瑞終端監測設備與<b class='flag-5'>MQTT</b><b class='flag-5'>協議</b>的結合使用

    MQTT物聯網平臺是什么?MQTT物聯網平臺的功能

    MQTT(Message Queuing Telemetry Transport)是種基于客戶端-服務器架構的發布/
    的頭像 發表于 04-01 10:20 ?808次閱讀

    mqtt協議和tcp協議區別

    帶寬和高延遲的網絡環境,尤其在物聯網環境中表現優秀。而TCP協議是面向連接的、可靠的、基于字節流的傳輸層通信協議,主要用于互聯網和局域網中的數據傳輸。 2. 連接方式:
    的頭像 發表于 04-01 09:15 ?1782次閱讀

    MQTT協議網關解決方案設計與實施

    MQTT協議網關是中間件,負責接收來自不同MQTT客戶端的消息,并將這些消息轉發到
    的頭像 發表于 03-11 14:07 ?573次閱讀
    主站蜘蛛池模板: 九九精品久久久久久噜噜 | 久久久久久久综合狠狠综合 | 午夜短视频 | 三级欧美在线 | 成人国产亚洲欧美成人综合网 | 欧美三级手机在线 | 在线免费黄色网址 | 精彩视频一区二区三区 | 91md天美精东蜜桃传媒在线 | 欧洲一级鲁丝片免费 | 美女免费视频是黄的 | a在线观看网站 | 国产毛片农村妇女系列 | 六月婷婷视频 | 国产成人精品日本亚洲语音1 | 福利视频一区二区牛牛 | 亚洲国产情侣偷自在线二页 | 亚洲欧美高清在线 | 久久天天躁夜夜躁狠狠躁2020 | 成人黄色免费观看 | 色综合久久丁香婷婷 | 六月激情 | 黄色一级片播放 | 精品四虎免费观看国产高清 | 深夜在线视频免费网址 | 丁香婷婷亚洲六月综合色 | 国产三级日本三级日产三级66 | 国产一级特黄aaaa大片野外 | 在线视频 亚洲 | 色月| 色综色| 性夜影院午夜看片 | 成年人网站在线 | 欧美黑人三级 | 狠狠干狠狠色 | 你懂的在线免费 | 亚洲精品第三页 | 蜜月mv国产精品 | 日韩卡1卡2卡三卡四卡二卡免 | 国产午夜毛片v一区二区三区 | 精品一区二区三区在线视频 |