基于ESP32-c3的未授权访问、敏感信息泄露漏洞实验

0 阅读3分钟

前言

多日未曾写文章了,近日在学习物联网单片机,最近偶然间得到了一个esp-c3的板子,这个板子自带wifi还挺有意思,于是想做个物联网安全的实验,由于笔者也是刚刚学习,所以此文章可作为初学者的入门文章交流学习一下

实验所需设备、环境

  • ESP32 -c3开发板
  • Windows11 系统
  • Nmap、Arduino IDE

配置实验环境

此次程序使用Arduino IDE进行烧录,Arduino IDE的配置方法在这篇文章里不做介绍了,我们将重点放到安全实验中,烧录程序如下

#include <WebServer.h>
 
// ====================== 仅修改这里 ======================
const char* WIFI_SSID     = "Easy";
const char* WIFI_PASSWORD = "68686868";
// ========================================================
 
// 【高危漏洞】硬编码密钥/设备凭证(真实IoT设备致命漏洞)
const char* DEVICE_KEY    = "IOT_HARDCODED_KEY_2025";
const char* ADMIN_TOKEN   = "ADMIN_AUTH_TOKEN_123456";
const char* DEVICE_ID     = "ESP32-C3-IOT-DEVICE-001";
 
WebServer server(80);
 
// 【高危漏洞】未授权API接口:无任何登录/鉴权,直接泄露所有敏感信息
void handleLeak() {
  String result = "{";
  result += "\"device_id\":\"" + String(DEVICE_ID) + "\",";
  result += "\"device_secret_key\":\"" + String(DEVICE_KEY) + "\",";
  result += "\"admin_token\":\"" + String(ADMIN_TOKEN) + "\",";
  result += "\"mac_address\":\"" + WiFi.macAddress() + "\",";
  result += "\"wifi_ssid\":\"" + String(WIFI_SSID) + "\"";
  result += "}";
 
  // 强制UTF-8编码 → 彻底解决乱码
  server.send(200, "application/json; charset=utf-8", result);
}
 
void setup() {
  Serial.begin(115200);
  WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
 
  // 等待WiFi连接
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
 
  // 注册漏洞接口
  server.on("/iot/secret", handleLeak);
  server.begin();
 
  // 串口输出关键信息
  Serial.println("\n==================================");
  Serial.println("✅ WiFi连接成功");
  Serial.print("📶 设备IP:");
  Serial.println(WiFi.localIP());
  Serial.println("🔴 漏洞接口已开启:/iot/secret");
  Serial.println("==================================");
}
 
void loop() {
  server.handleClient();
}

此程序构造了一个模拟访问开发板的http服务,我们可以通过未授权的访问接口路径,获取有关admin权限的一些信息,进而达到了未授权访问,以及敏感信息泄露的实验目的

烧录 将上述程序中的wifi名称密码切换为真实的便可以进行烧录 烧录后串口显示如下

==================================

✅ WiFi连接成功

📶 设备IP:10.163.98.190

🔴 漏洞接口已开启:/iot/secret

==================================

可以看到实验中漏洞接口是已经显示出来的,不过为了更真实的复现,我们后续从黑盒角度进行测试复现

进行实验

首先确保实验主机和目标开发板在同一局域网下
通过nmap扫描到同一局域网下开发板的ip

nmap -sn 10.163.98.0/24

MAC Address: 76:44:47:81:D7:97 (Unknown)
Nmap scan report for 10.163.98.190
Host is up (0.71s latency). 可得到目标开发板ip地址为:10.163.98.190

接着用nmap检测发现这个板子开放着80端口的http服务

PORT STATE SERVICE

80/tcp open http

MAC Address: B0:A6:04:4E:02:14 (Unknown)

我们试着访问一下这个地址,可以得到我们之前创建的页面 这同时也证明我们的烧录是正确的

下一步就是试着去穷举接口地址,将模拟的字典放进你会使用的后台扫描器

api

iot

iot/secret

iot/config

iot/status

debug

admin

config

backup

reset

device

secret

我们便可以得到一下地址是存在的,同时这也是泄露敏感信息的接口地址

http://10.163.98.190/iot/secret

访问可得到如下信息,里面包含着高权限的id key token等等敏感信息

0338533dbbcb4425b025d5bee8ec0c4d.png

完结 撒花

至此,我们就完成了漏洞环境的配置以及漏洞的复现,当然这个实验还是有很多”自欺欺人“的成分存在的,但我们确实完成了自己第一个IOT安全漏洞的验证

通过这次实验我们经历了程序烧录,以及将单片机同web安全相结合的过程,从浅入深,由易入难是每个人都要经历的学习阶段,所以慢慢来

Keep 松弛就好