Skip to content
KitploitKITPLOIT
工具漏洞利用博客
Log in
提交
工具漏洞利用博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

订阅源联系隐私© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
ipmi — IPMI 相关工具,源自 DARPA 项目 | Kitploit
工具/GitHubGitHub/zenfish/ipmi
密码破解侦察网络映射端口扫描漏洞分析配置审计信息收集渗透测试硬件安全身份验证
GitHubzenfish/ipmi

ipmi

766371个月前Kitploit 审核通过

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

IPMI 相关工具,源自 DARPA 项目

查看仓库

我编写了一些软件来探索 IPMI;以下是一些结果。我想我会按照通常的检测、获取数据、审计这样的循环来做。每一项结果本身都相当有趣,至少对我来说是这样。

顺便说一句/供参考 - 我发布了一个探索 IPMI 的新工具 - https://github.com/zenfish/zipmi - 以及一套 Qemu 配方/镜像等,用于在 Qemu 下将 BMC 作为虚拟系统运行,地址为 https://github.com/zenfish/zbmc。

IPMI 网站

来自 http://fish2.com/ipmi 的论文和资料

html

密码破解

这里有一个小型 Perl 程序,它尝试猜测远程 BMC 上的账户,提取其哈希值,然后尝试破解其(HMAC 哈希的)密码。我为好奇者写了一篇简短的说明。注释详尽,或许能提供一些用处。

获取密码套件

IPMI 规范说,你可以在没有任何身份验证的情况下获取远程系统的密码套件,但我不知道有任何工具实际能做到这一点(它们都要求身份验证,当然,如果你愿意,也可以输入原始十六进制字节!)所以我写了这个小工具来做这件事;它主要尝试遵循 ipmitool 的输出;在此过程中,我相信我在该工具中发现了一个 bug(在最后一行,有时系统会发出一些似乎被误解的垃圾数据),但谁知道呢,我没有足够的系统来测试。总之…… ipmi-get-ciphers.py。

至少,它有助于发现 Cipher0 系统(注意 - 这只是指出受支持的密码套件 - 并不意味着它们实际已开启),但现实世界中确实存在有趣的东西。

获取身份验证详情

这里有两个程序,一个是简单的 Python 远程探测程序(开始讨厌 Perl 了,我告诉你),另一个使用 FreeIPMI 中的工具来获取带凭据的配置数据。

一个小型 Python 程序(超过 50% 是内联注释,压缩后 2.5k),向 BMC 发送单个数据包并仔细分析响应。有人可能会问,仅凭一个数据包能做什么?首先,可以做 10 多种不同的 IPMI 安全测试。好吧,无论是开头还是结尾,它都只是一个数据包 :) 需要 Python、一个 BMC 以及通往 UDP 端口 623 的开放路径才能工作。用法很简单:"ipmi-get-auth.py target"。

ipmi-get-auth.py / 一段非常简短的说明

把它推向极端……好吧,这里有一个上述工具的某种超级版本,它对所有通道、所有权限、所有……好吧,你懂的。为偏执狂准备(阅读注释或我写的关于它的文章,了解它为什么这样做!)

mega_chan.py / Mega mega mega ... chan chan chan...

获取设备 ID(GUID)

这里有一个简单的程序,向系统发送 Get Device ID 数据包(参见 IPMI v2 规范第 250 页)。理论上,这应该无需身份验证即可工作。在我做的一个小调查中,大约 90% 的系统对此做出了响应(尽管并非所有系统都返回有效信息!)有时你可以获取供应商和其他信息,例如型号等,但更有趣的是实际获取一个唯一 ID,传统上这是很难通过网络获取的。

get-ipmi-guid.py / Get Device ID

从 SuperMicro 二进制密码文件中导出密码

Supermicro 在其 BMC 的密码文件泄露方面存在一些问题 - 例如,参见这篇及其他文章:

a-penetration-testers-guide-to-ipmi

要使用此脚本,只需输入:

dump_SM.py password_file

在我这里可以正常工作,不提供任何担保、保证等。

检测

