Symmetric Crypto
Tip
Impara e pratica il hacking AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP:HackTricks Training GCP Red Team Expert (GRTE)
Impara e pratica il hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporta HackTricks
- Controlla i piani di abbonamento!
- Unisciti al 💬 gruppo Discord o al gruppo telegram o seguici su Twitter 🐦 @hacktricks_live.
- Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos github.
Cosa cercare nelle CTFs
- Mode misuse: ECB patterns, CBC malleability, CTR/GCM nonce reuse.
- Padding oracles: errori/tempi diversi per PKCS#7 padding non valido.
- MAC confusion: using CBC-MAC with variable-length messages, or MAC-then-encrypt mistakes.
- XOR everywhere: stream ciphers and custom constructions often reduce to XOR with a keystream.
AES modes and misuse
ECB: Electronic Codebook
ECB leaks patterns: equal plaintext blocks → equal ciphertext blocks. Questo permette:
- Cut-and-paste / block reordering
- Block deletion (se il formato rimane valido)
Se puoi controllare il plaintext e osservare il ciphertext (o i cookie), prova a creare blocchi ripetuti (es., molti As) e cerca ripetizioni.
CBC: Cipher Block Chaining
- CBC è malleabile: flipping bits in
C[i-1]flips predictable bits inP[i]. - Se il sistema espone padding valido vs padding non valido, potresti avere un padding oracle.
CTR
CTR trasforma AES in uno stream cipher: C = P XOR keystream.
Se un nonce/IV viene riutilizzato con la stessa chiave:
C1 XOR C2 = P1 XOR P2(classic keystream reuse)- Con plaintext noto, puoi recuperare il keystream e decifrare altri.
GCM
GCM si rompe male con il nonce reuse. Se la stessa key+nonce viene usata più volte, normalmente ottieni:
- Keystream reuse per l’encryption (come CTR), permettendo il recupero del plaintext quando qualsiasi plaintext è noto.
- Perdita delle garanzie di integrità. A seconda di cosa è esposto (più coppie message/tag sotto lo stesso nonce), un attaccante può essere in grado di forgiare tag.
Linee guida operative:
- Tratta “nonce reuse” in AEAD come una vulnerabilità critica.
- Se hai più ciphertext sotto lo stesso nonce, inizia controllando relazioni tipo
C1 XOR C2 = P1 XOR P2.
Tools
- CyberChef for quick experiments: https://gchq.github.io/CyberChef/
- Python:
pycryptodomefor scripting
ECB exploitation patterns
ECB (Electronic Code Book) cifra ogni blocco indipendentemente:
- equal plaintext blocks → equal ciphertext blocks
- questo leaks la struttura e permette attacchi in stile cut-and-paste
![]()
Idea di detection: pattern token/cookie
Se effettui il login più volte e ricevi sempre lo stesso cookie, il ciphertext potrebbe essere deterministico (ECB o IV fisso).
Se crei due utenti con layout di plaintext per lo più identici (es., lunghi caratteri ripetuti) e vedi blocchi di ciphertext ripetuti agli stessi offset, ECB è il sospetto principale.
Exploitation patterns
Removing entire blocks
Se il formato del token è qualcosa come <username>|<password> e il boundary del blocco si allinea, a volte puoi creare un utente in modo che il blocco admin appaia allineato, poi rimuovere i blocchi precedenti per ottenere un token valido per admin.
Moving blocks
Se il backend tollera padding/spazi extra (admin vs admin ), puoi:
- Allineare un blocco che contiene
admin - Swap/reuse quel blocco di ciphertext in un altro token
Padding Oracle
Cos’è
In modalità CBC, se il server rivela (direttamente o indirettamente) se il plaintext decifrato ha valid PKCS#7 padding, spesso puoi:
- Decifrare ciphertext senza la chiave
- Cifrare plaintext scelto (forgiare ciphertext)
L’oracolo può essere:
- Un messaggio di errore specifico
- Un diverso status HTTP / dimensione della risposta
- Una differenza di timing
Sfruttamento pratico
PadBuster è lo strumento classico:
GitHub - strozfriedberg/PadBuster: Automated script for performing Padding Oracle attacks
Esempio:
perl ./padBuster.pl http://10.10.10.10/index.php "RVJDQrwUdTRWJUVUeBKkEA==" 16 \
-encoding 0 -cookies "login=RVJDQrwUdTRWJUVUeBKkEA=="
Note:
- La dimensione del blocco è spesso
16per AES. -encoding 0significa Base64.- Usa
-errorse l’oracle è una stringa specifica.
Perché funziona
La decrittazione CBC calcola P[i] = D(C[i]) XOR C[i-1]. Modificando i byte in C[i-1] e osservando se il padding è valido, puoi recuperare P[i] byte per byte.
Bit-flipping in CBC
Anche senza un padding oracle, CBC è malleabile. Se puoi modificare i blocchi di ciphertext e l’applicazione usa il plaintext decrittato come dati strutturati (es., role=user), puoi modificare bit specifici per cambiare byte selezionati del plaintext in una posizione scelta nel blocco successivo.
Schema tipico nei CTF:
- Token =
IV || C1 || C2 || ... - Controlli i byte in
C[i] - Miri ai byte del plaintext in
P[i+1]perchéP[i+1] = D(C[i+1]) XOR C[i]
Questo non è una violazione della riservatezza di per sé, ma è una primitiva comune per l’elevazione di privilegi quando manca l’integrità.
CBC-MAC
CBC-MAC è sicuro solo in condizioni specifiche (in particolare messaggi a lunghezza fissa e corretta separazione dei domini).
Schema classico di forgery per lunghezza variabile
CBC-MAC viene solitamente calcolato come:
- IV = 0
tag = last_block( CBC_encrypt(key, message, IV=0) )
Se puoi ottenere tag per messaggi scelti, spesso puoi creare un tag per una concatenazione (o costruzione correlata) senza conoscere la chiave, sfruttando come CBC concatena i blocchi.
Questo appare frequentemente in cookie/token nei CTF che applicano un MAC a username o role con CBC-MAC.
Alternative più sicure
- Usa HMAC (SHA-256/512)
- Usa CMAC (AES-CMAC) correttamente
- Includi la lunghezza del messaggio / separazione dei domini
Cifrari a flusso: XOR e RC4
Modello mentale
La maggior parte delle situazioni con stream cipher si riduce a:
ciphertext = plaintext XOR keystream
Quindi:
- Se conosci il plaintext, ricavi il keystream.
- Se il keystream viene riutilizzato (stessa key+nonce),
C1 XOR C2 = P1 XOR P2.
Crittografia basata su XOR
Se conosci un segmento di plaintext alla posizione i, puoi ricavare i byte del keystream e decriptare altri ciphertext in quelle posizioni.
Autosolvers:
RC4
RC4 è un stream cipher; encrypt/decrypt sono la stessa operazione.
Se puoi ottenere una encryption RC4 di plaintext noto con la stessa key, puoi recuperare il keystream e decriptare altri messaggi della stessa lunghezza/offset.
Reference writeup (HTB Kryptos):
Hack The Box - Kryptos - 0xRick\xe2\x80\x99s Blog
Tip
Impara e pratica il hacking AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP:HackTricks Training GCP Red Team Expert (GRTE)
Impara e pratica il hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporta HackTricks
- Controlla i piani di abbonamento!
- Unisciti al 💬 gruppo Discord o al gruppo telegram o seguici su Twitter 🐦 @hacktricks_live.
- Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos github.


