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

8.1 KiB
Raw Blame History

554,8554 - Pentesting RTSP

Aprenda hacking no AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!

Outras formas de apoiar o HackTricks:

Informações Básicas

O 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 de streaming. O protocolo é utilizado para estabelecer e controlar sessões de mídia entre pontos finais. Clientes de servidores de mídia emitem comandos ao estilo VHS, como play, record e pause, para facilitar o controle em tempo real do streaming de mídia do servidor para um cliente (Video On Demand) ou de um cliente para o servidor (Gravação de Voz).

A transmissão de dados de streaming em si não é uma tarefa 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 de fluxo de mídia. No entanto, alguns fornecedores implementam protocolos de transporte proprietários. O software de servidor RTSP da RealNetworks, por exemplo, também usava o transporte de dados proprietário da RealNetworks (RDT).

De wikipedia.

Portas padrão: 554,8554

PORT    STATE SERVICE
554/tcp open  rtsp

Informações Detalhadas

Primeiramente, RTSP é um protocolo semelhante ao HTTP. Possui uma estrutura diferente e comandos de controle, mas é textual em seu formato e, uma vez que você aprenda o básico dos comandos e como eles interagem, é bastante fácil de usar. A especificação para RTSP é bem direta. Aqui está um link para ela:

RTSP RFC2326

O RTSP pode ser acessado sem autenticação (comum em dispositivos prontos para uso) ou com autenticação. O acesso autenticado espelha o HTTP, no sentido de que você tem autenticação Básica e Digest, ambas quase idênticas ao HTTP. Para descobrir se seu dispositivo está autenticado ou não, simplesmente envie uma solicitação “DESCRIBE”. Uma solicitação DESCRIBE simples se parece com:

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

Nota: o adicional “\r\n” é necessário para uma resposta confiável. Alguns sistemas aceitarão o único “\r\n”, mas a maioria não.

Isso pode ser enviado por um socket bruto. Assim como no HTTP, uma resposta bem-sucedida indicando que o acesso não autenticado está disponível conterá um “200 OK”. Neste caso, com DESCRIBE, também conterá todos os parâmetros operacionais do feed de vídeo.

Se o dispositivo requer autenticação, a resposta será “401 Não Autorizado”. A resposta também indicará quais mecanismos de autenticação estão disponíveis. Se a autenticação Básica estiver disponível, a string de resposta conterá uma linha de informação que tem “WWW-Authenticate: Basic”. O restante das informações fornecidas com a autenticação Básica é em grande parte irrelevante para realizar a autenticação básica.

Se a autenticação Digest for necessária, então a resposta “401 Não Autorizado” terá uma linha de informação contendo “WWW-Authenticate: Digest”. As informações com a especificação Digest SÃO muito importantes se você for fazer a autenticação Digest, então não as ignore.

A autenticação Básica é o caminho a seguir, esperançosamente a resposta recebida indica que ela está disponível. Se não, existem três métodos diferentes para montar um elemento de autenticação Digest, então Digest pode se tornar problemático, especialmente cego (não autenticado). O restante deste artigo se aterá à autenticação Básica. Eu posso escrever um artigo de acompanhamento mais tarde, uma vez que eu decifre o segredo para fazer a autenticação Digest cega.

Para formular um elemento de autenticação Básica, basta codificar em base 64 <username> “:” <password> e adicioná-lo à solicitação. Então, uma nova solicitação se pareceria com:

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

Novamente, note que a solicitação é terminada com o duplo “\r\n”.

O valor YWRtaW46MTIzNA== é o nome de usuário e senha codificados em base 64 concatenados com “:”. Neste caso, usei “admin”/”1234”. Alguns scripts simples em python para testar isso se parecem com:

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)

Eis que você tem acesso.

De: http://badguyfu.net/rtsp-brute-forcing-for-fun-and-naked-pictures/

Enumeração

Vamos obter informações sobre métodos válidos e URLs suportados e tentar forçar a entrada (se necessário) para acessar o conteúdo.

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

Brute Force

Outros programas úteis

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

Cameradar

Cameradar permite que você:

  • Detecte hosts RTSP abertos em qualquer alvo acessível
  • Obtenha suas informações públicas (nome do host, porta, modelo da câmera, etc.)
  • Execute ataques automatizados de dicionário para obter a rota do stream (por exemplo, /live.sdp)
  • Execute ataques automatizados de dicionário para obter o nome de usuário e senha das câmeras
  • Gere miniaturas delas para verificar se os streams são válidos e para ter uma pré-visualização rápida do seu conteúdo
  • Tente criar um pipeline Gstreamer para verificar se eles estão codificados corretamente
  • Imprima um resumo de todas as informações que o Cameradar conseguiu obter
  • https://github.com/Ullaakut/cameradar
Aprenda AWS hacking do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!

Outras formas de apoiar o HackTricks: