554,8554 - Pentesting RTSP

Reading time: 5 minutes

tip

Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Aprenda e pratique Hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Supporte o HackTricks

Informações Básicas

Da wikipedia:

The Real Time Streaming Protocol (RTSP) é um protocolo de controle de rede projetado para uso em sistemas de entretenimento e comunicações para controlar servidores de mídia streaming. O protocolo é usado para estabelecer e controlar sessões de mídia entre pontos finais. Clientes de servidores de mídia emitem comandos no estilo VHS, como play, record e pause, para facilitar o controle em tempo real do streaming de mídia do servidor para um cliente (Vídeo sob Demanda) ou de um cliente para o servidor (Gravação de Voz).

A transmissão dos dados de streaming em si não é responsabilidade do RTSP. A maioria dos servidores RTSP usa o Real-time Transport Protocol (RTP) em conjunto com o Real-time Control Protocol (RTCP) para entrega do fluxo de mídia. Contudo, alguns fornecedores implementam protocolos de transporte proprietários. O software de servidor RTSP da RealNetworks, por exemplo, também utilizava o Real Data Transport (RDT) proprietário da RealNetworks.

Portas padrão: 554,8554

PORT    STATE SERVICE
554/tcp open  rtsp

Detalhes principais

RTSP é semelhante ao HTTP, mas projetado especificamente para streaming de mídia. Está definido em uma especificação direta que pode ser encontrada aqui:

RTSP – RFC2326

Dispositivos podem permitir acesso não autenticado ou autenticado. Para verificar, é enviada uma requisição "DESCRIBE". Um exemplo básico é mostrado abaixo:

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

Lembre-se: a formatação correta inclui um duplo "\r\n" para uma resposta consistente. Uma resposta "200 OK" indica acesso não autenticado, enquanto "401 Unauthorized" sinaliza a necessidade de autenticação, revelando se Basic ou Digest authentication é exigida.

Para Basic authentication, você codifica o nome de usuário e a senha em base64 e os inclui na requisição da seguinte forma:

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

Este exemplo usa "admin" e "1234" como credenciais. Abaixo está um script em Python para enviar tal requisição:

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 é mais simples e preferida. Digest authentication requer tratamento cuidadoso dos detalhes de autenticação fornecidos na resposta "401 Unauthorized".

Esta visão geral simplifica o processo de acesso a RTSP streams, focando em Basic authentication pela sua simplicidade e praticidade nas tentativas iniciais.

Enumeração

Vamos obter informações sobre quais métodos válidos e URLs são suportados e tentar brute-force o acesso (se necessário) para obter acesso ao conteúdo.

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

Visualizando o fluxo RTSP com ffplay

Depois de descobrir um caminho RTSP válido (por exemplo, /mpeg4, /live.sdp) e confirmar acesso (sem autenticação ou com credenciais), você pode usar ffplay para exibir o feed:

bash
ffplay -rtsp_transport tcp rtsp://<IP>/mpeg4 -x 2560 -y 1440
  • -rtsp_transport tcp: Use TCP em vez de UDP para transmissão mais confiável
  • -x, -y: Flags opcionais para controlar a resolução de vídeo
  • Substitua <IP> e o caminho conforme necessário

Brute Force

Outros programas úteis

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

Cameradar

  • Detecta hosts RTSP abertos em qualquer alvo acessível
  • Obtém suas informações públicas (hostname, porta, modelo da câmera, etc.)
  • Lança ataques automatizados por dicionário para obter a rota do stream (por exemplo /live.sdp)
  • Lança ataques automatizados por dicionário para obter o nome de usuário e a senha das câmeras
  • Gera miniaturas a partir delas para verificar se os streams são válidos e para ter uma pré-visualização rápida do conteúdo
  • Tenta criar uma pipeline Gstreamer para verificar se estão codificadas corretamente
  • Imprime um resumo de todas as informações que o Cameradar conseguiu obter

Veja também

32100 Udp - Pentesting Pppp Cs2 P2p Cameras

Referências

tip

Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Aprenda e pratique Hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Supporte o HackTricks