John The Ripper

Aslıhan Kuzucu
6 min readAug 2, 2023

--

John The Ripper Nedir?

John the Ripper, bilgisayar güvenliği alanında popüler bir şifre kırma aracıdır. Adını, ünlü İngiliz seri katil Jack the Ripper’dan alır. John the Ripper, özellikle parola güvenliği testleri ve zayıf şifrelerin keşfi için kullanılır.

John the Ripper, çeşitli şifre kırma yöntemleri ve saldırılar kullanarak parolaları deneme ve çözme yeteneğine sahiptir. Bazı kullanılan yöntemler şunlardır:

Sözlük Saldırısı:

Bu yöntemde, önceden oluşturulmuş bir sözlük veya kelime listesi kullanılarak kullanıcıların yaygın olarak kullandığı parolaları deneyerek şifreleri çözmeye çalışır. Sözlük saldırısı, hızlı ve etkili olabilir, çünkü birçok kullanıcının basit veya yaygın parolalar kullanma eğiliminde olduğu bilinir.

Örnek: John the Ripper’ı, “passwords.txt” adlı bir sözlük dosyasıyla kullanarak kullanıcının parolasını kırmak istediğinizi düşünelim:

john — wordlist=passwords.txt hashed_passwords.txt

Bir şifreleme algoritmasının kendisi geri dönüşümsüz olduğu için (yani şifreleme sonucu oluşan hash değeri doğrudan orijinal parolaya dönüştürülemez), şifreleme algoritmasını bilen ve hashlenmiş bir parolaya sahip olan bir saldırgan, büyük bir kelime listesi olan bir sözlük kullanarak hash değerleri oluşturabilir. Ardından, bu oluşturulan hash değerlerini hedeflenen hash değeriyle karşılaştırarak eşleşme var mı diye kontrol edebilir. Eşleşme bulunursa, parolayı çözmüş olur.

Bu işlem, sözlük saldırısı olarak adlandırılır ve parola güvenliği testlerinde yaygın olarak kullanılır. John the Ripper, farklı hash türlerinde (MD5, SHA-1, SHA-256 vb.) hızlı brute force saldırıları yapabilmenizi sağlayan bir araçtır. Şifreli parolaların hash değerleri ile bir sözlük oluşturarak veya kullanarak bu saldırıları gerçekleştirebilirsiniz.

Brute-Force Saldırısı:

Bu yöntem, tüm olası karakter kombinasyonlarını deneyerek şifreyi kırmayı amaçlar. Brute-force saldırısı, diğer yöntemler başarısız olduğunda veya parolanın uzunluğu ve karmaşıklığı bilinmediğinde kullanılabilir, ancak oldukça zaman alıcıdır.

Örnek: John the Ripper’ı basit bir vaka olarak düşünün, 1 ile 4 karakter arasındaki parolaları denemek istediğiniz şifreli dosyalarınız varsa:

john — min-length=1 — max-length=4 hashed_passwords.txt

Karışık Saldırılar:

Bu yöntemde, kullanıcıların yaygın değişikliklerle oluşturduğu parola desenlerini tahmin etmeye çalışır. Örneğin, kullanıcılar sık sık basit bir şifreye eklemeler veya değişiklikler yaparlar (örneğin, “password1”, “password2010” gibi).

Örnek: John the Ripper’ı bazı popüler desenleri(pattern) denemek için kullanmak:

john — incremental:alphanumeric hashed_passwords.txt

Bu komut, alfanümerik karakterlerle (harf ve rakamlar) artan bir deseni denemeye başlar ve şifreyi tahmin etmeye çalışır.

Kali Linux’a John The Ripper’ı yüklemek için:

TryHackMe Çözümleri

LINK: https://tryhackme.com/room/johntheripper0

Hash identifier kurduk ve çalıştırdık. Bu tool hash değerinin karşılığını bulmak için kullandığımız bir araçtır.
tryhackme de bize indirmemiz söylenen hash dosyasını indirip, unzip ediyoruz.
Cat ile hash dosyasını okuduktan sonra hash’in hangi formatla yapıldığını öğreniyoruz, bunun için hash identifier kullanıyoruz.
MD5

Not: NTHash / NTLM

