Coleta o histórico e cookies de navegadores como Chrome/Firefox.

Contexto

O navegador é o "cofre" da vida digital de um usuário. Em um cenário de Pentest autorizado ou resposta a incidentes, extrair esses dados permite:

  • Identificar Hábitos e Alvos: O histórico revela portais internos, sistemas de gerenciamento e serviços de nuvem utilizados pela empresa.
  • Captura de Sessões: Cookies podem conter tokens de sessão ativos, permitindo o Session Hijacking (acesso a contas sem precisar de senha).
  • Forense Digital: Reconstruir a linha do tempo de uma invasão ou o vazamento de informações por um funcionário.

Possibilidades de Implementação

  • Manipulação de SQLite: A maioria dos navegadores baseados em Chromium (Chrome, Edge, Brave) e o Firefox salvam o histórico em bancos de dados SQLite. O Python pode ler esses arquivos nativamente.
  • Descriptografia de Dados: Navegadores modernos criptografam cookies e senhas usando chaves do sistema (como o DPAPI no Windows). A extração exige o uso de bibliotecas como pycryptodome para descriptografar os dados usando a chave mestra do usuário.
  • Cópia em Tempo Real: Como o navegador "tranca" o arquivo enquanto está aberto, o script deve primeiro criar uma cópia temporária do banco de dados para realizar a leitura.

Código

Este módulo foca na extração do histórico do Google Chrome no ambiente Windows, utilizando a biblioteca nativa sqlite3.

import os
import sqlite3
import shutil
from datetime import datetime, timedelta

def chrome_date_format(timestamp):
    """
    Converte o formato de data do Chrome (microsegundos desde 1601) para legível.
    """
    return datetime(1601, 1, 1) + timedelta(microseconds=timestamp)

def extract_chrome_history():
    print("[*] Localizando arquivo de histórico do Chrome...")

    # Caminho padrão no Windows
    history_path = os.path.expanduser('~') + r"\AppData\Local\Google\Chrome\User Data\Default\History"

    if not os.path.exists(history_path):
        print("[!] Arquivo de histórico não encontrado.")
        return

    # O Chrome trava o arquivo se estiver aberto, então criamos uma cópia
    temp_history = "history_temp.db"
    shutil.copyfile(history_path, temp_history)

    try:
        conn = sqlite3.connect(temp_history)
        cursor = conn.cursor()

        # Query para pegar URL, Título e Última Visita
        cursor.execute("SELECT url, title, last_visit_time FROM urls ORDER BY last_visit_time DESC LIMIT 20")

        print(f"\n{'ÚLTIMA VISITA':20} | {'TÍTULO':30} | {'URL'}")
        print("-" * 100)

        for url, title, visit_time in cursor.fetchall():
            readable_time = chrome_date_format(visit_time).strftime("%d/%m/%Y %H:%M")
            print(f"{readable_time:20} | {title[:30]:30} | {url}")

        conn.close()
    except Exception as e:
        print(f"[!] Erro ao ler o banco de dados: {e}")
    finally:
        # Remove a cópia temporária
        if os.path.exists(temp_history):
            os.remove(temp_history)

def main():
    print("=" * 60)
    print("Módulo: Browser History Extractor | Projeto: 30 Lessons")
    print("=" * 60)

    if os.name != 'nt':
        print("[!] Este exemplo foi configurado para caminhos do Windows.")
        return

    extract_chrome_history()
    print("\n" + "=" * 60)

if __name__ == "__main__":
    main()

Observações

  • Privacidade e Ética: Este tipo de script lida com dados altamente pessoais. Em um Pentest, o foco deve ser apenas em URLs que comprovem o acesso a sistemas corporativos sensíveis.
  • Perfis Múltiplos: O Chrome pode ter perfis diferentes (Profile 1, Profile 2 em vez de Default). Um script robusto deve varrer todas as pastas dentro de User Data.
  • Cookies e Senhas: Para extrair cookies, o processo é similar (arquivo Network/Cookies), mas exige o uso da chave de criptografia armazenada no arquivo Local State e descriptografada via win32crypt.