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

102 lines
6.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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 %}
## Grundinformationen
Von [wikipedia](https://en.wikipedia.org/wiki/Real\_Time\_Streaming\_Protocol):
> Das **Real Time Streaming Protocol** (**RTSP**) ist ein Netzwerksteuerprotokoll, das für den Einsatz in Unterhaltungs- und Kommunikationssystemen zur Steuerung von Streaming-Medienservern entwickelt wurde. Das Protokoll wird verwendet, um Medien-Sitzungen zwischen Endpunkten einzurichten und zu steuern. Clients von Medienservern geben VHS-ähnliche Befehle wie Abspielen, Aufnehmen und Pausieren aus, um die Echtzeitsteuerung der Medien zu erleichtern, die vom Server zu einem Client (Video On Demand) oder von einem Client zum Server (Sprachaufnahme) gestreamt werden.
>
> Die Übertragung von Streaming-Daten selbst ist keine Aufgabe von RTSP. Die meisten RTSP-Server verwenden das Real-time Transport Protocol (RTP) in Verbindung mit dem Real-time Control Protocol (RTCP) zur Lieferung von Medienströmen. Einige Anbieter implementieren jedoch proprietäre Transportprotokolle. Die RTSP-Server-Software von RealNetworks verwendete beispielsweise auch das proprietäre Real Data Transport (RDT) von RealNetworks.
**Standardports:** 554,8554
```
PORT STATE SERVICE
554/tcp open rtsp
```
## Wichtige Details
**RTSP** ist ähnlich wie HTTP, wurde jedoch speziell für das Streaming von Medien entwickelt. Es ist in einer einfachen Spezifikation definiert, die hier zu finden ist:
[RTSP RFC2326](https://tools.ietf.org/html/rfc2326)
Geräte könnten **unauthentifizierten** oder **authentifizierten** Zugriff erlauben. Um dies zu überprüfen, wird eine "DESCRIBE"-Anfrage gesendet. Ein einfaches Beispiel ist unten gezeigt:
`DESCRIBE rtsp://<ip>:<port> RTSP/1.0\r\nCSeq: 2\r`
Denken Sie daran, dass die korrekte Formatierung ein doppeltes "\r\n" für eine konsistente Antwort umfasst. Eine "200 OK"-Antwort zeigt **unauthentifizierten Zugriff** an, während "401 Unauthorized" auf die Notwendigkeit einer Authentifizierung hinweist und offenbart, ob **Basic** oder **Digest-Authentifizierung** erforderlich ist.
Für **Basic-Authentifizierung** kodieren Sie den Benutzernamen und das Passwort in base64 und fügen es in die Anfrage ein, wie folgt:
`DESCRIBE rtsp://<ip>:<port> RTSP/1.0\r\nCSeq: 2\r\nAuthorization: Basic YWRtaW46MTIzNA==\r`
Dieses Beispiel verwendet "admin" und "1234" für die Anmeldeinformationen. Hier ist ein **Python-Skript**, um eine solche Anfrage zu senden:
```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)
```
**Basic-Authentifizierung** ist einfacher und bevorzugt. **Digest-Authentifizierung** erfordert eine sorgfältige Handhabung der Authentifizierungsdetails, die in der "401 Unauthorized"-Antwort bereitgestellt werden.
Diese Übersicht vereinfacht den Prozess des Zugriffs auf RTSP-Streams und konzentriert sich auf **Basic-Authentifizierung** aufgrund ihrer Einfachheit und Praktikabilität bei ersten Versuchen.
## Enumeration
Lass uns Informationen über gültige Methoden und unterstützte URLs sammeln und versuchen, den Zugriff (falls erforderlich) durch Brute-Force zu erlangen, um auf den Inhalt zuzugreifen.
```bash
nmap -sV --script "rtsp-*" -p <PORT> <IP>
```
### [Brute Force](../generic-methodologies-and-resources/brute-force.md#rtsp)
### **Andere nützliche Programme**
Um zu bruteforcen: [https://github.com/Tek-Security-Group/rtsp\_authgrinder](https://github.com/Tek-Security-Group/rtsp\_authgrinder)
[**Cameradar**](https://github.com/Ullaakut/cameradar)
* Offene RTSP-Hosts auf jedem zugänglichen Ziel erkennen
* Ihre öffentlichen Informationen abrufen (Hostname, Port, Kameramodell usw.)
* Automatisierte Wörterbuchangriffe starten, um ihre Stream-Route zu erhalten (zum Beispiel /live.sdp)
* Automatisierte Wörterbuchangriffe starten, um den Benutzernamen und das Passwort der Kameras zu erhalten
* Thumbnails von ihnen generieren, um zu überprüfen, ob die Streams gültig sind und um eine schnelle Vorschau ihres Inhalts zu haben
* Versuchen, eine Gstreamer-Pipeline zu erstellen, um zu überprüfen, ob sie richtig codiert sind
* Eine Zusammenfassung aller Informationen drucken, die Cameradar erhalten konnte
## Referenzen
* [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/)
* [https://github.com/Ullaakut/cameradar](https://github.com/Ullaakut/cameradar)
{% hint style="success" %}
Lernen & üben Sie 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">\
Lernen & üben Sie 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>HackTricks unterstützen</summary>
* Überprüfen Sie die [**Abonnementpläne**](https://github.com/sponsors/carlospolop)!
* **Treten Sie der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegram-Gruppe**](https://t.me/peass) bei oder **folgen** Sie uns auf **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Teilen Sie Hacking-Tricks, indem Sie PRs an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub-Repos senden.
</details>
{% endhint %}