Extraindo senhas salvas no navegador
Nessa postagem mostro como o navegador salva uma credencial e como podemos extraí-las

Introdução
Você já se perguntou como funciona o autocomplete dos navegadores? Bom, ele deve salvar as suas credenciais em um local seguro... certo?
A ideia desse post é mostrar como todo esse processo funciona, mostrar como é mais simples do que você imagina extrair as senhas salvas pelo navegador e, por fim, dar uma ideia de uma possível utilização dessa técnica em um teste real
Então, vamos começar pelo começo
Como a criptografia AES funciona
O AES é um algoritmo de criptografia que utiliza a chave simétrica, ou seja, o algoritmo usa a mesma chave para criptografia e descriptografia
Basicamente o AES utiliza uma chave criptográfica (encrypted key) e faz algumas operações matemáticas para encriptar a senha
Para melhorar a segurança é possível adicionar um vetor de inicialização, que normalmente é um valor aleatório, o que torna mais difícil realizar a quebra da criptografia, uma vez que você precisa de duas informações para realizar a descriptografia (chave criptográfica e o vetor de inicialização)

Como o navegador salva as senhas
Para demonstração, vou utilizar como exemplo o Brave (que é o navegador que eu uso), como ele é baseado no Chrome, tudo que vou mostrar aqui também pode ser utilizado com o Google Chrome, somente sendo necessário alterar o caminho dos diretórios
Após realizar o processo de criptografia que foi visto acima, essas informações são salvas em dois arquivos diferentes
A chave criptográfica (encrypted key) é salva dentro do arquivo "Local State" que pode ser encontrado seguindo esse caminho:
Abrindo o arquivo e lendo suas informações, é possível encontrar a informação que precisamos

Após o processo de criptografia, o resultado final é concatenado com o vetor de inicialização e tudo isso é salvo como sendo a senha criptografada e essa informação é salva dentro de um SQLite3
Esse arquivo tem o nome "Login Data" e pode ser encontrado seguindo o seguinte caminho:

Agora, já temos todas as informações necessárias para extrair as senhas que estão salvas no navegador
Criando um script para extrair as credenciais
Como já sabemos o caminho dos arquivos e como o AES funciona, basta agora automatizar todo esse processo. Para isso eu vou criar um script em Python
Basicamente o que o script faz é buscar esses arquivos e extrair as informações que precisamos (encrypted_key, vetor de inicialização e a senha criptografada), após isso ele realiza o decode da senha e printa as informações
Executando o script, é possível extrair as minhas credenciais salvas no navegador, nesse caso o meu acesso ao site do duolingo

Exemplo prático de uso
Para mostrar um possível uso prático, vamos imaginar um cenário onde o atacante deseja extrair as credenciais da vítima e enviar essas informações para um C2
Nesse caso é necessário criar 2 script: um client e um server
Client
Nesse exemplo, eu vou utilizar o mesmo script python usado anteriormente, somente vou adicionar algumas funções a mais, como por exemplo, uma função para identificar os navegadores presentes na máquina da vitima e a requisição que vai enviar as informações encontradas para o servidor
O script final ficou assim:
Talvez você tenha reparado que a requisição feita para o servidor está usando um user agent um pouco estranho, mas isso vai fazer sentido mais pra frente
Então, a partir desse código gerei um executável que será enviado para a vítima

Server
Como servidor, utilizei um código em PHP extremamente simples. Primeiro ele verifica o user agent, se não for o esperado ele redireciona para uma página que não existe, isso serve para evitar que alguém que encontrou o endereço acesse o site e veja alguma informação, se passar desse primeiro filtro, recebe o valor via parâmetro get, então salva em um arquivo

Testando acessar o endereço via navegador, o filtro inicial funciona, e o usuário é redirecionado para 404.php

Executando o ataque
Com tudo pronto, o executável foi enviado para a máquina da vítima e então, o programa foi executado. Como pode ser visto abaixo, o prompt de comando abre e fecha rapidão (pode confiar rs) e nada mais acontece

Para o cliente, a impressão é de que o programa não funcionou, porém no servidor um novo arquivo é criado

Acessando o arquivo encontramos a senha que estava salva no navegador em texto claro

Os códigos usados nesse exemplo são muito simples e tem o intuito somente de trazer uma ideia, não utilize em um ambiente real
Conclusão
Como mencionei no começo, a minha ideia aqui era mostrar que ter acesso as credenciais salvas no navegador não é algo muito difícil, e por isso não é seguro, então pare de salvar suas senhas lá
O que eu mostrei aqui foi algo muito simples, porém, tente pegar a ideia da coisa toda e criar algumas aplicações mais complexas a partir dai, isso pode servir de insight durante um teste
Last updated