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
pycryptodomepara 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 2em vez deDefault). Um script robusto deve varrer todas as pastas dentro deUser Data. - Cookies e Senhas: Para extrair cookies, o processo é similar (arquivo
Network/Cookies), mas exige o uso da chave de criptografia armazenada no arquivoLocal Statee descriptografada viawin32crypt.