# FFUF

<figure><img src="https://3882444537-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FM9WJExkUmoonvvz0xard%2Fuploads%2Fgit-blob-d95621ad28ec41736b767605b990713edaf3f3d1%2FffufLogo.png?alt=media" alt=""><figcaption></figcaption></figure>

FFUF aracı Go dili ile yazılmış web sitelerinde kullanılabilen bir dizin tarama aracıdır. Benzer işlemleri yapan Gobuster, Dirbuster vb. araçlar gibi temel olarak iki parametreye ihtiyaç duyar. Biri tarama yapılacak bir hedef, diğer ise tarama esnasında kullanılacak bir wordlist.

Bu yazıda Gobuster yazımda olduğu gibi temel olarak dizin tarama özelliklerinden bahsedeceğim.

### Kurulum

FFUF'u yüklemek için yapmak gerekenler çok basit. Komut satırına `sudo apt install ffuf` yazmak yeterli olacaktır.

<figure><img src="https://3882444537-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FM9WJExkUmoonvvz0xard%2Fuploads%2Fgit-blob-f6e682750830f5cbc58d461ea7f678a2f3ddadf3%2Fffufyukleme.png?alt=media" alt=""><figcaption></figcaption></figure>

Bu işlemin başarı ile sonuçlanıp sonuçlanmadığını anlamak için `ffuf --help` yazdığımızda aracımızın yardım ekranın çıkması lazım.

### FUZZ kelimesi

Bir sistemin veya uygulamanın beklenmedik veya hatalı davranışlarını ortaya çıkarmak amacıyla rastgele veya hatalı girdilerle test edilmesi anlamına gelir.

### Directory Fuzzing

Parametre olarak verilen bir web sitesi altında bulunan dizinleri/klasörleri tespit etmek için kullanılır. Tespit edilen klasörlerden çeşitli gizli sayfalara erişilebilir, çeşitli zafiyetler sömürülebilir.

FFUF aracı ile dizin taraması yapmak için şöyle bir söz dizimine ihtiyacımız var:

`ffuf -u <hedefURL> -w <wordlist>`

Daha önce Gobuster ve benzeri bir araçla çalıştıysanız sadece hedef URL'i vermeniz yeterlidir. Ama FFUF aracımızda küçük bir değişiklik var. URL'i ekledikten sonra FUZZ yazmamız gerekiyor.

**Örnek:**

`ffuf -w subdomains-top1million-5000.txt -u https://www.bakka.gov.tr/FUZZ`

Burada FUZZ yazma amacımız wordlisten alınan kelimelerin nereye geleceğinin göstermek içindir.

* <https://www.bakka.gov.tr/admin>
* <https://www.bakka.gov.tr/test> vb. şeklinde linklere deneme yapılıyor.

FFUF hakkında çeşitli araştırma, yazılar okursanız şöyle bir yazım ile karşılaşabilirsiniz:

`ffuf -w subdomains-top1million-5000.txt:FUZZ -u https://www.bakka.gov.tr/FUZZ`

Burada yapılan şey yukarıda bahsettiğimle aynı şey oluyor. Buradaki işlemi wordlisten alınan kelimelerin FUZZ kelimesine atandığını sonrasında bu kelimeleri url'e eklendiğini düşünebilirsiniz. Eğer wordlisti verdikten sonra iki nokta ( : ) ile böyle bir kelime ataması yaparak tarama yapmak istiyorsanız illa FUZZ yazmanıza gerek yok.

`ffuf -w subdomains-top1million-5000.txt:asd -u https://www.bakka.gov.tr/asd`

Wordlisten sonra noktalı virgül ile istediğinizi yazabilirsiniz ama URL'in sonuna aynı kelimeyi eklemelisiniz.

Hangi tarzda arama cümlesi yazacağınız size kalmış.

Gobuster yazımda da daha iyi anlatabilmek için kullandığım localimde bulunan bu dosya yapısını kullanacağım.

<figure><img src="https://3882444537-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FM9WJExkUmoonvvz0xard%2Fuploads%2Fgit-blob-088e049176f840b9d4795ac9c30c9e2d0dec09d5%2Fdir.png?alt=media" alt="" width="563"><figcaption></figcaption></figure>