好吧,如果你能与 UDP 端口 623 通信,那么判断远程系统是否运行 IPMI 就非常简单。然而,除非你身处数据中心内部,否则大多数人都会封锁 UDP。而且即使他们不封锁……UDP 扫描的速度慢得难以想象。因此,我目前使用两种基本方法,借助经典的 Nmap 和 ipmiping(来自 FreeIPMI Gnu 工具集)。最简单的做法是:

  • 使用 ipmiping 询问远程系统是否支持 IPMI。得到肯定响应是系统支持 IPMI 的最有力证据(但没有什么事是确定的!)更技术性地说,它会在 UDP 端口 623 上通过 Get Channel Authentication Capabilities 请求数据报发送两次 IPMI Get Channel Authentication Capabilities 调用(发送两次是因为使用的是 UDP,连接没有保证。)
    </p> <p>
    
    由于 Nmap 在大规模网络扫描方面远比 ipmiping 高效,因此只有在 Nmap 报告某主机开放了 UDP 623 时才会使用此方法。
    
    </p> <p>
    
    不管好坏,这个端口经常被封锁,所以很多时候其他方法更有可能间接地发现 IPMI 是否在运行。
    
  • 第二种方法有点模糊,依赖于一些归纳推理(也就是猜测)。Nmap 会扫描已知与 IPMI 及厂商扩展相关的端口;UDP 623 显而易见(IPMI 的默认端口),但还有各种端口(UDP 和 TCP 都有),它们单独来看可能不会立即给你答案,但综合起来可以强烈表明其存在。TFTP、SNMP、SSH/SMASH、VNC 以及许多其他端口都属于此类。
    </p> <p>
    
    端口根据其指示能力以及 Nmap 发现它们是开放、被过滤还是处于其他状态来进行加权。
    
    </p> <p>
    
    Nmap 还可以显示所连接服务的横幅信息。我使用正则表达式来搜寻目标——例如字符串 "iLO" 和 "DRAC" 是系统可能运行 HP 的 Integrated Lights Out 服务(即 iLO)的良好指示。
    
    </p> <p>
    
    <strong>注意:</strong>目前我并未使用广播 ping 方法(一种快速遍历你所处子网的非常快捷的方式);我只是没有关于其有效性的任何数据;虽然它在有效时非常快,但我觉得它无法提供任意扫描所需的控制和可靠性。我的三台系统中有两台(Dell 和 HP)响应了 RMCP ping。没有一台响应 idiscover(ipmiutil discover)的广播 ping。然而,所有系统都响应了我下面的 Python 审计工具。
    
    </p> <p>
    
    不幸的是(当然!)通信和网络的各种因素都会产生影响——nmap 会给出许多不同的原因来解释端口为何开放或未开放(open、closed、filtered 等)。还有另一张表包含一组权重,对开放端口给予比 "open|filtered"(如 Nmap 可能所述)命中更高的分数。解读 nmap 并进行加权有点令人沮丧,但这就是生活。
    
    
    </p> <p>
    
    将所有加权值相加,把所有分数累加,你就得到了一个 IPMI 确定性等级。我在临时测试中发现,15 分或以上是系统运行 IPMI 的强有力指示。
    
    </p> <p>
    
    目前我有各种阈值(否、可能、很可能、
    是。)在测试中——在没有已知访问除我自己服务器之外的任何其他服务器的情况下——它似乎运行得相当好。也就是说,
    我认为可疑的事物以及我上面的基本思维
    模型确实会将某些服务器推到顶部,并
    让随机主机保持不动。不过,误报确实存在一些真正的问题——许多防火墙似乎向 nmap 暗示
    任何端口上都有东西(我曾想过加入一两个罕见
    端口(例如,如果你监听端口 1 和 31313 之类的东西,
    你可能并不是*真的*在监听它!)
    
    </p> <p>
    
    但这并不是关于该主题的最终结论。获取一些关于 IPMI 横幅的可靠数据应该
    相当简单,我猜这将是快速扫描大量
    系统的最佳方式。
    

以下是实现上述功能的四段 Perl 代码;一个负责扫描, 一个负责解释,另外两个用于加权。它是一个 研究工具或概念验证,而不是生产级扫描器,但 它确实能产生一些合理的输出。

必需:Nmap 版本 6。

ipmi_scan.pl - 基本 IPMI 扫描器,使用 Nmap,并在可用时使用 ipmitool
ipmi_scan 手册页 - 上述工具的手册页
post_ipmi_scan.pl - 解析上述输出,给出一些加权结果
j_vendor.pl - 一些基本的厂商数据……谁使用哪些端口?
j_weights.pl - 上述工具的一些基本厂商权重

用法相当简单,虽然有点古怪。应以 root 身份运行。详细模式(-v)可输出大量信息。

# 标准运行:
   ./ipmi_scan.pl -A -v -O yes  192.168.0.0/24
# 快速
   ./ipmi_scan.pl -tcp -v 192.168.0.0/24
# 全套
   ./ipmi_scan.pl -A -v -O high 192.168.0.0/24
扫描将创建一对与目标名称对应的结果文件(斜杠会转换为下划线。)只需对它们运行 后处理器;通过反向数值排序可以让它们 以更有趣的顺序排列。任何超过 10 的分数我都会认为可疑, 而大于 20 则几乎可以肯定正在运行 IPMI。

在这种情况下,我 使用了简洁标志(-t)将输出削减到最低限度。

./post_ipmi_scan.pl -t 192.168.0.0_24|sort -rn
96.3 192.168.0.69
16.25 192.168.0.46
10.8 192.168.0.23
7.33 192.168.0.202
5.4 192.168.0.189
5.4 192.168.0.179
1.7 192.168.0.9
1.23 192.168.0.1
1.1 192.168.0.8
0.9 192.168.0.251
0.63 192.168.0.55
0.43 silent/192.168.0.250
0.2 pi.fish2.com/192.168.0.14
0.2 fierce.fish2.com/192.168.0.6
0.2 192.168.0.88
0.01 192.168.0.16

在上述结果中,前 3 个系统实际上正在运行 IPMI, 但只有 HP 告诉 Nmap UDP 端口 623 是开放的——我的 Dell 和 Supermicro 返回了更模糊的“open|filtered”响应, 这通常是误报,唉。也许更好的做法 是直接接受现实,与扫描器并行执行 IPMI ping (或者编写一个 NSE 在 Nmap 中正确执行。)

审计

这里有几个小型 Python 程序——使用 FreeIPMI 工具——(a)获取服务器的 基本 IPMI/BMC 配置,(b)对结果进行一个小型安全检查。

因为我……嗯,其实也没什么好理由。一个用 python3 写的,另一个用 python2。我猜我是在测试你的准备程度。这些程序注释得相当详细,尤其是 ipmifreely.py,所以查看它了解更多细节。需要 simplejson 和 ConfigParser,可能还需要一些其他的。

你必须安装 FreeIPMI,截至本文撰写时,这会让 Mac 和 Windows 无法从服务器获取酷炫的 JSON 文件。而且你确实、确实应该使用较新的版本。别说我没警告过你。但生活还得继续。

数据采集通过一个 python 程序(I-check.py)完成,该程序需要有效凭据才能获取数据。它将结果转换为 JSON,然后可由审计工具(ipmifreely.py)进行检查。"IPMI-policy.ini" 中有一个示例策略,我在其中放入了一些用于测试的值。

下载工具