Sızma testlerinin önemli adımlarından biri olan parola/hash kırma saldırıları bazı durumlarda ele geçirilen parolanın tipinin tam olarak bilinmemesi nedeniyle tıkanır. Uygulamanın kaynak kodu olmadan ya da reverse enginering yapılmadan hash tipi kesin olarak belirlenemez fakat bazı uygulamaların kullandıkları hash/encoding/encryption yöntemi bellidir.
Hash, Encoding(kodlama) ve Encryption(şifreleme) kavramları genellikle birbirleri yerine kullanılsa da üç kavramda özünde farklıdır.
Encoding/Kodlama: Verinin farklı sistem ve ortamlarda dolaşabilmesi için bir formattan başka bir formata dönüştürülmesi işlemidir. Kodlama gizlilik sağlamak için kullanılmaz. En fazla bilinen kodlama örneği Base64 olup aşağıdaki gibi bir formata sahiptir.
Bilgi Guvenligi AKADEMISI QmlsZ2kgR3V2ZW5saWdpIEFLQURFTUlTSQo=
#echo QmlsZ2kgR3V2ZW5saWdpIEFLQURFTUlTSQo=|base64 -dBilgi Guvenligi AKADEMISI
text tabanlı kodlama çeşitleri ve işlemleri için https://hackvertor.co.uk/public adresi kullanılabilir.
Encryption/Şifreleme:Bir verinin sadece gizli anahtarı bilen yetkili kişilerce okunabilmesi amaçlı gerçekleştirilen format değişikliği olarak. Şifrelemenin kodlamadan temel farkı sadece ilgili anahtarı bilen kişiler tarafından orjinaline döndürülebilmesidir. RSA, AES en sık kullanılan şifreleme algoritmalarındandır.
Hash: Hash fonksiyonları doğrulama amaçlı kullanılır ve matematiksel olarak geri döndürülemez özelliğe sahiptirler. Genellikle bir verinin içeriğinin değişmediğinin garantisi olarak kullanılır veya bir parolanın veritabanında açık bir şekilde tutulmasını engellemek ve başkaları tarafından (işin sahibi dahil) bilinmesi istenmediği zaman tercih edilir.
MD5, SHA1 en fazla bilinen hash tipine örnektir.
Kullanılan Hash, Encryption ve Encoding Tipi Belirleme
Belirlemenin kesin yollar bulunmamakla birlikte bazı tanımlamalar
yaparak(hash uzunluğu, kullanılan karekter dizgisi vs) tahmin
edilebilir.
Bazı durumlarda ele geçirilen parola tuzlu(salted) hash formatında saklanıyor olabilir. Bu durumda http://www.insidepro.team/#1(345 hash tipini destekler) adresinden faydalanılarak hangi türe ait olduğu belirlenebilir.
Alternatif bir yöntem de kırılacak hash satırlarını bir dosyaya yazarak bilinen parola kırma programlarına parametre olarak vermektir. Bu yöntem her zaman doğru sonucu vermeyebilir zira hash tiplerinin birbirlerine benzerlik göstermektedir. Bu nedenle John The ripper, Cain &Abel gibi araçlar hash tipini sizin belirlemenize sağlayacak parametreler barındırır.
Hash tipini yanlış belirlediyse hangi hash tipine göre parola kırma işleminin gerçekleştirileceğini bulmak için http://pentestmonkey.net/cheat-sheet/john-the-ripper-hash-formats adresindeki döküman kolaylık sağlayacaktır.
Bu sayfada hangi hash tiplerinin hangi uygulamalarad kullanıldığına dair detay bilgi bulabilirsiniz.
Hash Tipi Belirleme için Hash_ID Betiğinin Kullanımı
hash-identifier belirli hash tipleri icin hangi algoritmanın kullanıldığını belirlemek amacıyla kullanılan bir betiktir ve aşağıdaki gibi kullanıma sahiptir.
~$ wget
~$ python Hash_ID_v1.1.py
————————————————————————- HASH: /0vW8jFro7CKUmFzHBDkCkgEDS8=
Not Found.
————————————————————————-
HASH: 855c3697d9979e78ac404c4ba2c66533
Possible Hashs:
[+] MD5
[+] Domain Cached Credentials – MD4(MD4(($pass)).(strtolower($username)))
Least Possible Hashs:
[+] RAdmin v2.x
[+] NTLM
[+] MD4
[+] MD2
[+] MD5(HMAC)
[+] MD4(HMAC)
[+] MD2(HMAC)
[+] MD5(HMAC(WordPress))
[+] Haval-128
[+] Haval-128(HMAC)
[+] RipeMD-128
[+] RipeMD-128(HMAC)
[+] SNEFRU-128
[+] SNEFRU-128(HMAC)
[+] Tiger-128
[+] Tiger-128(HMAC)
[+] md5($pass.$salt)
[+] md5($salt.$pass)
[+] md5($salt.$pass.$salt)
[+] md5($salt.$pass.$username)
[+] md5($salt.md5($pass))
[+] md5($salt.md5($pass))
[+] md5($salt.md5($pass.$salt))
[+] md5($salt.md5($pass.$salt))
[+] md5($salt.md5($salt.$pass))
[+] md5($salt.md5(md5($pass).$salt))
[+] md5($username.0.$pass)
[+] md5($username.LF.$pass)
[+] md5($username.md5($pass).$salt)
[+] md5(md5($pass))
[+] md5(md5($pass).$salt)
[+] md5(md5($pass).md5($salt))
[+] md5(md5($salt).$pass)
[+] md5(md5($salt).md5($pass))
[+] md5(md5($username.$pass).$salt)
[+] md5(md5(md5($pass)))
[+] md5(md5(md5(md5($pass))))
[+] md5(md5(md5(md5(md5($pass)))))
[+] md5(sha1($pass))
[+] md5(sha1(md5($pass)))
[+] md5(sha1(md5(sha1($pass))))
[+] md5(strtoupper(md5($pass)))
————————————————————————-
HASH: 0E6A48F765D0FFFFF6247FA80D748E615F91DD0C7431E4D9
Possible Hashs:
[+] Tiger-192
[+] Haval-192
Least Possible Hashs:
[+] Tiger-192(HMAC)
[+] Haval-192(HMAC)
————————————————————————-
HASH: 000EA4D72A142E29
Not Found.
————————————————————————-
HASH: zyIIMSYjiPm0L7a6
Possible Hashs:
[+] MySQL
[+] MD5(Middle)
Least Possible Hashs:
[+] MD5(Half)
————————————————————————-
HASH:
Ticari bir yazılım olan Password Pro tarafından tanınan hash tipleri aşağıda yer almaktadır.
ñ Adler-32
ñ Blowfish(Eggdrop)
ñ Blowfish(OpenBSD)
ñ CRC-16
ñ CRC-16-CCITT
ñ CRC-32
ñ CRC-32(ZIP_Seed)
ñ CRC-32B
ñ CRC-64
ñ DCC2
ñ DES(Oracle)
ñ DES(Unix)
ñ Domain Cached Credentials
ñ ELF-32
ñ FCS-16
ñ FCS-32
ñ Fletcher-32
ñ FNV-32
ñ GHash-32-3
ñ GHash-32-5
ñ GOST R 34.11-94
ñ HAS-160
ñ Haval-128
ñ Haval-128(HMAC)
ñ Haval-160
ñ Haval-160(HMAC)
ñ Haval-192
ñ Haval-192(HMAC)
ñ Haval-224
ñ Haval-224(HMAC)
ñ Haval-256
ñ Haval-256(HMAC)
ñ Lineage II C4
ñ MD2
ñ MD2(HMAC)
ñ MD4
ñ MD4(HMAC)
ñ MD5
ñ md5($pass.$salt)
ñ md5($pass.$salt.$pass)
ñ md5($pass.md5($pass))
ñ md5($salt.’-‘.md5($pass))
ñ md5($salt.$pass)
ñ md5($salt.$pass.$salt)
ñ md5($salt.$pass.$username)
ñ md5($salt.md5($pass))
ñ md5($salt.md5($pass).$salt)
ñ md5($salt.MD5($pass).$username)
ñ md5($salt.md5($pass.$salt))
ñ md5($salt.md5($salt.$pass))
ñ md5($salt.md5(md5($pass).$salt))
ñ md5($username.0.$pass)
ñ md5($username.LF.$pass)
ñ md5($username.md5($pass).$salt)
ñ md5(3 x strtoupper(md5($pass)))
ñ MD5(APR)
ñ MD5(Cisco PIX)
ñ MD5(Custom)
ñ MD5(HMAC(WordPress))
ñ MD5(HMAC)
ñ md5(md5($pass))
ñ md5(md5($pass).$pass)
ñ md5(md5($pass).$salt)
ñ md5(md5($pass).md5($pass))
ñ md5(md5($pass).md5($salt))
ñ md5(md5($salt).$pass)
ñ md5(md5($salt).md5($pass))
ñ md5(md5($username.$pass).$salt)
ñ md5(md5(md5($pass)))
ñ md5(md5(md5(md5($pass))))
ñ md5(md5(md5(md5(md5($pass)))))
ñ MD5(phpBB3)
ñ md5(sha1($pass))
ñ md5(sha1(md5($pass)))
ñ md5(sha1(md5($pass)).sha1($pass))
ñ md5(sha1(md5(sha1($pass))))
ñ md5(strrev($pass))
ñ md5(strtoupper(md5($pass)))
ñ MD5(Unix)
ñ MD5(WordPress)
ñ MSSQL(2000)
ñ MSSQL(2005)
ñ MySQL
ñ MySQL5
ñ NTLM
ñ Palshop
ñ RAdmin v2.x
ñ RipeMD-128
ñ RipeMD-128(HMAC)
ñ RipeMD-160
ñ RipeMD-160(HMAC)
ñ RipeMD-256
ñ RipeMD-256(HMAC)
ñ RipeMD-320
ñ RipeMD-320(HMAC)
ñ SAPB
ñ SAPG
ñ SHA-1
ñ SHA-1(Django)
ñ SHA-1(HMAC)
ñ SHA-1(MaNGOS)
ñ SHA-1(MaNGOS2)
ñ SHA-1(Oracle)
ñ SHA-224
ñ SHA-224(HMAC)
ñ SHA-256
ñ SHA-256(Django)
ñ SHA-256(HMAC)
ñ SHA-256(PasswordSafe)
ñ SHA-256(Unix)
ñ SHA-384
ñ SHA-384(Django)
ñ SHA-384(HMAC)
ñ SHA-512
ñ SHA-512(Drupal)
ñ SHA-512(HMAC)
ñ SHA-512(Unix)
ñ sha1($pass.$salt)
ñ sha1($salt.$pass)
ñ sha1($salt.$username.$pass.$salt)
ñ sha1($salt.md5($pass))
ñ sha1($salt.md5($pass).$salt)
ñ sha1($salt.sha1($pass))
ñ sha1($salt.sha1($salt.sha1($pass)))
ñ sha1($username.$pass)
ñ sha1($username.$pass.$salt)
ñ sha1(md5($pass))
ñ sha1(md5($pass).$salt)
ñ sha1(md5($pass).$userdate.$salt)
ñ sha1(md5(sha1($pass)))
ñ sha1(md5(sha1(md5($pass))))
ñ sha1(sha1($pass))
ñ sha1(sha1($pass).$salt)
ñ sha1(sha1($pass).substr($pass,0,3))
ñ sha1(sha1($salt.$pass))
ñ sha1(sha1(sha1($pass)))
ñ sha1(strtolower($username).$pass)
ñ sha256($pass.$salt)
ñ sha256($salt.$pass)
ñ sha256(md5($pass))
ñ sha256(sha1($pass))
ñ sha384($pass.$salt)
ñ sha384($salt.$pass)
ñ sha512($pass.$salt)
ñ sha512($salt.$pass)
ñ Skein-1024
ñ Skein-1024(384)
ñ Skein-1024(512)
ñ Skein-256
ñ Skein-256(128)
ñ Skein-256(160)
ñ Skein-256(224)
ñ Skein-512
ñ Skein-512(128)
ñ Skein-512(160)
ñ Skein-512(224)
ñ Skein-512(256)
ñ Skein-512(384)
ñ Snefru-128
ñ Snefru-128(HMAC)
ñ Snefru-256
ñ Snefru-256(HMAC)
ñ SSHA-1
ñ strrev(md5($pass))
ñ strrev(md5(strrev(md5($pass))))
ñ substr(md5($pass),16,16)
ñ substr(md5($pass),8,16)
ñ Tiger-128
ñ Tiger-128(HMAC)
ñ Tiger-160
ñ Tiger-160(HMAC)
ñ Tiger-192
ñ Tiger-192(HMAC)
ñ Ventrilo
ñ Whirlpool
ñ Whirlpool(Double)
ñ Whirlpool(HMAC)
ñ WPA-PSK PMK
ñ XOR-32
ñ xsha1(strtolower($pass))
Huzeyfe ÖNAL <huzeyfe.onal@bga.com.tr>