Kullanacağımız wordliste yukarıdaki dosyalar ve dizinler olmadığı için "denemeKlasoru" kelimesini ekliyorum. Sonrasında tarama yapmak için şu komutu yazıyoruz:

`ffuf -u http://192.168.1.5/CTF/ctfLogin/FUZZ -w subdomains-top1million-5000.txt`

<figure><img src="https://3882444537-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FM9WJExkUmoonvvz0xard%2Fuploads%2Fgit-blob-0a2995c6294b499329726eaa5a1f385a73a95fad%2Fffuf%20sonuc.png?alt=media" alt=""><figcaption></figcaption></figure>

Localimizde yaptığımız sitede böyle bir sonuç alıyoruz. Canl bir sitede yapmak istiyorsak değişen bir şey olmuyor. Şimdi canlı bir site olan <https://www.bakka.gov.tr/> sitesinde deneyelim.

`ffuf -u https://www.bakka.gov.tr/FUZZ -w subdomains-top1million-5000.txt`

FFUF ile tarama yaparken hedef sisteme sürekli istek gönderdiğimiz için, sıkı bir güvenlik politikası olan sitelerde sürekli aynı IP üzerinden çıkan istekler şüpheli olacağı için site tarafından engellenme durumu söz konusu olabilir.

İstek sayısını çok fazla arttırmamız durumunda server gelen bütün isteklere cevap veremez ve devre dışı kalabilir. Bu yüzden istemsizce DOS-DDOS saldırısı yaparak hedefimizi devre dışı bırakmamak için istek sayılarımızı makul bir seviyede tutmalıyız.

Domain taramasına geçmeden önce dizin taramasında kullanabileceğiniz ek parametrelerden bahsetmek istiyorum.

* -mc \<statusCODE> : HTTP durum kodlarına göre bir filtreleme yapar. Belirtilen durum kodlarına sahip cevapları **ekrana yansıtır.**

`ffuf -u https://www.hedefsite.tr/FUZZ -w wordlist.txt -mc 200,301`

Sadece 200 ve 301 durum kodunu alan cevapları gösterir.

* -fc \<statusCode> : HTPP durum kodlarına göre bir filtreleme yapar. Belirtilen durum kodlarını sahip cevapları **ekrana yansıtmaz.**

`ffuf -u https://www.hedefsite.tr/FUZZ -w wordlist.txt -fc 404,403`

404 ve 403 durum kodları dönen cevapları göstermez.

* -o \<dosya ismi> : Çıktıların verilen dosya ismine kayıt edilmesi için kullanılır.

`ffuf -u https://www.hedefsite.tr/FUZZ -w wordlist.txt -o result.txt`

Taramanın sonucunu result.txt oluşturup dosyanın içine kaydeder.

* -t \<sayi> : Aynı anda kaç parçacığın (threads) çalışacağını belirlendiği parametredir. Default olarak 40 dır. Ne kadar fazla parçacık olursa o kadar aynı anda istek atılır demektir. Çok fazla threads sayısı çok fazla isteğe çok fazla istek sistemin çökmesine ya da sistemden banlanmamıza yol açabilir.

`ffuf -u https://www.hedefsite.tr/FUZZ -w wordlist.txt -t 100`

### Page Fuzzing

