Cria listas de senhas personalizadas baseadas em termos específicos do alvo.
Contexto
Senhas raramente são aleatórias. Usuários e empresas tendem a criar senhas baseadas em nomes próprios, anos de fundação, nomes de animais de estimação ou o nome da própria empresa seguido de um caractere especial.
O objetivo deste módulo é:
- Customização Extrema: Gerar milhares de combinações possíveis a partir de palavras-chave fornecidas pelo Pentester após a fase de Reconhecimento (Lições 01 a 06).
- Permutação: Aplicar padrões comuns de criação de senhas, como substituir "a" por "@", "s" por "$", ou adicionar o ano atual ao final da string.
- Eficiência: Criar uma lista focada que tem muito mais chances de sucesso em um ataque de força bruta do que uma lista genérica de 10 GB.
Possibilidades de Implementação
- Leet Speak: Transformar
gabrielemg4br13l. - Concatenação de Datas: Combinar termos com anos (
2024,2025,2026). - Iteração de Caracteres Especiais: Adicionar
!,@,#ou123ao final de cada palavra. - Capitalização: Gerar variações com a primeira letra maiúscula, todas maiúsculas ou alternadas.
Código
Este módulo utiliza a biblioteca nativa itertools para realizar permutações eficientes e lógicas de substituição de caracteres.
import itertools
def wordlist_generator(base_words, years, chars):
"""
Gera combinações de senhas baseadas em palavras-chave, anos e caracteres.
"""
print(f"[*] Gerando wordlist baseada em {len(base_words)} termos...")
# Dicionário simples de Leet Speak
leet_map = {'a': '4', 'e': '3', 'i': '1', 'o': '0', 's': '5', 't': '7'}
results = set()
for word in base_words:
# 1. Adiciona a palavra original, maiúscula e capitalizada
variations = [word, word.upper(), word.capitalize()]
# 2. Gera uma versão Leet Speak básica
leet_word = "".join([leet_map.get(c.lower(), c) for c in word])
variations.append(leet_word)
for v in variations:
results.add(v)
# 3. Combina com anos
for year in years:
results.add(f"{v}{year}")
results.add(f"{v}_{year}")
# 4. Combina com caracteres especiais
for char in chars:
results.add(f"{v}{char}")
results.add(f"{v}{year}{char}")
return sorted(list(results))
def main():
print("=" * 60)
print("Módulo: Wordlist Generator | Projeto: 30 Lessons in Python")
print("=" * 60)
# Dados coletados na fase de Reconhecimento (OSINT)
termos = ["Salvador", "Bahia", "Hunter", "Mystique"]
anos = ["2025", "2026"]
especiais = ["!", "@", "#", "$"]
wordlist = wordlist_generator(termos, anos, especiais)
# Salva em arquivo para uso em outras ferramentas (Hydra, Hashcat, etc)
with open("custom_wordlist.txt", "w") as f:
for password in wordlist:
f.write(f"{password}\n")
print(f"\n[+] Wordlist gerada com sucesso!")
print(f"[+] Total de combinações: {len(wordlist)}")
print(f"[+] Arquivo salvo como: custom_wordlist.txt")
print(f"[*] Exemplos gerados: {wordlist[:5]} ... {wordlist[-5:]}")
if __name__ == "__main__":
main()
Observações
- Explosão Combinatória: Como Software Architect, você sabe que muitas variáveis podem gerar arquivos gigantescos. É importante filtrar a wordlist para não tornar o ataque de força bruta impossível de terminar.
- Relevância Local: Em Salvador, por exemplo, incluir termos como feriados locais ou nomes de bairros pode aumentar drasticamente a eficácia da lista.
- Integração: Esta wordlist pode ser usada diretamente nos módulos anteriores que criamos: SSH Brute Forcer e FTP Password Cracker.