NTHash, modern Windows işletim sistemi makinelerinin kullanıcı ve hizmet parolalarını sakladığı hash formatıdır. Aynı zamanda genellikle “NTLM” olarak da adlandırılır ve bu, parolaların önceki sürümünü oluşturan “LM” olarak bilinen “LM/NT” anlamına gelir.

Küçük bir tarihçe, Windows ürünleri için “NT” ataması aslen “New Technology” anlamına gelir ve MS-DOS işletim sisteminden türetilmeyen ürünleri belirtmek için kullanılmıştır. Sonunda “NT” çizgisi, Microsoft tarafından yayınlanacak standart işletim sistemi tipi haline geldi ve isim düşürüldü, ancak hala bazı Microsoft teknolojilerinin adlarında yaşıyor.

NTHash / NTLM hashlerine, bir Windows makinesindeki SAM veritabanını , Mimikatz gibi bir araç kullanarak veya Active Directory veritabanı: NTDS.dit’ten elde edebilirsiniz. Genellikle bir yetki yükseltme yapmak için hash’i kırmak zorunda kalmayabilirsiniz; çünkü genellikle “pass the hash” saldırısı yaparak da devam edebilirsiniz. Ancak zayıf bir parola politikası varsa, hash kırma uygun bir seçenek olabilir.

Formatını bildiğimiz bir hash değerini aşağıdaki gibi direkt çözümleyebiliyoruz:

Bu senaryoda hash’in formatının ntlm olduğunu biliyoruz.

/etc/shadow dosyası, Linux makinelerinde parola hashlerinin depolandığı dosyadır. Ayrıca son parola değişikliği tarihi ve parola süresi gibi diğer bilgileri de içerir. Sistemdeki her kullanıcı veya kullanıcı hesabı için bir satır içerir. Bu dosya genellikle yalnızca root kullanıcı tarafından erişilebilir. Dolayısıyla, hashleri elde etmek için yeterli yetkiniz olmalıdır. Ancak böyle bir yetkiniz varsa, bazı hashleri kırma şansınız olabilir.

Unshadowing (Parola Listelerini Birleştirme)

John, verilerle çalışabilmesi için belirli bir formata dikkat edebilir. Bu nedenle /etc/shadow parolalarını kırmak için John’a verilerin nasıl sunulacağını anlaması için /etc/passwd dosyası ile birleştirmeniz gerekir. Bunun için, John araçlarının bir parçası olan unshadow adlı bir araç kullanırız. Unshadow’in temel sözdizimi şöyledir:

  • unshadow [passwd dosya yolu] [shadow dosya yolu]
  • unshadow — Unshadow aracını çalıştırır
  • [passwd dosya yolu] — Hedef makineden aldığınız /etc/passwd dosyasının kopyasını içeren dosya
  • [shadow dosya yolu] — Hedef makineden aldığınız /etc/shadow dosyasının kopyasını içeren dosya

Unshadow aracı, /etc/passwd dosyasının kullanıcı adlarını ve /etc/shadow dosyasındaki hashleri birleştirerek John’un anlayabileceği bir formata dönüştürür. Böylece John the Ripper ile daha kolay ve verimli bir şekilde hashleri kırmaya başlayabilirsiniz.

Örnek olarak, root’a ait şifreyi bulduk: 1234 :)

Single Crack Modu ve Word Mangling

Şu ana kadar, John’un sözlük modunu kullanarak basit ve karmaşık olmayan hash’leri brute force ile çözmek için kullanıyorduk. Ancak John’un başka bir modu daha vardır, buna Single Crack Modu denir. Bu modda, John, sadece kullanıcı adında verilen bilgileri kullanarak olası parolaları sezgisel olarak bulmaya çalışır. Bunun için kullanıcı adındaki harf ve rakamları hafifçe değiştirerek olası parolaları üretir.

Word Mangling

Single Crack modu ve word mangling kavramını daha iyi anlamak için bir örnek üzerinden geçelim:

Kullanıcı adını “Markus” olarak alalım.

Bazı olası parolalar şunlar olabilir:

  • Markus1, Markus2, Markus3 (vb.)
  • MArkus, MARkus, MARKus (vb.)
  • Markus!, Markus$, Markus* (vb.)

Bu teknik word mangling olarak adlandırılır. John, kendisine beslenen bilgilere dayanarak kendi sözlüğünü oluşturur ve “word mangling” adı verilen bir dizi kural kullanır. Bu kurallar, hedefinizi çözmek için başlangıçta belirtilen kelimeyi nasıl değiştirebileceğini tanımlar. Bu yöntem, zayıf parolaların kullanıcı adı veya giriş yaptıkları hizmet hakkında bilgiler temelinde oluşabileceğini kullanır.

