Symmetric Crypto
Tip
AWS Hacking’i öğrenin ve pratik yapın:
HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın:HackTricks Training GCP Red Team Expert (GRTE)
Azure Hacking’i öğrenin ve pratik yapın:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks'i Destekleyin
- abonelik planlarını kontrol edin!
- 💬 Discord grubuna veya telegram grubuna katılın ya da Twitter’da bizi takip edin 🐦 @hacktricks_live.**
- Hacking ipuçlarını paylaşmak için HackTricks ve HackTricks Cloud github reposuna PR gönderin.
CTF’lerde nelere bakmalı
- Mode misuse: ECB patterns, CBC malleability, CTR/GCM nonce reuse.
- Padding oracles: kötü padding için farklı hata/tekrar zamanları.
- MAC confusion: variable-length mesajlarla CBC-MAC kullanımı veya MAC-then-encrypt hataları.
- XOR everywhere: stream cipher’lar ve custom konstrüksiyonlar genellikle keystream ile XOR’a indirgenir.
AES modları ve yanlış kullanımı
ECB: Electronic Codebook
ECB desenleri leak eder: equal plaintext blokları → equal ciphertext blokları. Bu şunları mümkün kılar:
- Cut-and-paste / block reordering
- Block deletion (format geçerli kaldığı sürece)
Eğer plaintext üzerinde kontrolünüz varsa ve ciphertext’i (veya cookie’leri) gözlemleyebiliyorsanız, tekrarlanan bloklar (ör. birçok A) üretip tekrarları arayın.
CBC: Cipher Block Chaining
- CBC malleable’dır:
C[i-1]içindeki bitleri flip etmekP[i]içindeki öngörülebilir bitleri flip eder. - Sistem decrypt edilmiş plaintext için valid padding ile invalid padding’i ayırıyorsa, bir padding oracle’ınız olabilir.
CTR
CTR, AES’i bir stream cipher haline getirir: C = P XOR keystream.
Aynı nonce/IV aynı anahtar ile tekrar kullanılırsa:
C1 XOR C2 = P1 XOR P2(klasik keystream reuse)- Bilinen plaintext ile keystream’i recovery edip diğerlerini decrypt edebilirsiniz.
GCM
GCM de nonce reuse altında kötü kırılır. Aynı key+nonce birden fazla kez kullanılırsa genellikle şunlar olur:
- Şifreleme için keystream reuse (CTR gibi), herhangi bir plaintext biliniyorsa plaintext recovery mümkün olur.
- Integrity garantilerinin kaybı. Aynı nonce altında birden fazla message/tag çifti açığa çıkarsa, saldırganlar tag forge edebilir.
Operasyonel tavsiye:
- AEAD’de “nonce reuse” kritik bir zafiyet olarak değerlendirilmelidir.
- Aynı nonce altında birden fazla ciphertext varsa,
C1 XOR C2 = P1 XOR P2tarzı ilişkileri kontrol etmeye başlayın.
Tools
- CyberChef for quick experiments: https://gchq.github.io/CyberChef/
- Python:
pycryptodomefor scripting
ECB exploitation patterns
ECB (Electronic Code Book) her bloğu bağımsız olarak şifreler:
- equal plaintext blokları → equal ciphertext blokları
- bu yapı sızdırır ve cut-and-paste tarzı saldırılara izin verir
![]()
Tespit fikri: token/cookie deseni
Eğer birkaç kez login olup hep aynı cookie’yi alıyorsanız, ciphertext deterministik (ECB veya sabit IV) olabilir.
İki kullanıcı oluşturup plaintext layout’ları büyük ölçüde aynı yaparsanız (ör. uzun tekrarlanan karakterler) ve aynı offset’lerde tekrar eden ciphertext blokları görürseniz, ECB ana şüphelidir.
Exploitation patterns
Removing entire blocks
Token formatı <username>|<password> gibiyse ve block boundary hizalanıyorsa, bazen admin bloğunun hizalanmasını sağlayıp önceki blokları çıkararak geçerli bir admin token’ı elde edebilirsiniz.
Moving blocks
Backend padding/extra spaces (admin vs admin ) tolere ediyorsa, şunları yapabilirsiniz:
adminiçeren bloğu hizalayın- o ciphertext bloğunu başka bir tokene takas/tekrar kullanın
Padding Oracle
Nedir
CBC modunda, eğer server decrypt edilmiş plaintext’in valid PKCS#7 padding olup olmadığını (doğrudan veya dolaylı) ifşa ediyorsa, genellikle şunları yapabilirsiniz:
- Anahtar olmadan ciphertext’i decrypt etmek
- Seçilen plaintext’i encrypt etmek (ciphertext forge etmek)
Oracle şunlar olabilir:
- Belirli bir hata mesajı
- Farklı HTTP status / response boyutu
- Zamanlama farkı
Pratik istismar
PadBuster klasik araçtır:
GitHub - strozfriedberg/PadBuster: Automated script for performing Padding Oracle attacks
Örnek:
perl ./padBuster.pl http://10.10.10.10/index.php "RVJDQrwUdTRWJUVUeBKkEA==" 16 \
-encoding 0 -cookies "login=RVJDQrwUdTRWJUVUeBKkEA=="
Notlar:
- Blok boyutu genellikle
16’dır AES için. -encoding 0Base64 anlamına gelir.- oracle belirli bir dizeyse
-errorkullanın.
Neden işe yarar
CBC decryption computes P[i] = D(C[i]) XOR C[i-1]. C[i-1] içindeki baytları değiştirip padding’in geçerli olup olmadığını gözlemleyerek, P[i]’yi bayt bayt geri kazanabilirsiniz.
Bit-flipping in CBC
Padding oracle olmasa bile, CBC değiştirilebilir. Eğer ciphertext bloklarını değiştirebiliyorsanız ve uygulama çözülen plaintext’i yapılandırılmış veri olarak kullanıyorsa (ör. role=user), belirli bitleri çevirerek sonraki bloktaki seçili plaintext baytlarını istediğiniz pozisyonda değiştirebilirsiniz.
Tipik CTF deseni:
- Token =
IV || C1 || C2 || ... C[i]içindeki baytları kontrol ediyorsunuzP[i+1]’deki plaintext baytlarını hedeflersiniz çünküP[i+1] = D(C[i+1]) XOR C[i]
Bu tek başına gizliliğin ihlali değildir, ancak integrity eksik olduğunda yaygın bir privilege-escalation ilkelidir.
CBC-MAC
CBC-MAC sadece belirli koşullar altında güvenlidir (özellikle sabit-uzunluklu mesajlar ve doğru domain separation).
Klasik değişken-uzunluklu sahtecilik deseni
CBC-MAC genellikle şu şekilde hesaplanır:
- IV = 0
tag = last_block( CBC_encrypt(key, message, IV=0) )
Seçilen mesajlar için tag’leri elde edebiliyorsanız, CBC’nin blokları nasıl zincirlediğini kullanarak anahtarı bilmeden bir birleştirme (veya ilgili bir yapı) için genellikle bir tag oluşturabilirsiniz.
Bu durum genellikle username veya role’u CBC-MAC ile MAC’leyen CTF cookie/token’larında görülür.
Daha güvenli alternatifler
- HMAC kullanın (SHA-256/512)
- CMAC (AES-CMAC) doğru şekilde kullanın
- Mesaj uzunluğunu ve/veya domain separation ekleyin
Akış şifreleri: XOR and RC4
Zihinsel model
Çoğu stream cipher durumu şu eşitliğe indirgenir:
ciphertext = plaintext XOR keystream
Yani:
- Plaintext’i biliyorsanız, keystream’i geri çıkarırsınız.
- Keystream yeniden kullanılıyorsa (aynı key+nonce),
C1 XOR C2 = P1 XOR P2.
XOR tabanlı şifreleme
Eğer i pozisyonunda herhangi bir plaintext segmentini biliyorsanız, keystream baytlarını elde edip o pozisyonlardaki diğer ciphertext’leri çözebilirsiniz.
Otomatik çözücüler:
RC4
RC4 bir stream cipher’dır; şifreleme/şifre çözme aynı işlemdir.
Aynı anahtar altında bilinen plaintext’in RC4 şifrelemesini elde edebiliyorsanız, keystream’i geri çıkarabilir ve aynı uzunluk/offset’teki diğer mesajları çözebilirsiniz.
Referans yazısı (HTB Kryptos):
Hack The Box - Kryptos - 0xRick\xe2\x80\x99s Blog
Tip
AWS Hacking’i öğrenin ve pratik yapın:
HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın:HackTricks Training GCP Red Team Expert (GRTE)
Azure Hacking’i öğrenin ve pratik yapın:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks'i Destekleyin
- abonelik planlarını kontrol edin!
- 💬 Discord grubuna veya telegram grubuna katılın ya da Twitter’da bizi takip edin 🐦 @hacktricks_live.**
- Hacking ipuçlarını paylaşmak için HackTricks ve HackTricks Cloud github reposuna PR gönderin.


