554,8554 - Pentesting RTSP

Support HackTricks

Información Básica

De wikipedia:

El Protocolo de Transmisión en Tiempo Real (RTSP) es un protocolo de control de red diseñado para su uso en sistemas de entretenimiento y comunicaciones para controlar servidores de medios en streaming. El protocolo se utiliza para establecer y controlar sesiones de medios entre puntos finales. Los clientes de los servidores de medios emiten comandos al estilo de VHS, como reproducir, grabar y pausar, para facilitar el control en tiempo real de la transmisión de medios desde el servidor a un cliente (Video On Demand) o desde un cliente al servidor (Grabación de Voz).

La transmisión de datos en streaming en sí no es una tarea de RTSP. La mayoría de los servidores RTSP utilizan el Protocolo de Transporte en Tiempo Real (RTP) junto con el Protocolo de Control en Tiempo Real (RTCP) para la entrega de flujos de medios. Sin embargo, algunos proveedores implementan protocolos de transporte propietarios. El software del servidor RTSP de RealNetworks, por ejemplo, también utilizó el Transporte de Datos Real (RDT) propietario de RealNetworks.

Puertos predeterminados: 554,8554

PORT    STATE SERVICE
554/tcp open  rtsp

Detalles Clave

RTSP es similar a HTTP pero diseñado específicamente para la transmisión de medios. Está definido en una especificación sencilla que se puede encontrar aquí:

RTSP – RFC2326

Los dispositivos pueden permitir acceso no autenticado o autenticado. Para verificar, se envía una solicitud "DESCRIBE". Un ejemplo básico se muestra a continuación:

DESCRIBE rtsp://<ip>:<port> RTSP/1.0\r\nCSeq: 2

Recuerda, el formato correcto incluye un doble "\r\n" para una respuesta consistente. Una respuesta "200 OK" indica acceso no autenticado, mientras que "401 Unauthorized" señala la necesidad de autenticación, revelando si se requiere autenticación Básica o Digest.

Para autenticación Básica, codificas el nombre de usuario y la contraseña en base64 e incluyes esto en la solicitud de la siguiente manera:

DESCRIBE rtsp://<ip>:<port> RTSP/1.0\r\nCSeq: 2\r\nAuthorization: Basic YWRtaW46MTIzNA==

Este ejemplo utiliza "admin" y "1234" como credenciales. Aquí hay un script de Python para enviar tal solicitud:

import socket
req = "DESCRIBE rtsp://<ip>:<port> RTSP/1.0\r\nCSeq: 2\r\nAuthorization: Basic YWRtaW46MTIzNA==\r\n\r\n"
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(("192.168.1.1", 554))
s.sendall(req)
data = s.recv(1024)
print(data)

La autenticación básica es más simple y preferida. La autenticación digest requiere un manejo cuidadoso de los detalles de autenticación proporcionados en la respuesta "401 No autorizado".

Esta visión general simplifica el proceso de acceso a flujos RTSP, centrándose en la autenticación básica por su simplicidad y practicidad en los intentos iniciales.

Enumeración

Obtenemos información sobre los métodos válidos y las URL que son compatibles y tratamos de forzar el acceso (si es necesario) para obtener acceso al contenido.

nmap -sV --script "rtsp-*" -p <PORT> <IP>

Otros programas útiles

Para hacer fuerza bruta: https://github.com/Tek-Security-Group/rtsp_authgrinder

Cameradar

  • Detectar hosts RTSP abiertos en cualquier objetivo accesible

  • Obtener su información pública (nombre de host, puerto, modelo de cámara, etc.)

  • Lanzar ataques de diccionario automatizados para obtener su ruta de transmisión (por ejemplo, /live.sdp)

  • Lanzar ataques de diccionario automatizados para obtener el nombre de usuario y la contraseña de las cámaras

  • Generar miniaturas de ellos para verificar si las transmisiones son válidas y tener una vista previa rápida de su contenido

  • Intentar crear un pipeline de Gstreamer para verificar si están correctamente codificados

  • Imprimir un resumen de toda la información que Cameradar pudo obtener

Referencias

Apoya a HackTricks

Last updated