Bulduğumuz dizinde hangi uzantıya sahip dosyaların olduğun anlamak için uzantılar üzerinden de bir fuzzing işlemi gerçekleşitirebiliriz. Bunu yapmak için index dosyasının hangi uzantıya sahip olduğunu anlamamız gerekiyor. Wordlist olarak eklentilerin olduğu bir [wordlist](https://github.com/InfoSecWarrior/Offensive-Payloads/blob/main/File-Extensions-Wordlist.txt) kullanabiliriz.

`ffuf -u http://192.168.1.5/CTF/ctfLogin/denemeKlasoru/indexFUZZ -w extens-wordlist.txt`

Yukarıdaki kodun çıktısı olarak anladık ki ilk adımda bulduğumuz denemeKlasoru içinde bulunan index dosyasının uzantısın .php olduğunu buluyoruz. Bundan sonraki adımda dizin içindeki dosyaları keşfetmek için .php uzantılı bir wordlist kullanacağız.

<figure><img src="https://3882444537-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FM9WJExkUmoonvvz0xard%2Fuploads%2Fgit-blob-b95302035992e7a10063b5cec85e8e00581d9c3c%2Fextens%20fuzz.png?alt=media" alt="" width="563"><figcaption></figcaption></figure>

Bulduğumuz bu klasorun içinde tam olarak ne olduğunu bilmiyoruz. Yeni bulduğumuz bu klasör içinde yine tarama yapabiliriz. Sadece kullanacağımız URL de küçük bir değişik olucak ayrıca wordlistimizi değiştireceğiz. Araştırarak sık kullanılan dosya isimlerini içeren bir [wordlist](https://github.com/emadshanab/WordLists-20111129/blob/master/Filenames_Doted_All.wordlist) buldum.

<figure><img src="https://3882444537-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FM9WJExkUmoonvvz0xard%2Fuploads%2Fgit-blob-95f18538985c5efb41defb4a96d6835ea7b4255e%2Fpage%20fuzzing.png?alt=media" alt=""><figcaption></figcaption></figure>

Denemeklasorunun içinde ise şu 4 dosya bulunuyor. Şimdi FFUF ile bu 3 dosyayı bulmak için şu komutu yazıyoruz.

`ffuf -u http://192.168.1.5/CTF/ctfLogin/denemeKlasoru/FUZZ -w subdomain-filename.txt`

<figure><img src="https://3882444537-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FM9WJExkUmoonvvz0xard%2Fuploads%2Fgit-blob-6096ef0df2bb019f1f300804136e9cf4fae3cea0%2Fpage%20fuzzing2.png?alt=media" alt="" width="563"><figcaption></figcaption></figure>

Sonuç olarak şöyle bir sonuç alıyoruz.

### Subdomain Fuzzing

Bu konu başlığımızda ise FFUF ile subdomainlerin varlığı kontrol edeceğiz. Subdomain keşfetmek bizim ne işimize yarayacak derseniz, gizli veya hassas bilgileri bulma, eski veya güvenliksiz uygulamalar, farklı uygulama ve servisleri bulma gibi durumlarda işimize yarar.

Syntax olarak daha önce yaptıklarımıza gayet benzer bir şey yapacağız sadece kullandığımız FUZZ kelimesi URL'in sonunda değil başında yer alacak. Google'un bir sürü subdomani i olduğu için bu örneğimizde Google'ı kullanacağım.

`ffuf -u https://www.FUZZ.google.com -w subdomains-top1million-5000.txt`

<figure><img src="https://3882444537-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FM9WJExkUmoonvvz0xard%2Fuploads%2Fgit-blob-90dae99c046283c7df01a52a1c8788331c5b83fb%2Fsubdomain%20sonuc.png?alt=media" alt=""><figcaption><p>Yukarıda gördüğünüz üzere bir sürü subdomain çıkıyor.</p></figcaption></figure>

### Recursive Fuzzing

Rekürsif bir şekilde bulduğu dosyaların içine gire gire tarama yapan bir arama tipidir. Bu arama tipini kullanabilmek için -recursion ve -recursion-depth parametrelerin vermemiz lazım.

-recursion parametresi taramanın aktif edilmesi için kullanılır. -recursion-depth ise kaç klasör ve dizin ötesine kadar tarama yapılacağını belirtmek için kullanılır.

Örnek bir kullanım:

`ffuf -w subdomains-top1million-5000.txt -u https://www.bakka.gov.tr/FUZZ -recursion -recursion-depth 5 -e .php , .html`

Burada kullandığım -e parametresi wordliste bulunan kelimelerin sonuna eklenir ve denemeler bunun üzeriden yapılır.

Ne kadar büyük bir -recursion-depth değeri verirseniz tarama o kadar uzun sürer.

> Bu yazı [*Yavuz Kuk*](https://www.linkedin.com/in/yavuzkuk/) tarafından hazırlanmıştır.
