Hackeando o WhatsApp com HTML

Neste blog apresentarei pesquisas que fiz junto com Eran Vaknin e Dikla Barda sobre WhatsApp.

Neste estudo, fomos capazes de assumir contas do WhatsApp usando a plataforma Web do WhatsApp. É importante notar que as versões web são uma cópia completa de tudo o que é feito no dispositivo móvel.

Usando nosso método de aquisição, foi possível obter acesso total à conta WhatsApp do alvo e, assim, acessar as informações pessoais do usuário:

  • Fotos e videos
  • conversas pessoais
  • Conversas em grupo
  • Enviando mensagens
  • E mais…

Vídeo de demonstração:


Technical part

WhatsApp Permite enviar documentos, fotos, vídeos e clipes de áudio. Começamos a pesquisa conduzindo uma investigação sobre o processo de upload dos documentos, diagnosticando o código e a lógica do sistema.

Foi assim que chegamos à linha 28667, que é exatamente antes de começarmos a realizar todas as verificações em um objeto que é responsável por gerenciar os tipos de documentos que o WhatsApp suporta upload.

W["default"].DOC_MIMES
O que parece assim.:

Portanto, se quisermos fazer o upload de um documento html, falharemos, porque esta lista não contém o tipo de documento text/html. Portanto, antes de inserir o código, iremos adicionar o tipo nós mesmos text/html Para um objeto usando-console:
W["default"].DOC_MIMES += ", text/html";
Assi, na verdade, conseguimos fazer o upload de um arquivo html para o sistema e, além disso, notamos que você também pode controlar o nome do arquivo através do parâmetro “n” como na imagem acima.

A próxima etapa é adicionar uma visualização previa ao nosso arquivo. Examinamos como o WhatsApp constrói a visualização previa em uma imagem padrão e salvamos os parâmetros necessários para que possamos adicioná-los à função encryptE2EMedia, de todos os parâmetros que adicionamos, o parâmetro mais importante é uma visualização que contém o conteúdo da imagem que queremos adicionar na codificação base64.
A imagem é salva em base64 no parâmetro preview
O resultado final após adicionar os parâmetros e o bypass mime_type. Conseguimos enviar uma mensagem parecida com esta:

Este é basicamente um documento html padrão camuflado, clicar no documento abrirá o documento sob o-domain:
web.whatsapp.com
O que parece assim.:

Observe que o documento é aberto na memória do navegador usando a API HTML5 FileReader e, como executamos nosso código no domínio principal do WhatsApp, que é web.whatsapp.com, podemos acessar todos os armazenamentos do navegador no mesmo-domain:

  • Cookies
  • LocalStorage
  • SessionStorage

Examinamos cada um dos armazenamentos e descobrimos que o ID da conta está em LocalStorage e para invadir a conta de outro usuário tudo o que temos a fazer é pegar todo o seu LocalStorage e enviá-lo para nosso servidor:

Você pode ver que nosso arquivo html puxa todo o armazenamento local do usuário e o envia para o servidor:

localStorage Ele contém o ID da conta e tudo o que nos resta fazer é carregá-lo em nossa conta e então iremos para a conta do alvo que clicou na imagem:

Outros artigos que você pode ter interesse: