mqtt中clientid怎么查_物联网安全之MQTT渗透实战

本文探讨了物联网安全领域的MQTT渗透实战,包括如何查询MQTT的clientID,以及介绍了一些实战工具。同时,文章还提到了FireWalker作为绕过用户空间EDR Hooking的新方法,以及对APT28(Fancybear)样本的详细分析和Go二进制文件的逆向分析概述。
摘要由CSDN通过智能技术生成

d8681d87b426bca3027948464997c0c9.png

大家好,我是银基Tiger Team的BaCde。上一篇  物联网安全之MQTT协议安全  主要介绍了MQTT安全的一些基础知识。今天将在上一篇基础上来说说实战中MQTT的利用。 在整个物联网或车联网架构中,MQTT的部分通常应用在移动端、管理端、Web端、设备端。而MQTT协议中的三种角色是发布者(PUBLISHER)、订阅者(SUBCRIBER)、代理(BROKER)。发布者(PUBLISHER)和订阅者(SUBCRIBER)通过代理(BROKER)来发布和订阅消息。这两个角色在实际场景中主要应用是移动端、Web端、设备端;代理(BROKER)一般是服务器,可以由activemq、hivemq、emqx等许多软件来搭建。在开发过程中,不同的设备,技术特点也有所不同。其使用的协议除了mqtt外,Web端通常使用websocket的方式来进行收发消息。 fc9e99f73d0a4e8f70335eec7ee37825.png f42fc6f092079eb92cbb88e9e060458d.png0X00 获取MQTT认证信息 目前对于MQTT的开发中的安全还尚未受到广泛关注,这使得有多种方式在移动端、Web端、设备端获取到MQTT的认证与连接信息。通过获取的信息来进一步实现越权访问、发布恶意内容等攻击。 由于设备方面暂未找到案例,这里将以Web端和移动端案例来进行说明。

开发的一点知识

通过查阅一些开发资料,可以发现常见的几个MQTT的javascript库: Paho.js 、 MQTT.js 、 mqtt-elements 、 MQTT.DART 在实际的研究过程中发现尤其以paho.js居多。在实际的渗透过程中需要多留意,使用本库基本可以确定Web端应用了MQTT的。以下我就介绍几个获取MQTT的几个小技巧。

实战工具

* Chrome 浏览器* Burp Suite* source detecotor
好了,有了这几个就够了。开始我们的实战之旅。

获取方法

1、web应用中直接捕获
在浏览目标时我一般会打开Chrome浏览器的开发者调试工具,通过查看请求信息或这直接搜索mqtt的字样来确定是否使用MQTT的javascript文件。另外一个就是可以查看websockets请求看是否有进行mqtt的连接操作等。 一旦发现使用MQTT后,就可以继续查看javascript文件来找到连接的host、端口、用户名以及密码信息。对于目前流行的云厂商,一般还会开启tls。或者这些信息后,我们就可以进行深入的分析或利用。
在Java开发MQTT直连接入物联网平台,通常需要使用专门的MQTT客户端库来实现与MQTT代理服务器的通信。下面是一个基本的步骤介绍: 1. 选择合适的MQTT客户端库:常用的Java MQTT客户端库包括Eclipse Paho和Mosquitto。选择一个适合你项目的库,并在项目添加相应的依赖。 2. 建立MQTT连接:使用所选的MQTT客户端库创建一个MQTT连接实例,配置服务器地址、端口(通常是1883或8883,后者为SSL/TLS加密连接)、以及连接时需要的客户端ID、用户名和密码等。 3. 连接到MQTT代理:通过MQTT客户端实例发起连接请求到指定的MQTT代理服务器。 4. 订阅主题:连接成功后,客户端需要订阅一个或多个主题,以便接收来自该主题的消息。 5. 发布消息:客户端可以发布消息到特定的主题,这些消息可以被其他订阅了相同主题的客户端接收。 6. 处理消息:客户端通过回调函数或其他机制处理接收到的消息。 7. 断开连接:完成消息的发布或接收后,客户端应主动断开与MQTT代理的连接。 示例代码框架(使用Eclipse Paho): ```java import org.eclipse.paho.client.mqttv3.*; public class MqttClientSample { public static void main(String[] args) { String serverUri = "tcp://broker.hivemq.com:1883"; // MQTT代理服务器地址 String clientId = "JavaClient"; String topic = "test/topic"; String content = "Hello World!"; MqttClient client = null; try { client = new MqttClient(serverUri, clientId); MqttConnectOptions connOpts = new MqttConnectOptions(); connOpts.setCleanSession(true); client.connect(connOpts); MqttMessage message = new MqttMessage(content.getBytes()); client.publish(topic, message); client.subscribe(topic, (String topic1, MqttMessage message1) -> { System.out.println("Message received: " + new String(message1.getPayload())); }); client.disconnect(); } catch (MqttException me) { System.out.println("reason " + me.getReasonCode()); System.out.println("msg " + me.getMessage()); System.out.println("loc " + me.getLocalizedMessage()); System.out.println("cause " + me.getCause()); System.out.println("excep " + me); } finally { if (client != null) { try { client.close(); } catch (MqttException me) { me.printStackTrace(); } } } } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值