🔐 CTF Hash Rehberi — Hash'i Tanıma, Analiz Etme ve Çözme

🔐 CTF Hash Rehberi — Hash'i Tanıma, Analiz Etme ve Çözme​

Hash challenge'larında en büyük hata şudur:

“Hash'i decrypt edeceğim.”
Hayır. Hash, normal anlamda decrypt edilmez. 🎯

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
Bu nedenle CTF'de genellikle:


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:

UzunlukMuhtemel algoritmalar
32 hexMD5, NTLM gibi adaylar
40 hexSHA-1
56 hexSHA-224
64 hexSHA-256
96 hexSHA-384
128 hexSHA-512
⚠️ Ama çok önemli:

Uzunluk tek başına algoritmayı kesin olarak belirlemez.
Örneğin 32 hexadecimal karakter görmek otomatik olarak “MD5” demek değildir.


🧩 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:

40 hex = kesin SHA-1 değildir.
Formatı ve challenge context'ini de kontrol edin.


🔒 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:

32 hex karakter = sadece MD5 değildir.
Windows authentication context'i varsa NTLM güçlü adaydır.

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'ı hash'in bir parçası olarak değerlendirin.
Salt varsa basit:


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
durumlarında oldukça kullanışlıdır.


🧬 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:

Hedef hash'in yalnızca son algoritmasını bilmek yetmez.
Challenge source code'daki işlem sırasını birebir takip etmek gerekir.


🧂 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.

Ö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ı:

Herhangi bir MD5 hash'inin kolayca plaintext'e çevrilebildiği anlamına gelmez.
Collision attack:


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:

“MD5 kırılmış, o zaman hash'i tersine çeviririm.”
mantığı doğru değildir.


🎯 31. Hash Challenge'larında Saldırı Seçme​

Durumİlk yaklaşım
32 hexMD5 / NTLM adaylarını kontrol et
40 hexSHA-1 adayı
64 hexSHA-256 adayı
128 hexSHA-512 adayı
$2b$...bcrypt
$6$...SHA-512 crypt
$1$...MD5-crypt
Linux shadow formatıCrypt formatını analiz et
Windows/AD contextNTLM vb. formatları araştır
Salt mevcutSalt formatını doğru parse et
Çok küçük parola alanıBrute force
Tahmin edilebilir parolaDictionary
Bilinen patternMask
Kelime + değişikliklerRules
Source codeCustom hash analizi
Birden fazla aşamaHash 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

 
Yanıt yazmak için giriş yapmalısınız
Forum özelliklerini kullanmak ve Level 2 üyelik satın almak için hesabınıza giriş yapın.
135,050Konular
3,297,712Mesajlar
326,237Kullanıcılar
thekral21Son Üye
Üst Alt