hacktricks/network-services-pentesting/554-8554-pentesting-rtsp.md

8.2 KiB
Raw Blame History

554,8554 - Pentesting RTSP

Aprende hacking en AWS de cero a héroe con htARTE (HackTricks AWS Red Team Expert)!

Otras formas de apoyar a HackTricks:

Información Básica

El Real Time Streaming Protocol (RTSP) es un protocolo de control de red diseñado para su uso en sistemas de entretenimiento y comunicaciones para controlar servidores de medios de transmisión. El protocolo se utiliza para establecer y controlar sesiones de medios entre puntos finales. Los clientes de servidores de medios emiten comandos al estilo VHS, como play, record y pause, 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í misma no es una tarea de RTSP. La mayoría de los servidores RTSP utilizan el Real-time Transport Protocol (RTP) en conjunto con el Real-time Control Protocol (RTCP) para la entrega de la transmisión de medios. Sin embargo, algunos proveedores implementan protocolos de transporte propietarios. Por ejemplo, el software del servidor RTSP de RealNetworks también utilizaba el Real Data Transport (RDT) propietario de RealNetworks.

De wikipedia.

Puertos predeterminados: 554,8554

PORT    STATE SERVICE
554/tcp open  rtsp

Información Detallada

En primer lugar, RTSP es un protocolo similar a HTTP. Tiene una estructura diferente y comandos de control, pero es textual en su formato y, una vez que aprendes los conceptos básicos de los comandos y cómo interactúan, es bastante fácil de usar. La especificación para RTSP es bastante clara. Aquí hay un enlace a ella:

RTSP RFC2326

RTSP se puede acceder sin autenticación (común en dispositivos de venta al público) o con autenticación. El acceso autenticado es similar a HTTP en que tienes autenticación Básica y Digest, ambas casi idénticas a HTTP. Para averiguar si tu dispositivo está autenticado o no, simplemente envía una solicitud "DESCRIBE". Una solicitud DESCRIBE simple se ve así:

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

Nota: el "\r\n" adicional es necesario para una respuesta confiable. Algunos sistemas aceptarán el único "\r\n", pero la mayoría no.

Esto se puede enviar a través de un socket crudo. Al igual que HTTP, una respuesta exitosa que indica que el acceso sin autenticación está disponible contendrá un "200 OK". En este caso con DESCRIBE, también contendrá todos los parámetros operativos de la transmisión de video.

Si el dispositivo requiere autenticación, la respuesta será "401 No autorizado". La respuesta también indicará qué mecanismos de autenticación están disponibles. Si la autenticación Básica está disponible, la cadena de respuesta contendrá una línea de información que tiene "WWW-Authenticate: Basic". El resto de la información proporcionada con la autenticación Básica es en gran parte irrelevante para realizar la autenticación básica.

Si se requiere autenticación Digest, entonces la respuesta "401 No autorizado" tendrá una línea de información que contiene "WWW-Authenticate: Digest". La información con la especificación Digest ES muy importante si vas a realizar la autenticación Digest, así que no la ignores.

La autenticación Básica es el camino a seguir, con suerte la respuesta recibida indicará que está disponible. Si no, hay tres métodos diferentes para ensamblar un elemento de autenticación Digest, por lo que Digest puede volverse problemático, especialmente a ciegas (sin autenticación). El resto de este artículo se centrará en la autenticación Básica. Puede que escriba un artículo de seguimiento más tarde una vez que descifre la salsa secreta para hacer la autenticación Digest a ciegas.

Para formular un elemento de autenticación Básica, simplemente hay que codificar en base 64 <username> ":" <password> y añadirlo a la solicitud. Así que una nueva solicitud se vería así:

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

Nuevamente, nota que la solicitud termina con el doble "\r\n".

El valor YWRtaW46MTIzNA== es el nombre de usuario y la contraseña codificados en base 64 concatenados con ":". En este caso he usado "admin"/"1234". Algunos scripts simples de python para probar esto se ven así:

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)

He aquí tu acceso.

De: http://badguyfu.net/rtsp-brute-forcing-for-fun-and-naked-pictures/

Enumeración

Obtengamos información sobre qué métodos válidos y URLs son compatibles e intentemos forzar bruscamente el acceso (si es necesario) para acceder al contenido.

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

Fuerza Bruta

Otros programas útiles

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

Cameradar

Cameradar te permite:

  • 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 ellas para verificar si las transmisiones son válidas y para tener una vista previa rápida de su contenido
  • Intentar crear una tubería de Gstreamer para verificar si están codificadas correctamente
  • Imprimir un resumen de toda la información que Cameradar pudo obtener
  • https://github.com/Ullaakut/cameradar
Aprende hacking en AWS de cero a héroe con htARTE (HackTricks AWS Red Team Expert)!

Otras formas de apoyar a HackTricks: