Szyfrowanie symetryczne
Tip
Ucz się i ćwicz Hacking AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz Hacking GCP:HackTricks Training GCP Red Team Expert (GRTE)
Ucz się i ćwicz Hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Wsparcie dla HackTricks
- Sprawdź plany subskrypcyjne!
- Dołącz do 💬 grupy Discord lub grupy telegramowej lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Dziel się trikami hackingowymi, przesyłając PR-y do HackTricks i HackTricks Cloud repozytoriów na githubie.
Na co zwracać uwagę w CTFs
- Mode misuse: ECB patterns, CBC malleability, CTR/GCM nonce reuse.
- Padding oracles: różne błędy/czasy odpowiedzi dla niepoprawnego paddingu.
- MAC confusion: używanie CBC-MAC dla wiadomości o zmiennej długości, lub błędy typu MAC-then-encrypt.
- XOR everywhere: szyfry strumieniowe i niestandardowe konstrukcje często sprowadzają się do XOR z keystreamem.
AES modes and misuse
ECB: Electronic Codebook
ECB leaks patterns: równe bloki tekstu jawnego → równe bloki tekstu zaszyfrowanego. To umożliwia:
- Cut-and-paste / block reordering
- Usuwanie bloków (jeśli format pozostaje poprawny)
Jeśli możesz kontrolować tekst jawny i obserwować ciphertext (lub cookies), spróbuj wygenerować powtarzające się bloki (np. wiele A) i sprawdź, czy pojawiają się powtórzenia.
CBC: Cipher Block Chaining
- CBC jest modyfikowalny: przełączenie bitów w
C[i-1]powoduje przewidywalne zmiany wP[i]. - Jeśli system ujawnia rozróżnienie między poprawnym paddingiem a niepoprawnym, możesz mieć padding oracle.
CTR
CTR zamienia AES w szyfr strumieniowy: C = P XOR keystream.
Jeśli nonce/IV jest ponownie używany z tym samym kluczem:
C1 XOR C2 = P1 XOR P2(klasyczne ponowne użycie keystreamu)- Przy znanym tekście jawnym można odzyskać keystream i odszyfrować inne wiadomości.
GCM
GCM również zawodzi przy ponownym użyciu nonce. Jeśli ten sam key+nonce jest użyty więcej niż raz, zwykle występuje:
- Ponowne użycie keystreamu dla szyfrowania (jak w CTR), co umożliwia odzyskanie tekstu jawnego gdy jakikolwiek tekst jest znany.
- Utrata gwarancji integralności. W zależności od ujawnionych danych (wiele par message/tag pod tym samym nonce), atakujący może być w stanie sfałszować tagi.
Zalecenia operacyjne:
- Traktuj “nonce reuse” w AEAD jako krytyczną wadę.
- Jeśli masz wiele ciphertextów pod tym samym nonce, zacznij od sprawdzenia relacji typu
C1 XOR C2 = P1 XOR P2.
Narzędzia
- CyberChef for quick experiments: https://gchq.github.io/CyberChef/
- Python:
pycryptodomefor scripting
ECB exploitation patterns
ECB (Electronic Code Book) szyfruje każdy blok niezależnie:
- równe bloki tekstu jawnego → równe bloki tekstu zaszyfrowanego
- to ujawnia strukturę i umożliwia ataki typu cut-and-paste
![]()
Detection idea: token/cookie pattern
Jeśli logujesz się kilkakrotnie i zawsze otrzymujesz ten sam cookie, ciphertext może być deterministyczny (ECB lub stały IV).
Jeśli utworzysz dwóch użytkowników z w dużej mierze identycznym układem tekstu (np. długie powtarzające się znaki) i zobaczysz powtarzające się bloki ciphertext w tych samych offsetach, ECB jest głównym podejrzanym.
Exploitation patterns
Removing entire blocks
Jeśli format tokena wygląda jak <username>|<password> i granica bloku się wyrównuje, czasami możesz spreparować użytkownika tak, żeby blok z admin był wyrównany, a następnie usunąć poprzedzające bloki, aby uzyskać ważny token dla admin.
Moving blocks
Jeśli backend toleruje padding/dodatkowe spacje (admin vs admin ), możesz:
- Wyrównać blok zawierający
admin - Zamienić/ponownie użyć ten blok ciphertext w innym tokenie
Padding Oracle
Co to jest
W trybie CBC, jeśli serwer ujawnia (bezpośrednio lub pośrednio), czy odszyfrowany tekst jawny ma poprawny PKCS#7 padding, często możesz:
- Odszyfrować ciphertext bez klucza
- Zaszyfrować wybrany tekst jawny (podrobić ciphertext)
Oracle może być:
- Konkretna wiadomość błędu
- Różny status HTTP / rozmiar odpowiedzi
- Różnica w czasie odpowiedzi
Practical exploitation
PadBuster is the classic tool:
GitHub - strozfriedberg/PadBuster: Automated script for performing Padding Oracle attacks
Przykład:
perl ./padBuster.pl http://10.10.10.10/index.php "RVJDQrwUdTRWJUVUeBKkEA==" 16 \
-encoding 0 -cookies "login=RVJDQrwUdTRWJUVUeBKkEA=="
Uwagi:
- Rozmiar bloku często wynosi
16dla AES. -encoding 0oznacza Base64.- Użyj
-error, jeśli oracle jest konkretnym stringiem.
Dlaczego to działa
CBC decryption computes P[i] = D(C[i]) XOR C[i-1]. Poprzez modyfikowanie bajtów w C[i-1] i obserwowanie, czy padding jest poprawny, możesz odzyskać P[i] bajt po bajcie.
Bit-flipping in CBC
Nawet bez padding oracle, CBC jest podatny na modyfikacje. Jeśli możesz modyfikować bloki szyfrogramu i aplikacja używa odszyfrowanego tekstu jawnego jako danych strukturalnych (np. role=user), możesz odwracać konkretne bity, by zmienić wybrane bajty tekstu jawnego na określonej pozycji w następnym bloku.
Typowy wzorzec CTF:
- Token =
IV || C1 || C2 || ... - Kontrolujesz bajty w
C[i] - Celujesz w bajty tekstu jawnego w
P[i+1], ponieważP[i+1] = D(C[i+1]) XOR C[i]
Samo w sobie nie łamie poufności, ale jest to powszechny prymityw eskalacji uprawnień, gdy brakuje integralności.
CBC-MAC
CBC-MAC jest bezpieczny tylko w określonych warunkach (w szczególności wiadomości o stałej długości i poprawne rozdzielenie domen).
Classic variable-length forgery pattern
CBC-MAC jest zwykle obliczany jako:
- IV = 0
tag = last_block( CBC_encrypt(key, message, IV=0) )
Jeśli możesz uzyskać tagi dla wybranych wiadomości, często możesz sfałszować tag dla konkatenacji (lub powiązanej konstrukcji) bez znajomości klucza, wykorzystując sposób łączenia bloków w CBC.
Często pojawia się to w CTF cookie/tokens, które MAC-ują username lub role za pomocą CBC-MAC.
Bezpieczniejsze alternatywy
- Użyj HMAC (SHA-256/512)
- Użyj CMAC (AES-CMAC) prawidłowo
- Dołącz długość wiadomości / rozdzielenie domen
Stream ciphers: XOR and RC4
The mental model
Większość przypadków szyfrów strumieniowych sprowadza się do:
ciphertext = plaintext XOR keystream
Więc:
- Jeśli znasz tekst jawny, odzyskasz keystream.
- Jeśli keystream jest ponownie użyty (ten sam key+nonce),
C1 XOR C2 = P1 XOR P2.
XOR-based encryption
Jeśli znasz dowolny segment plaintext na pozycji i, możesz odzyskać bajty keystream i odszyfrować inne szyfrogramy w tych pozycjach.
Autosolvers:
RC4
RC4 jest szyfrem strumieniowym; encrypt/decrypt to ta sama operacja.
Jeśli możesz uzyskać RC4 encryption znanego plaintext przy tym samym key, możesz odzyskać keystream i odszyfrować inne wiadomości o tej samej długości/przesunięciu.
Reference writeup (HTB Kryptos):
Hack The Box - Kryptos - 0xRick\xe2\x80\x99s Blog
Tip
Ucz się i ćwicz Hacking AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz Hacking GCP:HackTricks Training GCP Red Team Expert (GRTE)
Ucz się i ćwicz Hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Wsparcie dla HackTricks
- Sprawdź plany subskrypcyjne!
- Dołącz do 💬 grupy Discord lub grupy telegramowej lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Dziel się trikami hackingowymi, przesyłając PR-y do HackTricks i HackTricks Cloud repozytoriów na githubie.