Bu mod, brute force veya sözlük saldırısının ötesine geçerek daha karmaşık ve gerçek dünya senaryolarına uygun parola kombinasyonlarını tahmin edebilir.

Custom Rules Nedir?

John’un Single Crack Modunda gezinirken, belirli word mangling kalıpları için fikirleriniz olabilir veya parolalarınızın genellikle kullandığı bazı kalıpların belirli bir word mangling kalıbıyla çoğaltılabileceğini düşünebilirsiniz. Şöyle ki, kendi özel kurallarınızı da tanımlayabilirsiniz. John, bu kuralları kullanarak dinamik olarak parolalar oluşturacaktır. Bu özellik, hedefinizin parola yapısı hakkında daha fazla bilgiye sahip olduğunuzda çok işe yarar.

Parola Korumalı Bir Zip Dosyasının Kırılması

John’u, parola korumalı Zip dosyalarındaki parolayı kırmak için kullanabiliriz. Yine, zip dosyasını John’un anlayabileceği bir formata dönüştürmek için john paketine ait başka bir aracı kullanacağız, ancak her türlü amacımıza uygun bir şekilde, artık oldukça aşina olduğumuz syntax’ı kullanacağız.

Zip2John

Daha önce kullandığımız unshadow aracına benzer şekilde, zip2john aracını da kullanarak zip dosyasını John’un anlayabileceği ve kırabileceği bir hash formatına dönüştüreceğiz. Temel kullanımı:

zip2john [seçenekler] [zip dosyası] > [çıktı dosyası]

[opitons] — zip2john’a belirli özetleme seçeneklerini iletebilmenizi sağlar, bunun sıklıkla gerekli olması beklenmez.

[zip file] — Parolasını kırmak istediğiniz zip dosyasının yolu.

“>” — Bu çıktı yönlendiricisidir

[output file] — Çıktının saklanacağı dosya.

Örnek Kullanım:

zip2john zipfile.zip > zip_hash.txt

Cracked

Sonrasında, örnek kullanımımızda zip2john ile ürettiğimiz “zip_hash.txt” adlı dosyayı alıp, unshadow ile yaptığımız gibi doğrudan John’a paslayabiliriz:

john — wordlist=/usr/share/wordlists/rockyou.txt zip_hash.txt

Şifreyi çözdük.
Şifreyi çözdüğümüz için zip’li dosyanın içini de okuyabildik.
Aynı işlemi rar dosyaları için de yapabiliriz. Şifre password çıktı. Şifreyi bildiğimiz için şimdi dosyanın içini okuyabiliriz.

SSH Anahtar Parolalarının Kırılması

John’u, SSH anahtar dosyası (id_rsa) içindeki parolayı kırmak için kullanabiliriz. Genellikle SSH oturumu açarken parola kullanarak kimlik doğrulama yaparız. Ancak anahtar tabanlı kimlik doğrulamasını da yapılandırabiliriz; böylece id_rsa adlı özel anahtarımızı kimlik doğrulama anahtarı olarak kullanarak uzak bir makineye SSH üzerinden giriş yapabiliriz. Ancak, anahtar tabanlı kimlik doğrulaması kullanırken çoğu zaman bir parola gerekecektir. Burada, John’u bu parolayı kırmak için kullanacağız ve anahtar tabanlı kimlik doğrulaması ile giriş yapmamıza olanak tanıyacağız.

SSH2John

SSH2John adıyla anılan araç, SSH oturumuna giriş yapmak için kullandığımız id_rsa özel anahtarını, John’un anlayabileceği bir hash formatına dönüştürür. Syntax’ı tahmin ettiğiniz gibi basittir. Eğer ssh2john yüklü değilse, /opt/john/ssh2john.py dizininde bulunan ssh2john.py dosyasını kullanabilirsiniz. Bunu yapmak için ssh2john komutunu python3 /opt/ssh2john.py (ya da Kali’de python /usr/share/john/ssh2john.py) şeklinde değiştirin.

Örnek:

Okuduğunuz için teşekkürler.

--

--

Aslıhan Kuzucu

Curious computer engineer interested in cyber security👩‍💻