Coleta informações de perfis públicos para engenharia social.

Contexto

Metadados são "dados sobre os dados". Quando alguém tira uma foto ou cria um PDF, o arquivo armazena informações invisíveis que podem ser fatais para a segurança de uma empresa:

  • Coordenadas GPS: Podem revelar a localização exata de um escritório remoto ou da casa de um executivo.
  • Nomes de Usuários: PDFs costumam salvar o nome do autor e o caminho do diretório (ex: C:\Users\gabriel.pontes\Documents\projeto_secreto.docx), revelando o padrão de nomes de usuário da rede.
  • Software e Versões: Indica se a empresa usa versões desatualizadas do Office ou Adobe, que possuem vulnerabilidades conhecidas.

Possibilidades de Implementação

  • Imagens (Pillow): Focada em extrair dados EXIF de JPEGs e PNGs.
  • PDFs (PyPDF2): Extrai o histórico de criação, software utilizado e autor do documento.
  • Recursividade: Criar um script que varre uma pasta inteira (ou um site) e extrai metadados de todos os arquivos encontrados automaticamente.

Código

Para esta lição, utilizaremos a biblioteca Pillow (PIL) para imagens. Ela é a biblioteca padrão e mais robusta para manipulação de imagens em Python.

Requisito: pip install Pillow

from PIL import Image
from PIL.ExifTags import TAGS

def extract_image_metadata(image_path):
    print(f"{'='*60}")
    print(f"   30 LESSONS IN PYTHON FOR PENTEST - LIÇÃO 06")
    print(f"           FERRAMENTA: METADATA EXTRACTOR")
    print(f"{'='*60}")
    print(f"[*] Analisando arquivo: {image_path}\n")

    try:
        # Abre a imagem
        img = Image.open(image_path)

        # Extrai os dados EXIF
        exif_data = img._getexif()

        if not exif_data:
            print("[-] Nenhum metadado EXIF encontrado neste arquivo.")
            return

        print(f"[+] Metadados encontrados:\n")

        for tag_id, value in exif_data.items():
            # Converte o ID numérico da tag para um nome legível (ex: GPSInfo, Software)
            tag_name = TAGS.get(tag_id, tag_id)
            print(f"    {tag_name:20}: {value}")

    except Exception as e:
        print(f"[!] Erro ao processar a imagem: {e}")

if __name__ == "__main__":
    # Para testar, use o caminho de uma foto real tirada por um celular
    # extract_image_metadata("foto_teste.jpg")
    print("[!] Por favor, forneça o caminho de uma imagem (JPG) com dados EXIF para o teste.")