-
Sadrazamv4
instagram:sadrazam.spy Tg:Sadrazamv4
🔐 CTF Hash Rehberi — Hash'i Tanıma, Analiz Etme ve Çözme
Hash challenge'larında en büyük hata şudur:Hayır. Hash, normal anlamda decrypt edilmez. 🎯“Hash'i decrypt edeceğim.”
CTF'de amaç çoğunlukla hash'in hangi algoritma olduğunu tespit etmek, ardından aday plaintext'leri hash'leyerek veya uygun parola-açma yöntemleriyle eşleşmeyi bulmaktır.
🧠 1. Önce Hash Nedir?
Bir hash fonksiyonu kabaca:plaintext
↓
HASH
↓
fixed-size output
üretir.
Örneğin:
password
↓
SHA-256
↓
hash
Temel özellikleri:
- Aynı input → aynı hash
- Hash'ten input'u doğrudan geri almak amaçlanmaz
- Küçük input değişikliği → tamamen farklı hash
- Çıktı uzunluğu algoritmaya bağlıdır
Hash
↓
Algoritmayı tahmin et
↓
Aday plaintext üret
↓
Hash'le
↓
Karşılaştır
yapılır.
🔎 2. Hash'i Görünce İlk Yapılacak Şey
İlk olarak şunları not edin:[ ] Hash kaç karakter?
[ ] Hex mi?
[ ] Base64 mü?
[ ] Salt var mı?
[ ] `$...$` formatı var mı?
[ ] Prefix var mı?
[ ] Birden fazla hash var mı?
[ ] Hash'in yanında kullanıcı adı var mı?
[ ] Challenge source code veriyor mu?
[ ] Hash hangi sistemden gelmiş olabilir?
Uzunluk + format + prefix çoğu zaman algoritma hakkında ciddi ipucu verir.
📏 3. Hash Uzunluğundan Tahmin
Hexadecimal hash'lerde yaygın örnekler:| Uzunluk | Muhtemel algoritmalar |
|---|---|
| 32 hex | MD5, NTLM gibi adaylar |
| 40 hex | SHA-1 |
| 56 hex | SHA-224 |
| 64 hex | SHA-256 |
| 96 hex | SHA-384 |
| 128 hex | SHA-512 |
Örneğin 32 hexadecimal karakter görmek otomatik olarak “MD5” demek değildir.Uzunluk tek başına algoritmayı kesin olarak belirlemez.
🧩 4. MD5
MD5:128 bit
=
32 hex karakter
çıktı üretir.
Örneğin:
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
gibi 32 hex karakterlik bir değer.
CTF'lerde oldukça yaygındır.
🎯 CTF'de ne yapmalı?
32 hex karakter görüyorsanız:MD5?
NTLM?
başka 128-bit hash?
diye düşünün.
Eğer challenge:
md5
checksum
legacy
old password
gibi ipuçları veriyorsa MD5 ihtimali yükselir.
🔐 5. SHA-1
SHA-1:160 bit
=
40 hex karakter
çıktı verir.
CTF'de:
40 hex
görürseniz SHA-1 güçlü adaydır.
Ancak yine:
Formatı ve challenge context'ini de kontrol edin.40 hex = kesin SHA-1 değildir.
🔒 6. SHA-256
SHA-256:256 bit
=
64 hex karakter
çıktı verir.
Örneğin:
64 hexadecimal characters
görüyorsanız SHA-256 ilk adaylardan biridir.
Ancak SHA-256 genellikle parola hash'leme amacıyla doğrudan kullanılmak yerine uygun password-hashing schemes ile birlikte kullanılmalıdır.
🧱 7. SHA-512
SHA-512:512 bit
=
128 hex karakter
çıktı verir.
Dolayısıyla:
128 hex characters
görürseniz SHA-512 kontrol edilebilir.
🪪 8. Prefix'ler Çok Önemli
Bazı password hashing formatları kendilerini açıkça belli eder.Örneğin:
$1$...
→ MD5-crypt
$2a$...
$2b$...
$2y$...
→ bcrypt
$5$...
→ SHA-256 crypt
$6$...
→ SHA-512 crypt
Bunlarda yalnızca karakter sayısına bakmak yerine formatın tamamını incelemek gerekir.
🐧 9. Linux /etc/shadow Tarzı Hash'ler
CTF'de Linux authentication verileriyle karşılaşırsanız:username:$6$salt$hash
gibi formatlar görebilirsiniz.
Burada:
$6$
SHA-512 crypt'i işaret eder.
Ayrıca:
$salt$
kısmı önemli.
Bu nedenle sadece son hash bölümüne bakmak yanlış olabilir.
🪟 10. NTLM
Windows/Active Directory challenge'larında:32 hexadecimal characters
görmek NTLM ihtimalini akla getirir.
Burada kritik nokta:
Windows authentication context'i varsa NTLM güçlü adaydır.32 hex karakter = sadece MD5 değildir.
CTF'de:
domain
username
NTLM
SAM
hashdump
Windows
Active Directory
gibi kelimeler görüyorsanız bunu özellikle düşünün.
🧂 11. Salt Nedir?
Salt, password hashing sırasında input'a eklenen rastgele bir değerdir.Kabaca:
password + salt
↓
hash
şeklinde düşünülebilir.
Ama gerçek password-hashing algoritmalarının ayrıntıları bundan daha karmaşıktır.
Salt'ın temel amacı:
- Aynı parolaların aynı hash'i üretmesini engellemek
- Önceden hesaplanmış tabloların etkinliğini azaltmak
- Her kullanıcı için hash'i farklılaştırmak
🧠 12. Salt Görünce Ne Yapmalıyız?
Örneğin:$6$somerandomsalt$...
gibi bir format görüyorsanız:
Salt varsa basit:Salt'ı hash'in bir parçası olarak değerlendirin.
hash(password)
karşılaştırması yerine algoritmanın doğru salt formatıyla uygulanması gerekir.
Bu yüzden algoritmanın formatını doğru tespit etmek çok önemlidir.
🔥 13. Hash "Kırmak" Ne Demek?
CTF bağlamında “hash kırmak” genellikle şu işlemlerden biridir:Dictionary attack
aday parola
↓
hash
↓
hedef hash?
Brute force
aaaa
aaab
aaac
...
gibi adayları sistematik denemek.
Mask attack
Örneğin:????2026
gibi bilinen pattern'lerden yararlanmak.
Wordlist + rules
Bilinen kelimeler üzerinde çeşitli dönüşümler denemek.Algoritmik zayıflık
Eğer hash algoritması veya uygulama hatalıysa başka saldırılar mümkün olabilir.📚 14. Dictionary Attack
CTF'lerde en mantıklı ilk yöntemlerden biridir.Çünkü gerçek kullanıcı parolaları çoğu zaman:
kelime
+
sayı
+
yıl
+
sembol
gibi tahmin edilebilir yapılara sahip olabilir.
Örneğin challenge'da:
company
username
favorite word
year
gibi bilgiler veriliyorsa bunlar aday parola üretiminde kullanılabilir.
🎯 15. Brute Force
Eğer parola uzayı gerçekten küçükse brute force mantıklıdır.Örneğin:
4 digit PIN
için:
0000 → 9999
gibi sınırlı bir alan vardır.
Ama:
16 karakter
+
büyük/küçük harf
+
sayı
+
sembol
gibi devasa bir keyspace'i körlemesine brute-force etmek pratik değildir.
CTF'de amaç:
Önce keyspace'i küçültmek.
🧩 16. Mask Attack
Parolanın yapısını biliyorsanız brute-force çok daha etkili olur.Örneğin challenge bize:
8 karakter
son iki karakter sayı
gibi bir ipucu veriyorsa:
??????##
gibi bir pattern düşünülebilir.
Bu, tüm olası karakter kombinasyonlarını denemekten çok daha verimlidir.
🔄 17. Rules
CTF parolaları sıklıkla basit kelimelerin değiştirilmiş halleridir:password
Password
password1
Password1
password123
P@ssword
Bu nedenle wordlist + transformation rules yaklaşımı çok kullanışlıdır.
Temel fikir:
wordlist
↓
transformations
↓
candidate passwords
↓
hash
↓
comparison
⚡ 18. Hashcat
Hashcat CTF'lerde hash recovery için en bilinen araçlardan biridir.Temel mantığı:
hash
+
candidate passwords
+
hash algorithm
verip eşleşme aramaktır.
Ancak Hashcat kullanırken hash türünü doğru belirlemek kritik önem taşır.
Yanlış mode seçerseniz:
"Niye bulmuyor?"
diye saatlerce bakabilirsiniz. 😄
Sorun bazen wordlist değil, yanlış hash formatıdır.
🐍 19. Python ile Basit Hash Kontrolü
Kendi scriptinizi yazmak da özellikle CTF öğrenirken çok faydalıdır.Mantık:
candidate
↓
hashlib
↓
digest
↓
target ile karşılaştır
Örneğin MD5/SHA ailesindeki standart hash fonksiyonları için Python'ın hashlib modülü kullanılabilir.
Bu yaklaşım özellikle:
- Küçük wordlist
- Küçük brute-force
- Özel challenge formatı
- Custom hashing
🧬 20. Custom Hash
CTF'lerin en güzel tuzaklarından biri. 😈Challenge source code'u şöyle bir şey yapabilir:
password
↓
SHA256
↓
MD5
↓
salt ekle
↓
SHA1
veya tamamen özel bir işlem:
input
↓
XOR
↓
rotate
↓
hash
↓
output
🎯 Burada ne yapmalıyız?
Hash'i tanımaya çalışmak yerine source code'u analiz etmeliyiz.Çünkü algoritma standart olmayabilir.
🔁 21. Hash Chain
Bazı challenge'larda:MD5(password)
↓
SHA1(result)
↓
SHA256(result)
gibi zincirler oluşturulur.
Burada:
Challenge source code'daki işlem sırasını birebir takip etmek gerekir.Hedef hash'in yalnızca son algoritmasını bilmek yetmez.
🧂 22. Salted Hash
Örneğin:salt + password
veya:
password + salt
kullanılabilir.
Ama:
salt + password
ile:
password + salt
aynı değildir.
CTF'de source code varsa bir karakter bile farklı olmamalı.
🔗 23. Double Hash
Bazı challenge'larda:hash(hash(password))
gibi işlemler kullanılabilir.
Örneğin:
password
↓
MD5
↓
MD5
Bu durumda yalnızca standart MD5 crack yaklaşımı yeterli olmayabilir.
Challenge'ın hashing pipeline'ını çıkarmak gerekir.
🧮 24. Hash Uzunluğu + Format Cheat Sheet
32 hex
→ MD5 / NTLM / başka 128-bit formatlar
40 hex
→ SHA-1 / başka 160-bit formatlar
64 hex
→ SHA-256 / başka 256-bit formatlar
96 hex
→ SHA-384
128 hex
→ SHA-512
Prefix varsa:
$1$
→ MD5-crypt
$2a$ / $2b$ / $2y$
→ bcrypt
$5$
→ SHA-256 crypt
$6$
→ SHA-512 crypt
⚠️ Bunlar aday tespitleridir, kesin teşhis değildir.
🧠 25. Hash vs Encoding Ayrımı
CTF'de çok sık yapılan hata:"Bu hash."
deyip aslında Base64 ile uğraşmak.
Örneğin:
SGVsbG8=
hash değildir.
Base64 encoding'dir.
Benzer şekilde:
48656c6c6f
hex encoding olabilir.
Dolayısıyla:
Önce bunun gerçekten hash olup olmadığını belirleyin.
🔍 26. Base64 Görünce
Base64 genellikle:A-Z
a-z
0-9
+
/
=
karakterlerini kullanır.
Hashler ise sıkça:
0-9
a-f
hex formatında görülür.
Ama bu ayrım mutlak değildir.
Örneğin bir hash Base64 olarak encode edilmiş olabilir.
Bu yüzden:
format
+
length
+
challenge context
üçünü birlikte değerlendirin.
🧪 27. Hash Identifier Araçları
CTF'de hash formatını tanımak için hash identification araçları kullanılabilir.Ama otomatik araçların verdiği sonucu:
diye kabul etmeyin.“Kesin budur.”
Örneğin:
32 hex
birden fazla algoritmayla uyuşabilir.
Araç:
MD5
NTLM
...
gibi birden fazla aday verebilir.
Bu noktada challenge context'i devreye girer.
🪟 28. Windows CTF'lerinde
Windows/AD challenge'larında özellikle şu kavramlara dikkat:NTLM
NetNTLMv1
NetNTLMv2
Kerberos
SAM
LSASS
DCC
Bunların hepsi aynı şey değildir.
Özellikle NTLM hash ile NetNTLMv2 challenge-response birbirine karıştırılmamalıdır.
Formatlarını ve saldırı modellerini ayrı değerlendirmek gerekir.
🐧 29. Linux CTF'lerinde
Linux tarafında:/etc/passwd
/etc/shadow
gibi authentication verileri karşınıza çıkabilir.
/etc/shadow içindeki prefix'ler hash formatının belirlenmesinde önemli ipuçları verir.
Örneğin:
$6$
görürseniz SHA-512 crypt'i düşünün.
💥 30. MD5/SHA "Collision" Konusu
Burada önemli bir ayrım var.Bir hash algoritmasının collision'a karşı zayıf olması:
CollisionHerhangi bir MD5 hash'inin kolayca plaintext'e çevrilebildiği anlamına gelmez.

