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
- Confira os planos de assinatura!
 - Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter 🐦 @hacktricks_live.
 - Compartilhe truques de hacking enviando PRs para o HackTricks e HackTricks Cloud repositórios do github.
 
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:
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:
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.
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:
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
- 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
- https://en.wikipedia.org/wiki/Real_Time_Streaming_Protocol
 - http://badguyfu.net/rtsp-brute-forcing-for-fun-and-naked-pictures/
 - https://github.com/Ullaakut/cameradar
 
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
- Confira os planos de assinatura!
 - Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter 🐦 @hacktricks_live.
 - Compartilhe truques de hacking enviando PRs para o HackTricks e HackTricks Cloud repositórios do github.
 
HackTricks