554,8554 - Pentesting RTSP

Reading time: 5 minutes

tip

Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE) Apprenez et pratiquez le hacking Azure : HackTricks Training Azure Red Team Expert (AzRTE)

Soutenir HackTricks

Informations de base

Extrait de wikipedia:

Le Real Time Streaming Protocol (RTSP) est un protocole de contrôle réseau conçu pour être utilisé dans des systèmes de divertissement et de communication afin de contrôler des serveurs de médias en streaming. Le protocole est utilisé pour établir et contrôler des sessions médias entre points de terminaison. Les clients des serveurs médias envoient des commandes de style VHS, telles que play, record and pause, pour faciliter le contrôle en temps réel du streaming des médias depuis le serveur vers un client (vidéo à la demande) ou depuis un client vers le serveur (enregistrement vocal).

La transmission des données en streaming elle-même n'est pas une tâche de RTSP. La plupart des serveurs RTSP utilisent le Real-time Transport Protocol (RTP) en conjonction avec le Real-time Control Protocol (RTCP) pour la livraison des flux médias. Cependant, certains fournisseurs implémentent des protocoles de transport propriétaires. Le logiciel serveur RTSP de RealNetworks, par exemple, utilisait également le Real Data Transport (RDT) propriétaire de RealNetworks.

Ports par défaut: 554,8554

PORT    STATE SERVICE
554/tcp open  rtsp

Détails clés

RTSP est similaire à HTTP mais conçu spécifiquement pour le streaming média. Il est défini dans une spécification simple que vous pouvez consulter ici:

RTSP – RFC2326

Les appareils peuvent autoriser un accès non authentifié ou authentifié. Pour vérifier, on envoie une requête "DESCRIBE". Un exemple basique est montré ci‑dessous:

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

N'oubliez pas : le format correct inclut un double "\r\n" pour une réponse cohérente. Une réponse "200 OK" indique un accès non authentifié, tandis que "401 Unauthorized" signale la nécessité d'une authentification, révélant si une Basic ou Digest authentication est requise.

Pour la Basic authentication, encodez le nom d'utilisateur et le mot de passe en base64 et incluez-les dans la requête ainsi:

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

Cet exemple utilise "admin" et "1234" comme identifiants. Voici un script Python pour envoyer une telle requête:

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 authentication est plus simple et préférable. Digest authentication nécessite une gestion attentive des détails d'authentification fournis dans la réponse "401 Unauthorized".

Cet aperçu simplifie le processus d'accès aux flux RTSP, en se concentrant sur Basic authentication pour sa simplicité et sa praticité lors des premières tentatives.

Énumération

Récupérons des informations sur les méthodes valides et les URLs supportées, et essayons de brute-force l'accès (si nécessaire) pour obtenir le contenu.

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

Visualiser le flux RTSP avec ffplay

Une fois que vous avez découvert un chemin RTSP valide (p. ex., /mpeg4, /live.sdp) et confirmé l'accès (sans authentification ou avec identifiants), vous pouvez utiliser ffplay pour lire le flux :

bash
ffplay -rtsp_transport tcp rtsp://<IP>/mpeg4 -x 2560 -y 1440
  • -rtsp_transport tcp: Utilisez TCP au lieu de UDP pour un streaming plus fiable
  • -x, -y: Options facultatives pour contrôler la résolution vidéo
  • Remplacez <IP> et le chemin si nécessaire

Brute Force

Autres programmes utiles

Pour bruteforce: https://github.com/Tek-Security-Group/rtsp_authgrinder

Cameradar

  • Détecte les hôtes RTSP ouverts sur n'importe quelle cible accessible
  • Récupère leurs informations publiques (hostname, port, camera model, etc.)
  • Lance des automated dictionary attacks pour obtenir leur stream route (par exemple /live.sdp)
  • Lance des automated dictionary attacks pour obtenir le username et le password des caméras
  • Génère des thumbnails à partir de celles-ci pour vérifier si les streams sont valides et avoir un aperçu rapide de leur contenu
  • Tente de créer un pipeline Gstreamer pour vérifier s'ils sont correctement encodés
  • Affiche un résumé de toutes les informations que Cameradar a pu obtenir

Voir aussi

32100 Udp - Pentesting Pppp Cs2 P2p Cameras

Références

tip

Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE) Apprenez et pratiquez le hacking Azure : HackTricks Training Azure Red Team Expert (AzRTE)

Soutenir HackTricks