Criptografía simétrica
Tip
Aprende y practica Hacking en AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica Hacking en GCP:HackTricks Training GCP Red Team Expert (GRTE)
Aprende y practica Hacking en Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Apoya a HackTricks
- Revisa los planes de suscripción!
- Únete al 💬 grupo de Discord o al grupo de telegram o síguenos en Twitter 🐦 @hacktricks_live.
- Comparte trucos de hacking enviando PRs a los HackTricks y HackTricks Cloud repositorios de github.
Qué buscar en CTFs
- Mal uso de modos: patrones ECB, malleability de CBC, reutilización de nonce en CTR/GCM.
- Padding oracles: diferentes errores/timings para padding inválido.
- MAC confusion: uso de CBC-MAC con mensajes de longitud variable, o errores de MAC-then-encrypt.
- XOR por todas partes: stream ciphers y construcciones custom a menudo se reducen a XOR con un keystream.
Modos AES y mal uso
ECB: Electronic Codebook
ECB leaks patterns: bloques de plaintext iguales → bloques de ciphertext iguales. Esto permite:
- Cut-and-paste / reordenamiento de bloques
- Eliminación de bloques (si el formato permanece válido)
Si puedes controlar el plaintext y observar el ciphertext (o cookies), intenta crear bloques repetidos (p. ej., muchos As) y busca repeticiones.
CBC: Cipher Block Chaining
- CBC is malleable: cambiar bits en
C[i-1]cambia bits predecibles enP[i]. - Si el sistema expone padding válido vs padding inválido, puede que tengas un padding oracle.
CTR
CTR convierte AES en un stream cipher: C = P XOR keystream.
Si un nonce/IV se reutiliza con la misma clave:
C1 XOR C2 = P1 XOR P2(reutilización clásica del keystream)- Con plaintext conocido, puedes recuperar el keystream y descifrar otros.
GCM
GCM también falla gravemente bajo reutilización de nonce. Si la misma key+nonce se usa más de una vez, típicamente obtienes:
- Reutilización del keystream para cifrado (como CTR), permitiendo la recuperación de plaintext cuando cualquier plaintext es conocido.
- Pérdida de garantías de integridad. Dependiendo de lo expuesto (múltiples pares message/tag bajo el mismo nonce), los atacantes pueden ser capaces de forjar tags.
Operational guidance:
- Trata la reutilización de nonce en AEAD como una vulnerabilidad crítica.
- Si tienes múltiples ciphertexts bajo el mismo nonce, empieza comprobando relaciones del estilo
C1 XOR C2 = P1 XOR P2.
Tools
- CyberChef para experimentos rápidos: https://gchq.github.io/CyberChef/
- Python:
pycryptodomepara scripting
Patrones de explotación de ECB
ECB (Electronic Code Book) cifra cada bloque de forma independiente:
- bloques de plaintext iguales → bloques de ciphertext iguales
- esto leaks la estructura y permite ataques estilo cut-and-paste
![]()
Idea de detección: patrón token/cookie
Si inicias sesión varias veces y siempre obtienes la misma cookie, el ciphertext puede ser determinista (ECB o IV fijo).
Si creas dos usuarios con formatos de plaintext mayormente idénticos (p. ej., caracteres repetidos largos) y ves bloques de ciphertext repetidos en los mismos offsets, ECB es un sospechoso principal.
Patrones de explotación
Eliminación de bloques enteros
Si el formato del token es algo como <username>|<password> y el límite de bloque se alinea, a veces puedes crear un usuario de modo que el bloque admin aparezca alineado, luego eliminar bloques anteriores para obtener un token válido para admin.
Mover bloques
Si el backend tolera padding/espacios extra (admin vs admin ), puedes:
- Alinear un bloque que contenga
admin - Intercambiar/reutilizar ese bloque de ciphertext en otro token
Padding Oracle
Qué es
En modo CBC, si el servidor revela (directa o indirectamente) si el plaintext descifrado tiene padding PKCS#7 válido, a menudo puedes:
- Descifrar ciphertext sin la clave
- Encriptar plaintext elegido (forjar ciphertext)
El oracle puede ser:
- Un mensaje de error específico
- Un status HTTP diferente / tamaño de respuesta
- Una diferencia de timing
Explotación práctica
PadBuster es la herramienta clásica:
GitHub - strozfriedberg/PadBuster: Automated script for performing Padding Oracle attacks
Ejemplo:
perl ./padBuster.pl http://10.10.10.10/index.php "RVJDQrwUdTRWJUVUeBKkEA==" 16 \
-encoding 0 -cookies "login=RVJDQrwUdTRWJUVUeBKkEA=="
Notas:
- El tamaño de bloque suele ser
16para AES. -encoding 0significa Base64.- Usa
-errorsi el oracle es una cadena específica.
Por qué funciona
CBC decryption computes P[i] = D(C[i]) XOR C[i-1]. Al modificar bytes en C[i-1] y observar si el padding es válido, puedes recuperar P[i] byte a byte.
Bit-flipping en CBC
Even without a padding oracle, CBC is malleable. Si puedes modificar bloques de ciphertext y la aplicación usa el plaintext descifrado como datos estructurados (p. ej., role=user), puedes invertir bits específicos para cambiar bytes seleccionados del plaintext en una posición elegida del siguiente bloque.
Patrón típico en CTF:
- Token =
IV || C1 || C2 || ... - Controlas bytes en
C[i] - Apuntas a bytes del plaintext en
P[i+1]porqueP[i+1] = D(C[i+1]) XOR C[i]
Esto no rompe la confidencialidad por sí solo, pero es una técnica común de escalada de privilegios cuando falta integridad.
CBC-MAC
CBC-MAC es seguro solo bajo condiciones específicas (notablemente mensajes de longitud fija y separación de dominios correcta).
Patrón clásico de falsificación de longitud variable
CBC-MAC is usually computed as:
- IV = 0
tag = last_block( CBC_encrypt(key, message, IV=0) )
Si puedes obtener tags para mensajes elegidos, a menudo puedes crear un tag para una concatenación (o construcción relacionada) sin conocer la clave, explotando cómo CBC encadena los bloques.
Esto aparece frecuentemente en cookies/tokens de CTF que usan CBC-MAC para proteger el username o role.
Alternativas más seguras
- Use HMAC (SHA-256/512)
- Use CMAC (AES-CMAC) correctly
- Include message length / domain separation
Cifradores de flujo: XOR y RC4
Modelo mental
Most stream cipher situations reduce to:
ciphertext = plaintext XOR keystream
So:
- If you know plaintext, you recover keystream.
- If keystream is reused (same key+nonce),
C1 XOR C2 = P1 XOR P2.
XOR-based encryption
Si conoces cualquier segmento de plaintext en la posición i, puedes recuperar bytes del keystream y descifrar otros ciphertexts en esas posiciones.
Autosolvers:
RC4
RC4 es un cifrador de flujo; encriptar/descifrar es la misma operación.
Si puedes obtener RC4 encryption of known plaintext under the same key, puedes recuperar el keystream y descifrar otros mensajes de la misma longitud/desplazamiento.
Análisis de referencia (HTB Kryptos):
Hack The Box - Kryptos - 0xRick\xe2\x80\x99s Blog
Tip
Aprende y practica Hacking en AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica Hacking en GCP:HackTricks Training GCP Red Team Expert (GRTE)
Aprende y practica Hacking en Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Apoya a HackTricks
- Revisa los planes de suscripción!
- Únete al 💬 grupo de Discord o al grupo de telegram o síguenos en Twitter 🐦 @hacktricks_live.
- Comparte trucos de hacking enviando PRs a los HackTricks y HackTricks Cloud repositorios de github.


