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

103 lines
6.7 KiB
Markdown
Raw Normal View History

# 554,8554 - Pentesting RTSP
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Support HackTricks</summary>
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
{% endhint %}
2023-06-05 18:33:24 +00:00
## Información Básica
De [wikipedia](https://en.wikipedia.org/wiki/Real\_Time\_Streaming\_Protocol):
2023-06-05 18:33:24 +00:00
> 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.
2023-06-05 18:33:24 +00:00
**Puertos predeterminados:** 554,8554
```
PORT STATE SERVICE
554/tcp open rtsp
```
## Detalles Clave
2023-06-05 18:33:24 +00:00
**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í:
2023-06-05 18:33:24 +00:00
[RTSP RFC2326](https://tools.ietf.org/html/rfc2326)
2023-06-05 18:33:24 +00:00
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:
2023-06-05 18:33:24 +00:00
`DESCRIBE rtsp://<ip>:<port> RTSP/1.0\r\nCSeq: 2\r`
2023-06-05 18:33:24 +00:00
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**.
2023-06-05 18:33:24 +00:00
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:
2023-06-05 18:33:24 +00:00
`DESCRIBE rtsp://<ip>:<port> RTSP/1.0\r\nCSeq: 2\r\nAuthorization: Basic YWRtaW46MTIzNA==\r`
2023-06-05 18:33:24 +00:00
Este ejemplo utiliza "admin" y "1234" como credenciales. Aquí hay un **script de Python** para enviar tal solicitud:
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)
```
**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.
2023-06-05 18:33:24 +00:00
## 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.
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)
2023-06-05 18:33:24 +00:00
### **Otros programas útiles**
Para hacer fuerza bruta: [https://github.com/Tek-Security-Group/rtsp\_authgrinder](https://github.com/Tek-Security-Group/rtsp\_authgrinder)
2023-06-05 18:33:24 +00:00
[**Cameradar**](https://github.com/Ullaakut/cameradar)
2023-06-05 18:33:24 +00:00
* 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
2023-06-05 18:33:24 +00:00
## Referencias
* [https://en.wikipedia.org/wiki/Real\_Time\_Streaming\_Protocol](https://en.wikipedia.org/wiki/Real\_Time\_Streaming\_Protocol)
* [http://badguyfu.net/rtsp-brute-forcing-for-fun-and-naked-pictures/](http://badguyfu.net/rtsp-brute-forcing-for-fun-and-naked-pictures/)
2023-06-05 18:33:24 +00:00
* [https://github.com/Ullaakut/cameradar](https://github.com/Ullaakut/cameradar)
{% hint style="success" %}
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
2023-06-05 18:33:24 +00:00
<details>
<summary>Apoya a HackTricks</summary>
2023-06-05 18:33:24 +00:00
* Revisa los [**planes de suscripción**](https://github.com/sponsors/carlospolop)!
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Comparte trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github.
2023-06-05 18:33:24 +00:00
</details>
{% endhint %}