前言
多日未曾写文章了,近日在学习物联网单片机,最近偶然间得到了一个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
我们便可以得到一下地址是存在的,同时这也是泄露敏感信息的接口地址
访问可得到如下信息,里面包含着高权限的id key token等等敏感信息
完结 撒花
至此,我们就完成了漏洞环境的配置以及漏洞的复现,当然这个实验还是有很多”自欺欺人“的成分存在的,但我们确实完成了自己第一个IOT安全漏洞的验证
通过这次实验我们经历了程序烧录,以及将单片机同web安全相结合的过程,从浅入深,由易入难是每个人都要经历的学习阶段,所以慢慢来
Keep 松弛就好