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

108 lines
8.2 KiB
Markdown
Raw Normal View History

# 554,8554 - Pentesting RTSP
<details>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a HackTricks:
* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF**, consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de Telegram**](https://t.me/peass) o **sigue** a **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de GitHub de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
2023-06-05 18:33:24 +00:00
## 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).
2023-06-05 18:33:24 +00:00
>
> 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.
2023-06-05 18:33:24 +00:00
De [wikipedia](https://en.wikipedia.org/wiki/Real\_Time\_Streaming\_Protocol).
**Puertos predeterminados:** 554,8554
```
PORT STATE SERVICE
554/tcp open rtsp
```
## Información Detallada
2023-06-05 18:33:24 +00:00
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:
2023-06-05 18:33:24 +00:00
[RTSP RFC2326](https://tools.ietf.org/html/rfc2326)
2023-06-05 18:33:24 +00:00
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í:
2023-06-05 18:33:24 +00:00
`DESCRIBE rtsp://<ip>:<port> RTSP/1.0\r\nCSeq: 2\r\n`
2023-06-05 18:33:24 +00:00
Nota: el "\r\n" adicional es necesario para una respuesta confiable. Algunos sistemas aceptarán el único "\r\n", pero la mayoría no.
2023-06-05 18:33:24 +00:00
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.
2023-06-05 18:33:24 +00:00
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.
2023-06-05 18:33:24 +00:00
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.
2023-06-05 18:33:24 +00:00
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.
2023-06-05 18:33:24 +00:00
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í:
2023-06-05 18:33:24 +00:00
`DESCRIBE rtsp://<ip>:<port> RTSP/1.0\r\nCSeq: 2\r\nAuthorization: Basic YWRtaW46MTIzNA==\r\n`
2023-06-05 18:33:24 +00:00
Nuevamente, nota que la solicitud termina con el doble "\r\n".
2023-06-05 18:33:24 +00:00
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í:
2023-06-05 18:33:24 +00:00
```python
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.
2023-06-05 18:33:24 +00:00
**De:** [**http://badguyfu.net/rtsp-brute-forcing-for-fun-and-naked-pictures/**](https://web.archive.org/web/20161020202643/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.
2023-06-05 18:33:24 +00:00
```bash
nmap -sV --script "rtsp-*" -p <PORT> <IP>
```
### [Fuerza Bruta](../generic-methodologies-and-resources/brute-force.md#rtsp)
### **Otros programas útiles**
Para hacer fuerza bruta: [https://github.com/Tek-Security-Group/rtsp\_authgrinder](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)
2023-06-05 18:33:24 +00:00
* 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
2023-06-05 18:33:24 +00:00
* Imprimir un resumen de toda la información que Cameradar pudo obtener
* [https://github.com/Ullaakut/cameradar](https://github.com/Ullaakut/cameradar)
<details>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a HackTricks:
2023-06-05 18:33:24 +00:00
* Si quieres ver a tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** revisa los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de github de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
2023-06-05 18:33:24 +00:00
</details>