Criptografia Simétrica
Tip
Aprenda e pratique Hacking AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP:HackTricks Training GCP Red Team Expert (GRTE)
Aprenda e pratique Hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporte o HackTricks
- Confira os planos de assinatura!
- Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter 🐦 @hacktricks_live.
- Compartilhe truques de hacking enviando PRs para o HackTricks e HackTricks Cloud repositórios do github.
O que procurar em CTFs
- Uso indevido de modos: padrões ECB, maleabilidade CBC, nonce reuse em CTR/GCM.
- Padding oracles: erros/tempos diferentes para padding inválido.
- Confusão de MAC: usar CBC-MAC com mensagens de comprimento variável, ou erros de MAC-then-encrypt.
- XOR everywhere: stream ciphers e construções customizadas frequentemente reduzem-se a XOR com um keystream.
Modos AES e uso indevido
ECB: Electronic Codebook
ECB leaks patterns: equal plaintext blocks → equal ciphertext blocks. Isso possibilita:
- Cut-and-paste / reordenação de blocos
- Exclusão de blocos (se o formato permanecer válido)
Se você pode controlar o plaintext e observar o ciphertext (ou cookies), tente criar blocos repetidos (ex.: muitos As) e procure por repetições.
CBC: Cipher Block Chaining
- CBC é maleável: flipar bits em
C[i-1]flipa bits previsíveis emP[i]. - Se o sistema expõe padding válido vs padding inválido, você pode ter um padding oracle.
CTR
CTR transforma AES em um stream cipher: C = P XOR keystream.
Se um nonce/IV for reutilizado com a mesma chave:
C1 XOR C2 = P1 XOR P2(reutilização clássica de keystream)- Com plaintext conhecido, você pode recuperar o keystream e descriptografar outros.
GCM
GCM também falha gravemente sob nonce reuse. Se a mesma key+nonce for usada mais de uma vez, normalmente você obtém:
- Reutilização de keystream para encriptação (como CTR), permitindo recuperação de plaintext quando algum plaintext é conhecido.
- Perda das garantias de integridade. Dependendo do que é exposto (múltiplos pares message/tag sob o mesmo nonce), atacantes podem ser capazes de forjar tags.
Orientação operacional:
- Considere “nonce reuse” em AEAD como uma vulnerabilidade crítica.
- Se você tem múltiplos ciphertexts sob o mesmo nonce, comece verificando relações do tipo
C1 XOR C2 = P1 XOR P2.
Ferramentas
- CyberChef for quick experiments: https://gchq.github.io/CyberChef/
- Python:
pycryptodomefor scripting
Padrões de exploração ECB
ECB (Electronic Code Book) encripta cada bloco independentemente:
- equal plaintext blocks → equal ciphertext blocks
- isso leaks structure e possibilita ataques do tipo cut-and-paste
![]()
Ideia de detecção: padrão de token/cookie
Se você faz login várias vezes e sempre recebe o mesmo cookie, o ciphertext pode ser determinístico (ECB ou IV fixo).
Se você cria dois usuários com layouts de plaintext majoritariamente idênticos (ex.: muitos caracteres repetidos) e vê blocos de ciphertext repetidos nos mesmos offsets, ECB é um forte suspeito.
Padrões de exploração
Removendo blocos inteiros
Se o formato do token for algo como <username>|<password> e a fronteira de bloco alinhar, às vezes você pode criar um usuário de forma que o bloco admin apareça alinhado, então remover blocos anteriores para obter um token válido para admin.
Movendo blocos
Se o backend tolera padding/espaços extras (admin vs admin ), você pode:
- Alinhar um bloco que contenha
admin - Trocar/reutilizar esse bloco de ciphertext em outro token
Padding Oracle
O que é
Em CBC mode, se o servidor revela (direta ou indiretamente) se o plaintext decriptado tem valid PKCS#7 padding, você frequentemente pode:
- Descriptografar ciphertext sem a chave
- Encriptar plaintext escolhido (forjar ciphertext)
O oracle pode ser:
- Uma mensagem de erro específica
- Um status HTTP diferente / tamanho de resposta
- Uma diferença de timing
Exploração prática
PadBuster is the classic tool:
GitHub - strozfriedberg/PadBuster: Automated script for performing Padding Oracle attacks
Exemplo:
perl ./padBuster.pl http://10.10.10.10/index.php "RVJDQrwUdTRWJUVUeBKkEA==" 16 \
-encoding 0 -cookies "login=RVJDQrwUdTRWJUVUeBKkEA=="
Notas:
- O tamanho do bloco costuma ser
16para AES. -encoding 0significa Base64.- Use
-errorse o oracle for uma string específica.
Por que funciona
A descriptografia CBC calcula P[i] = D(C[i]) XOR C[i-1]. Ao modificar bytes em C[i-1] e observar se o padding é válido, você pode recuperar P[i] byte a byte.
Bit-flipping em CBC
Mesmo sem um padding oracle, CBC é maleável. Se você pode modificar blocos de ciphertext e a aplicação usa o plaintext descriptografado como dados estruturados (por exemplo, role=user), você pode inverter bits específicos para alterar bytes de plaintext selecionados em uma posição escolhida no próximo bloco.
Padrão típico de CTF:
- Token =
IV || C1 || C2 || ... - Você controla bytes em
C[i] - Você direciona bytes de plaintext em
P[i+1]porqueP[i+1] = D(C[i+1]) XOR C[i]
Isso não é uma quebra de confidencialidade por si só, mas é um primitivo comum de escalonamento de privilégios quando a integridade está ausente.
CBC-MAC
CBC-MAC é seguro apenas sob condições específicas (notadamente mensagens de comprimento fixo e separação de domínio correta).
Padrão clássico de falsificação para mensagens de comprimento variável
CBC-MAC normalmente é computado como:
- IV = 0
tag = last_block( CBC_encrypt(key, message, IV=0) )
Se você pode obter tags para mensagens escolhidas, você frequentemente pode forjar um tag para uma concatenação (ou construção relacionada) sem conhecer a chave, explorando como o CBC encadeia blocos.
Isso aparece frequentemente em cookies/tokens de CTF que aplicam CBC-MAC em username ou role.
Alternativas mais seguras
- Use HMAC (SHA-256/512)
- Use CMAC (AES-CMAC) corretamente
- Inclua o comprimento da mensagem / separação de domínio
Cifras de fluxo: XOR and RC4
Modelo mental
A maioria das situações com cifras de fluxo reduz-se a:
ciphertext = plaintext XOR keystream
Então:
- Se você conhece o plaintext, você recupera o keystream.
- Se o keystream for reutilizado (mesma key+nonce),
C1 XOR C2 = P1 XOR P2.
XOR-based encryption
Se você conhece qualquer segmento de plaintext na posição i, você pode recuperar bytes do keystream e descriptografar outros ciphertexts nessas posições.
Autosolvers:
RC4
RC4 é uma cifra de fluxo; criptografar/descriptografar são a mesma operação.
Se você conseguir obter criptografia RC4 de plaintext conhecido com a mesma chave, você pode recuperar o keystream e descriptografar outras mensagens com o mesmo comprimento/deslocamento.
Writeup de referência (HTB Kryptos):
Hack The Box - Kryptos - 0xRick\xe2\x80\x99s Blog
Tip
Aprenda e pratique Hacking AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP:HackTricks Training GCP Red Team Expert (GRTE)
Aprenda e pratique Hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporte o HackTricks
- Confira os planos de assinatura!
- Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter 🐦 @hacktricks_live.
- Compartilhe truques de hacking enviando PRs para o HackTricks e HackTricks Cloud repositórios do github.


