hacktricks/network-services-pentesting/554-8554-pentesting-rtsp.md
2023-06-06 18:56:34 +00:00

7.5 KiB

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 é usado para estabelecer e controlar sessões de mídia entre pontos finais. Os clientes dos servidores de mídia emitem comandos no estilo VHS, como reproduzir, gravar e pausar, 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 de dados de streaming em si não é uma tarefa do RTSP. A maioria dos servidores RTSP usa o Protocolo de Transporte em Tempo Real (RTP) em conjunto com o Protocolo de Controle em Tempo Real (RTCP) para a entrega de fluxo de mídia. No entanto, alguns fornecedores implementam protocolos de transporte proprietários. O software do servidor RTSP da RealNetworks, por exemplo, também usava o Real Data Transport (RDT) proprietário da RealNetworks.

De wikipedia.

Portas padrão: 554,8554

PORT    STATE SERVICE
554/tcp open  rtsp

Informação Detalhada

Em primeiro lugar, o RTSP é um protocolo semelhante ao HTTP. Ele tem uma estrutura diferente e comandos de controle, mas é textual em seu formato e, uma vez que você aprende os conceitos básicos dos comandos e como eles interagem, é bastante fácil de usar. A especificação para o RTSP é bastante direta. Aqui está um link para ela:

RTSP - RFC2326

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

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

Nota: o " \r\n" adicional é 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 soquete bruto. Assim como o HTTP, uma resposta bem-sucedida indicando acesso não autenticado estará disponível e conterá um "200 OK". Neste caso, com DESCRIBE, ele também conterá todos os parâmetros operacionais da transmissão de vídeo.

Se o dispositivo exigir autenticação, a resposta de volta conterá "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 de digestão 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 de Digest são muito importantes se você for fazer autenticação de Digest, então não as ignore.

A autenticação básica é o caminho a percorrer, esperançosamente a resposta recebida indica que ela está disponível. Caso contrário, existem três métodos diferentes para montar um elemento de autenticação de Digest, então Digest pode se tornar problemático, especialmente às cegas (não autenticado). O restante deste artigo se concentrará na autenticação básica. Eu posso escrever um artigo de acompanhamento mais tarde, uma vez que eu decifrar o segredo para fazer autenticação de Digest às cegas.

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 ficaria assim:

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

Novamente, observe que a solicitação é encerrada com o duplo " \r\n".

O valor YWRtaW46MTIzNA== é o nome de usuário codificado em base 64 e a senha concatenada com ":". Neste caso, usei "admin" / "1234". Alguns scripts simples em Python para experimentar isso parecem:

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)

Voila! Você tem acesso.

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

Enumeração

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

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

Força Bruta

Outros programas úteis

Para força bruta: 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.)
  • Inicie ataques de dicionário automatizados para obter a rota do fluxo (por exemplo, /live.sdp)
  • Inicie ataques de dicionário automatizados para obter o nome de usuário e senha das câmeras
  • Gere miniaturas para verificar se os fluxos são válidos e ter uma visualização rápida do 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 pode obter
  • https://github.com/Ullaakut/cameradar
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