m1 ≠ m2
ama
H(m1) = H(m2)
bulmaya yöneliktir.
Password recovery ise:
H(password) = target
eşleşmesini bulmaya çalışır.
Bunlar farklı problemlerdir.
CTF'de challenge özellikle collision üzerine kurulmadıysa:
mantığı doğru değildir.“MD5 kırılmış, o zaman hash'i tersine çeviririm.”
🎯 31. Hash Challenge'larında Saldırı Seçme
| Durum | İlk yaklaşım |
|---|---|
| 32 hex | MD5 / NTLM adaylarını kontrol et |
| 40 hex | SHA-1 adayı |
| 64 hex | SHA-256 adayı |
| 128 hex | SHA-512 adayı |
| $2b$... | bcrypt |
| $6$... | SHA-512 crypt |
| $1$... | MD5-crypt |
| Linux shadow formatı | Crypt formatını analiz et |
| Windows/AD context | NTLM vb. formatları araştır |
| Salt mevcut | Salt formatını doğru parse et |
| Çok küçük parola alanı | Brute force |
| Tahmin edilebilir parola | Dictionary |
| Bilinen pattern | Mask |
| Kelime + değişiklikler | Rules |
| Source code | Custom hash analizi |
| Birden fazla aşama | Hash chain/pipeline analizi |
| Base64/hex | Önce decode et; hash olduğunu doğrula |
🧭 32. CTF Hash Analiz Akışı
Ben olsam bir hash challenge'ında şu sırayla giderdim:HASH
│
▼
Gerçekten hash mi?
│
▼
Formatı incele
│
┌───────┴───────┐
▼ ▼
Prefix Uzunluk
│ │
└───────┬───────┘
▼
Algoritma adayları
│
▼
Salt var mı?
│
▼
Challenge context
│
▼
Source code var mı?
│
▼
Password pattern?
│
┌─────────┼─────────┐
▼ ▼ ▼
Dictionary Mask Brute Force
│ │ │
└─────────┼─────────┘
▼
Comparison
│
▼
FLAG
📋 33. Hash CTF Checklist
[ ] Bunun gerçekten hash olduğunu doğrula
[ ] Encoding ile hash'i ayır
[ ] Hash uzunluğunu kontrol et
[ ] Hex/Base64 formatını kontrol et
[ ] Prefix varsa incele
[ ] Salt var mı?
[ ] Hash formatını belirle
[ ] Challenge context'i incele
[ ] Source code varsa oku
[ ] Custom hashing var mı?
[ ] Hash chain var mı?
[ ] Password pattern'i var mı?
[ ] Dictionary mantıklı mı?
[ ] Mask mantıklı mı?
[ ] Brute-force keyspace'i makul mü?
[ ] Rules gerekli mi?
[ ] Windows/AD ise NTLM ailesini kontrol et
[ ] Linux ise crypt formatını kontrol et
[ ] Hash identifier sonucunu doğrula
[ ] Bulduğun aday plaintext'i yeniden hash'le
[ ] Sonucun target ile gerçekten eşleştiğini doğrula
🏆 34. En Önemli Mental Model
Hash challenge'larında:"Hash'i nasıl decrypt ederim?"
yerine:
"Bu hangi format?"
↓
"Nasıl üretilmiş?"
↓
"Salt var mı?"
↓
"Parola uzayı ne kadar?"
↓
"Hangi adayları test edebilirim?"
↓
"En verimli recovery yöntemi hangisi?"
diye düşünün.
Ve şu ayrımı çok iyi oturtun:
Hash
≠
Encryption
≠
Encoding
🔐 Encryption
ciphertext → key → plaintext
🔢 Encoding
encoded data → decode → original data
#️⃣ Hash
input → hash → fixed-size digest
Hash'te normalde:
digest → plaintext
şeklinde bir decrypt işlemi yoktur.
CTF'de yaptığımız şey çoğunlukla aday input üretip hash'leri karşılaştırarak doğru input'u bulmaktır.
🔒 Bu içeriği görmek için giriş yapın