BOOK THIS SPACE FOR AD
ARTICLE ADDizin ve parametre fuzzing/brute-forcing için kullanılabilecek birçok araç ve yöntem vardır. Bu modülde, web fuzzing için mevcut en yaygın ve güvenilir araçlardan biri olduğu için esas olarak web fuzzing için ffuf aracına odaklanacağız.
Aşağıdaki konular ele alınacaktır:
Dizinler için FuzzingDosyalar ve uzantılar için fuzzingGizli vhost’ları belirlemePHP parametreleri için fuzzingParametre değerleri için fuzzingffuf gibi araçlar, web uygulamasının tek tek bileşenlerini veya bir web sayfasını fuzzlamak için bize kullanışlı bir otomatik yol sağlar. Bu, örneğin, listemizdeki adı taşıyan sayfanın web sunucusunda var olup olmadığını web sunucusuna istek göndermek için kullanılan bir liste kullandığımız anlamına gelir. Eğer 200 yanıt kodu alırsak, bu sayfanın web sunucusunda var olduğunu biliriz ve sayfaya manuel olarak bakabiliriz.
Web Fuzzing
Dizinler için web sitelerini fuzzlamak için ffuf kullanmanın temellerini öğrenerek başlayacağız. Aşağıdaki sorudaki alıştırmayı çalıştırıyoruz ve bize verdiği URL’yi ziyaret ediyoruz ve aşağıdaki web sitesini görüyoruz:
Web sitesinde başka hiçbir şeye bağlantı yok ve bizi daha fazla sayfaya yönlendirebilecek herhangi bir bilgi de vermiyor. Görünüşe göre tek seçeneğimiz web sitesini ‘fuzz’lamak.
Fuzzing
Fuzzing terimi, nasıl tepki vereceğini incelemek için belirli bir arayüze çeşitli kullanıcı girdileri gönderen bir test tekniğini ifade eder. SQL enjeksiyon açıkları için fuzzing yapıyor olsaydık, rastgele özel karakterler gönderir ve sunucunun nasıl tepki vereceğini görürdük. Bir buffer taşması için fuzzing yapıyor olsaydık, uzun dizeler gönderiyor ve ikilinin kırılıp kırılmayacağını ve ne zaman kırılacağını görmek için uzunluklarını artırıyor olurduk.
Web sunucusunun bunları kabul edip etmeyeceğini görmek için genellikle web fuzzing için her test türü için yaygın olarak kullanılan terimlerin önceden tanımlanmış kelime listelerini kullanırız. Bunun nedeni, web sunucularının genellikle mevcut tüm bağlantıların ve domainlerin bir dizinini sağlamamasıdır (korkunç bir şekilde yapılandırılmadıkça) ve bu nedenle çeşitli bağlantıları kontrol etmemiz ve hangilerinin sayfa döndürdüğünü görmemiz gerekir. Örneğin, https://www.example.eu/doesnotexist adresini ziyaret edersek, bir HTTP kodu 404 Sayfa Bulunamadı alırız ve aşağıdaki sayfayı görürüz:
Ancak, /login gibi var olan bir sayfayı ziyaret edersek, giriş sayfasını alırız ve HTTP kodu 200 OK alırız ve aşağıdaki sayfayı görürüz:
Bu, sayfalar ve dizinler için web fuzzing’in arkasındaki temel fikirdir. Yine de, sonsuza kadar süreceği için bunu manuel olarak yapamayız. Bu nedenle bunu otomatik, verimli ve çok hızlı bir şekilde yapan araçlarımız var. Bu tür araçlar her saniye yüzlerce istek gönderir, yanıt HTTP kodunu inceler ve sayfanın var olup olmadığını belirler. Böylece, hangi sayfaların var olduğunu hızlı bir şekilde belirleyebilir ve ardından içeriklerini görmek için bunları manuel olarak inceleyebiliriz.
Wordlists
Hangi sayfaların var olduğunu belirlemek için, web dizinleri ve sayfaları için yaygın olarak kullanılan kelimeleri içeren bir kelime listesine sahip olmalıyız, bu da yazının ilerleyen bölümlerinde tartışacağımız “Password Dictionary Attack “a çok benzer. Bazı sayfalar rastgele adlandırıldığından veya benzersiz isimler kullandığından, bu belirli bir web sitesi altındaki tüm sayfaları ortaya çıkarmayacak olsa da, genel olarak bu, sayfaların çoğunu döndürür ve bazı web sitelerinde %90'a varan başarı oranına ulaşır.
Bu kelime listelerini manuel olarak oluşturarak tekerleği yeniden icat etmek zorunda kalmayacağız, çünkü web’de arama yapmak ve her bir fuzzing türü için en yaygın kullanılan kelimeleri belirlemek için büyük çaba sarf edilmiştir. En sık kullanılan kelime listelerinden bazıları, kelime listelerini çeşitli fuzzing türleri altında kategorize eden GitHub SecLists deposunda bulunabilir, hatta daha sonra Password Brute Forcing için kullanacağımız yaygın olarak kullanılan şifreler de dahil.
SecLists reposunun tamamını /opt/useful/SecLists altında bulabiliriz. Sayfalar ve dizin fuzzing için kullanacağımız özel kelime listesi, directory-list-2.3 adlı yaygın olarak kullanılan başka bir kelime listesidir ve çeşitli şekillerde ve boyutlarda mevcuttur. Kullanacağımız listeyi aşağıda bulabilirsiniz:
M1R4CKCK@htb[/htb]$ locate directory-list-2.3-small.txt/opt/useful/SecLists/Discovery/Web-Content/directory-list-2.3-small.txt
İpucu: Bu kelime listesine baktığımızda, başlangıçta kelime listesinin bir parçası olarak kabul edilebilecek ve sonuçları karıştırabilecek telif hakkı yorumları içerdiğini fark edeceğiz. Bu satırlardan kurtulmak için aşağıdaki komutu -ic bayrağı ile kullanabiliriz.
Directory Fuzzing
Artık Web Fuzzing kavramını anladığımıza ve kelime listemizi bildiğimize göre, web sitesi dizinlerini bulmak için ffuf kullanmaya başlamaya hazır olmalıyız.
Ffuf
Bu aracın yeni bir kullanıcısı olarak, araçların nasıl kullanılabileceğini görmek için ffuf -h komutunu vererek başlayacağız:
Directory Fuzzing
Yukarıdaki örnekten de görebileceğimiz gibi, ana iki seçenek kelime listeleri için -w ve URL için -u’dur. Bir kelime listesini, fuzz yapmak istediğimiz yerde başvurmak için bir anahtar kelimeye atayabiliriz. Örneğin, kelime listemizi seçebilir ve arkasına :FUZZ ekleyerek FUZZ anahtar kelimesini atayabiliriz:
M1R4CKCK@htb[/htb]$ ffuf -w /opt/useful/SecLists/Discovery/Web-Content/directory-list-2.3-small.txt:FUZZDaha sonra, web dizinleri için fuzzing yapmak istediğimizden, FUZZ anahtar kelimesini URL’mizde dizinin olacağı yere yerleştirebiliriz:
M1R4CKCK@htb[/htb]$ ffuf -w <SNIP> -u http://SERVER_IP:PORT/FUZZŞimdi, aşağıdaki soruda hedefimizi başlatalım ve üzerinde son komutumuzu çalıştıralım:
M1R4CKCK@htb[/htb]$ ffuf -w /opt/useful/SecLists/Discovery/Web-Content/directory-list-2.3-small.txt:FUZZ -u http://SERVER_IP:PORT/FUZZ /'___\ /'___\ /'___\
/\ \__/ /\ \__/ __ __ /\ \__/
\ \ ,__\\ \ ,__\/\ \/\ \ \ \ ,__\
\ \ \_/ \ \ \_/\ \ \_\ \ \ \ \_/
\ \_\ \ \_\ \ \____/ \ \_\
\/_/ \/_/ \/___/ \/_/
v1.1.0-git
________________________________________________
:: Method : GET
:: URL : http://SERVER_IP:PORT/FUZZ
:: Wordlist : FUZZ: /opt/useful/SecLists/Discovery/Web-Content/directory-list-2.3-small.txt
:: Follow redirects : false
:: Calibration : false
:: Timeout : 10
:: Threads : 40
:: Matcher : Response status: 200,204,301,302,307,401,403
________________________________________________
<SNIP>
blog [Status: 301, Size: 326, Words: 20, Lines: 10]
:: Progress: [87651/87651] :: Job [1/1] :: 9739 req/sec :: Duration: [0:00:09] :: Errors: 0 ::
ffuf’un yaklaşık 90 bin URL’yi 10 saniyeden daha kısa bir sürede test ettiğini görüyoruz. Bu hız, makinenizde ffuf kullandıysanız internet hızınıza ve ping’inize bağlı olarak değişebilir, ancak yine de son derece hızlı olmalıdır.
Acelemiz varsa, örneğin -t 200 ile iş parçacığı sayısını 200'e çıkararak daha hızlı gitmesini sağlayabiliriz, ancak bu, özellikle uzak bir sitede kullanıldığında, siteyi bozabileceğinden ve Denial of Service’e neden olabileceğinden veya ciddi durumlarda internet bağlantınızı çökertebileceğinden önerilmez. Birkaç isabet alıyoruz ve var olduğunu doğrulamak için bunlardan birini ziyaret edebiliriz:
Boş bir sayfa alırız, bu da dizinin özel bir sayfası olmadığını gösterir, ancak 404 Not Found veya 403 Access Denied HTTP kodu almadığımız için dizine erişimimiz olduğunu da gösterir. Bir sonraki bölümde, gerçekten boş mu yoksa gizli dosya ve sayfalara mı sahip olduğunu görmek için bu dizin altındaki sayfalara bakacağız.
Soru : Yukarıda bulduğumuz dizine ek olarak bulunabilecek başka bir dizin daha vardır. Nedir bu dizin?
Cevap : forum
1- Zaten önceden /blog sayfası keşfedilmişti başka bir dizin keşfedelim.
Page Fuzzing
Şimdi kelime listeleri ve anahtar kelimeleri kullanarak ffuf’un temel kullanımını anlıyoruz. Daha sonra, sayfaların nasıl bulunacağını öğreneceğiz.
Not: Bu bölümdeki örnekler için de önceki bölümdeki aynı hedefi kullanabiliriz.
Extension Fuzzing
Önceki bölümde, /blog dizinine erişimimiz olduğunu, ancak dizinin boş bir sayfa döndüğünü ve herhangi bir bağlantıyı veya sayfayı manuel olarak bulamadığımızı gördük. Bu nedenle, dizinin herhangi bir gizli sayfa içerip içermediğini görmek için bir kez daha web fuzzing kullanacağız. Ancak, başlamadan önce, web sitesinin .html, .aspx, .php veya başka bir şey gibi ne tür sayfalar kullandığını öğrenmeliyiz.
Bunu belirlemenin yaygın bir yolu, HTTP yanıt başlıkları aracılığıyla sunucu türünü bulmak ve uzantıyı tahmin etmektir. Örneğin, sunucu apache ise .php olabilir veya IIS ise .asp veya .aspx olabilir vb. Ancak bu yöntem çok pratik değildir. Bu nedenle, dizinleri fuzzladığımıza benzer şekilde uzantıyı fuzzlamak için yine ffuf kullanacağız. FUZZ anahtar kelimesini dizin adının olduğu yere yerleştirmek yerine, uzantının .FUZZ olacağı yere yerleştireceğiz ve yaygın uzantılar için bir kelime listesi kullanacağız. Uzantılar için SecLists’te aşağıdaki kelime listesini kullanabiliriz:
M1R4CKCK@htb[/htb]$ ffuf -w /opt/useful/SecLists/Discovery/Web-Content/web-extensions.txt:FUZZ <SNIP>Fuzzing işlemine başlamadan önce, bu uzantının hangi dosyanın sonunda olacağını belirtmeliyiz! Her zaman iki kelime listesi kullanabilir ve her biri için benzersiz bir anahtar kelimeye sahip olabiliriz ve ardından her ikisini de fuzzlamak için FUZZ_1.FUZZ_2 yapabiliriz. Ancak, çoğu web sitesinde her zaman bulabileceğimiz bir dosya vardır, bu da index.*, bu yüzden dosyamız olarak onu kullanacağız ve üzerindeki uzantıları fuzzlayacağız.
Not: Seçtiğimiz kelime listesi zaten bir nokta (.) içeriyor, bu nedenle fuzzing işlemimizde “index” kelimesinden sonra nokta eklememiz gerekmeyecek.
Şimdi, FUZZ anahtar sözcüğümüzü index’ten sonra uzantının olacağı yere dikkatlice yerleştirerek komutumuzu yeniden çalıştırabiliriz:
M1R4CKCK@htb[/htb]$ ffuf -w /opt/useful/SecLists/Discovery/Web-Content/web-extensions.txt:FUZZ -u http://SERVER_IP:PORT/blog/indexFUZZ /'___\ /'___\ /'___\
/\ \__/ /\ \__/ __ __ /\ \__/
\ \ ,__\\ \ ,__\/\ \/\ \ \ \ ,__\
\ \ \_/ \ \ \_/\ \ \_\ \ \ \ \_/
\ \_\ \ \_\ \ \____/ \ \_\
\/_/ \/_/ \/___/ \/_/
v1.1.0-git
________________________________________________
:: Method : GET
:: URL : http://SERVER_IP:PORT/blog/indexFUZZ
:: Wordlist : FUZZ: /opt/useful/SecLists/Discovery/Web-Content/web-extensions.txt
:: Follow redirects : false
:: Calibration : false
:: Timeout : 10
:: Threads : 5
:: Matcher : Response status: 200,204,301,302,307,401,403
________________________________________________
.php [Status: 200, Size: 0, Words: 1, Lines: 1]
.phps [Status: 403, Size: 283, Words: 20, Lines: 10]
:: Progress: [39/39] :: Job [1/1] :: 0 req/sec :: Duration: [0:00:00] :: Errors: 0 ::
Birkaç hit alıyoruz, ancak yalnızca .php bize 200 koduyla yanıt veriyor. Harika! Artık PHP dosyalarını fuzzing yapmaya başlamak için bu web sitesinin PHP ile çalıştığını biliyoruz.
Page Fuzzing
Şimdi ffuf ile kullandığımız aynı anahtar kelime kavramını kullanacağız, uzantı olarak .php kullanacağız, FUZZ anahtar kelimemizi dosya adının olması gereken yere yerleştireceğiz ve fuzzing dizinleri için kullandığımız aynı kelime listesini kullanacağız:
M1R4CKCK@htb[/htb]$ ffuf -w /opt/useful/SecLists/Discovery/Web-Content/directory-list-2.3-small.txt:FUZZ -u http://SERVER_IP:PORT/blog/FUZZ.php /'___\ /'___\ /'___\
/\ \__/ /\ \__/ __ __ /\ \__/
\ \ ,__\\ \ ,__\/\ \/\ \ \ \ ,__\
\ \ \_/ \ \ \_/\ \ \_\ \ \ \ \_/
\ \_\ \ \_\ \ \____/ \ \_\
\/_/ \/_/ \/___/ \/_/
v1.1.0-git
________________________________________________
:: Method : GET
:: URL : http://SERVER_IP:PORT/blog/FUZZ.php
:: Wordlist : FUZZ: /opt/useful/SecLists/Discovery/Web-Content/directory-list-2.3-small.txt
:: Follow redirects : false
:: Calibration : false
:: Timeout : 10
:: Threads : 40
:: Matcher : Response status: 200,204,301,302,307,401,403
________________________________________________
index [Status: 200, Size: 0, Words: 1, Lines: 1]
REDACTED [Status: 200, Size: 465, Words: 42, Lines: 15]
:: Progress: [87651/87651] :: Job [1/1] :: 5843 req/sec :: Duration: [0:00:15] :: Errors: 0 ::
Birkaç hit alıyoruz; her ikisinin de HTTP kodu 200, yani onlara erişebiliyoruz. index.php’nin boyutu 0, yani boş bir sayfa, diğerininki ise boş değil, yani içeriği var. Bunu doğrulamak için bu sayfalardan herhangi birini ziyaret edebiliriz:
Soru : Bu bölümde öğrendiklerinizi ‘/blog’ dizinini fuzz’lamak ve tüm sayfaları bulmak için kullanmaya çalışın. İçlerinden biri bir bayrak içermelidir. Bayrak nedir?
Cevap :
1- ffuf ile /blog dizininde .php uzantısı ile bir sayfa olup olmadığını test edelim.
2- home.php adresine ziyaret edelim .
Recursive Fuzzing
Şimdiye kadar dizinler için fuzzing yaptık, sonra bu dizinlerin altına girdik ve sonra dosyalar için fuzzing yaptık. Ancak, her biri kendi alt dizinlerine ve dosyalarına sahip düzinelerce dizinimiz olsaydı, bunun tamamlanması çok uzun zaman alırdı. Bunu otomatikleştirebilmek için Recursive Fuzzing olarak bilinen yöntemi kullanacağız.
Recursive Flags
Recursive tarama yaptığımızda, ana web sitesini ve tüm alt dizinlerini fuzz’layıncaya kadar sayfalarında olabilecek yeni tanımlanmış dizinler altında otomatik olarak başka bir tarama başlatır.
Bazı web siteleri /login/user/content/uploads/…vb. gibi büyük bir alt dizin ağacına sahip olabilir ve bu tarama ağacını genişletir ve hepsini taramak çok uzun zaman alabilir. Bu nedenle, Recursive taramamız için her zaman bir derinlik belirtmemiz önerilir, öyle ki bu derinlikten daha derin olan dizinleri taramayacaktır. İlk dizinleri bulanıklaştırdıktan sonra, en ilginç dizinleri seçebilir ve taramamızı daha iyi yönlendirmek için başka bir tarama çalıştırabiliriz.
ffuf’ta -recursion bayrağı ile recursive taramayı etkinleştirebilir ve -recursion-depth bayrağı ile derinliği belirleyebiliriz. Eğer -recursion-depth 1 olarak belirtirsek, sadece ana dizinleri ve onların doğrudan alt dizinlerini fuzzlayacaktır. Herhangi bir alt-alt-dizin tanımlanmışsa (/login/user gibi, sayfalar için onları fuzzlamayacaktır). ffuf’ta recursion kullanırken, uzantımızı -e .php ile belirtebiliriz
Not: Bu uzantılar genellikle site çapında olduğundan, sayfa uzantımız olarak hala `.php` kullanabiliriz.
Son olarak, tam URL’lerin çıktısını almak için -v bayrağını da ekleyeceğiz. Aksi takdirde, hangi .php dosyasının hangi dizin altında olduğunu söylemek zor olabilir.
Recursive Scanning
Kullandığımız ilk komutu tekrarlayalım, uzantımız olarak .php belirtirken recursion bayraklarını ekleyelim ve ne gibi sonuçlar elde ettiğimize bakalım:
M1R4CKCK@htb[/htb]$ ffuf -w /opt/useful/SecLists/Discovery/Web-Content/directory-list-2.3-small.txt:FUZZ -u http://SERVER_IP:PORT/FUZZ -recursion -recursion-depth 1 -e .php -v /'___\ /'___\ /'___\
/\ \__/ /\ \__/ __ __ /\ \__/
\ \ ,__\\ \ ,__\/\ \/\ \ \ \ ,__\
\ \ \_/ \ \ \_/\ \ \_\ \ \ \ \_/
\ \_\ \ \_\ \ \____/ \ \_\
\/_/ \/_/ \/___/ \/_/
v1.1.0-git
________________________________________________
:: Method : GET
:: URL : http://SERVER_IP:PORT/FUZZ
:: Wordlist : FUZZ: /opt/useful/SecLists/Discovery/Web-Content/directory-list-2.3-small.txt
:: Extensions : .php
:: Follow redirects : false
:: Calibration : false
:: Timeout : 10
:: Threads : 40
:: Matcher : Response status: 200,204,301,302,307,401,403
________________________________________________
[Status: 200, Size: 986, Words: 423, Lines: 56] | URL | http://SERVER_IP:PORT/
* FUZZ:
[INFO] Adding a new job to the queue: http://SERVER_IP:PORT/forum/FUZZ
[Status: 200, Size: 986, Words: 423, Lines: 56] | URL | http://SERVER_IP:PORT/index.php
* FUZZ: index.php
[Status: 301, Size: 326, Words: 20, Lines: 10] | URL | http://SERVER_IP:PORT/blog | --> | http://SERVER_IP:PORT/blog/
* FUZZ: blog
<...SNIP...>
[Status: 200, Size: 0, Words: 1, Lines: 1] | URL | http://SERVER_IP:PORT/blog/index.php
* FUZZ: index.php
[Status: 200, Size: 0, Words: 1, Lines: 1] | URL | http://SERVER_IP:PORT/blog/
* FUZZ:
<...SNIP...>
Bu sefer görebileceğimiz gibi, tarama çok daha uzun sürdü, neredeyse altı kat daha fazla istek gönderildi ve kelime listesinin boyutu iki katına çıktı (.php ile bir kez ve bir kez olmadan). Yine de, daha önce belirlediğimiz tüm sonuçlar da dahil olmak üzere, tek bir komut satırıyla çok sayıda sonuç elde ettik.
Soru : Daha fazla dosya/dizin bulmak için şimdiye kadar öğrendiklerinizi tekrarlamaya çalışın. Bunlardan biri size bir bayrak vermelidir. Bayrağın içeriği nedir?
Cevap :
1- Derinliği 2 yaparak daha uzun fakat daha fazla dizin bulabiliriz.
2- /forum dizininde /flag.php adlı bir yeni dizin keşfettik . Ziyaret edip bayrağımızı alalım .
DNS Records
Blog altındaki sayfaya eriştiğimizde, Admin panelinin academy.htb’ye taşındığını söyleyen bir mesaj aldık. Web sitesini tarayıcımızda ziyaret edersek, www.academy.htb adresindeki sunucuya bağlanamıyoruz:
Bunun nedeni, yaptığımız alıştırmaların herkes tarafından erişilebilen genel web siteleri değil, Sanal makine içindeki yerel web siteleri olmasıdır. Tarayıcılar yalnızca IP’lere nasıl gidileceğini anlar ve onlara bir URL sağlarsak, yerel /etc/hosts dosyasına ve genel DNS Domain Name System’e bakarak URL’yi bir IP ile eşleştirmeye çalışırlar. Eğer URL ikisinde de yoksa, ona nasıl bağlanacağını bilemez.
IP’yi doğrudan ziyaret edersek, tarayıcı doğrudan o IP’ye gider ve ona nasıl bağlanacağını bilir. Ancak bu durumda, biz ona academy.htb adresine gitmesini söylediğimiz için yerel /etc/hosts dosyasına bakar ve herhangi bir ibare bulamaz. Genel DNS’e sorar (Google’ın 8.8.8.8 DNS’i gibi) ve genel bir web sitesi olmadığı için herhangi bir ibare bulamaz ve sonunda bağlanamaz. Dolayısıyla, academy.htb’ye bağlanmak için onu /etc/hosts dosyamıza eklememiz gerekir. Bunu aşağıdaki komutla başarabiliriz:
M1R4CKCK@htb[/htb]$ sudo sh -c 'echo "SERVER_IP academy.htb" >> /etc/hosts'Doğrudan root yetkisi ile /etc/hosts dosyasını açıp da ekleyebiliriz. Yukarıdaki kod bunu tek satırda hallediyor.
Şimdi web sitesini ziyaret edebiliriz (URL’ye PORT eklemeyi unutmayın) ve web sitesine ulaşabildiğimizi görebiliriz:
Ancak, IP’yi doğrudan ziyaret ettiğimizde aldığımız web sitesinin aynısını alıyoruz, yani academy.htb şimdiye kadar test ettiğimiz domain ile aynı. Bunu /blog/index.php adresini ziyaret ederek doğrulayabilir ve sayfaya erişebildiğimizi görebiliriz.
Testlerimizi bu IP üzerinde çalıştırdığımızda, hedefimiz üzerinde tam bir recursive tarama yaptığımızda bile admin veya paneller hakkında hiçbir şey bulamadık. Bu durumda, ‘*.academy.htb’ altında sub-domain aramaya başlayacağız ve bir şey bulup bulamayacağımıza bakacağız, ki bunu bir sonraki bölümde deneyeceğiz.
Sub-domain Fuzzing
Bu bölümde, herhangi bir web sitesinin alt domainlerini (yani, *.website.com) tanımlamak için ffuf’u nasıl kullanacağımızı öğreneceğiz.
Sub-domains
Sub-domain, başka bir domainin altında yer alan herhangi bir web sitesidir. Örneğin, https://photos.google.com google.com’un fotoğraflar sub-domain’idir.
Bu durumda, bizi çalışan bir sunucu IP’sine yönlendirecek genel bir DNS kaydına sahip olup olmadıklarını kontrol ederek var olup olmadıklarını görmek için farklı web sitelerini kontrol ediyoruz. Öyleyse, bir tarama yapalım ve herhangi bir isabet alıp almadığımıza bakalım. Taramamızı başlatmadan önce iki şeye ihtiyacımız var:
wordlisttargetNeyse ki, SecLists deposunda, subdomain kelime listeleri için genellikle sub-domainler için kullanılan yaygın kelimelerden oluşan özel bir bölüm var. Bunu /opt/useful/SecLists/Discovery/DNS/ adresinde bulabiliriz. Bizim durumumuzda, subdomains-top1million-5000.txt olan daha kısa bir kelime listesi kullanacağız. Taramamızı genişletmek istiyorsak, daha büyük bir liste seçebiliriz.
Hedefimize gelince, hedefimiz olarak inlanefreight.com’u kullanacağız ve taramamızı bunun üzerinde çalıştıracağız. ffuf kullanalım ve FUZZ anahtar kelimesini sub-domainlerin yerine yerleştirelim ve herhangi bir hit alıp almadığımıza bakalım:
M1R4CKCK@htb[/htb]$ ffuf -w /opt/useful/SecLists/Discovery/DNS/subdomains-top1million-5000.txt:FUZZ -u https://FUZZ.inlanefreight.com/ /'___\ /'___\ /'___\
/\ \__/ /\ \__/ __ __ /\ \__/
\ \ ,__\\ \ ,__\/\ \/\ \ \ \ ,__\
\ \ \_/ \ \ \_/\ \ \_\ \ \ \ \_/
\ \_\ \ \_\ \ \____/ \ \_\
\/_/ \/_/ \/___/ \/_/
v1.1.0-git
________________________________________________
:: Method : GET
:: URL : https://FUZZ.inlanefreight.com/
:: Wordlist : FUZZ: /usr/share/seclists/Discovery/DNS/subdomains-top1million-5000.txt
:: Follow redirects : false
:: Calibration : false
:: Timeout : 10
:: Threads : 40
:: Matcher : Response status: 200,204,301,302,307,401,403,405,500
________________________________________________
[Status: 301, Size: 0, Words: 1, Lines: 1, Duration: 381ms]
* FUZZ: support
[Status: 301, Size: 0, Words: 1, Lines: 1, Duration: 385ms]
* FUZZ: ns3
[Status: 301, Size: 0, Words: 1, Lines: 1, Duration: 402ms]
* FUZZ: blog
[Status: 301, Size: 0, Words: 1, Lines: 1, Duration: 180ms]
* FUZZ: my
[Status: 200, Size: 22266, Words: 2903, Lines: 316, Duration: 589ms]
* FUZZ: www
<...SNIP...>
Birkaç isabet aldığımızı görüyoruz. Şimdi, aynı şeyi academy.htb üzerinde çalıştırmayı deneyebilir ve herhangi bir isabet alıp almadığımızı görebiliriz:
M1R4CKCK@htb[/htb]$ ffuf -w /opt/useful/SecLists/Discovery/DNS/subdomains-top1million-5000.txt:FUZZ -u http://FUZZ.academy.htb/ /'___\ /'___\ /'___\
/\ \__/ /\ \__/ __ __ /\ \__/
\ \ ,__\\ \ ,__\/\ \/\ \ \ \ ,__\
\ \ \_/ \ \ \_/\ \ \_\ \ \ \ \_/
\ \_\ \ \_\ \ \____/ \ \_\
\/_/ \/_/ \/___/ \/_/
v1.1.0-git
________________________________________________
:: Method : GET
:: URL : https://FUZZ.academy.htb/
:: Wordlist : FUZZ: /opt/useful/SecLists/Discovery/DNS/subdomains-top1million-5000.txt
:: Follow redirects : false
:: Calibration : false
:: Timeout : 10
:: Threads : 40
:: Matcher : Response status: 200,204,301,302,307,401,403
________________________________________________
:: Progress: [4997/4997] :: Job [1/1] :: 131 req/sec :: Duration: [0:00:38] :: Errors: 4997 ::
Herhangi bir geri dönüş almadığımızı görüyoruz. Bu, academy.htb altında sub domain olmadığı anlamına mı geliyor? — Hayır.
Bu, daha önce de belirtildiği gibi herkese açık bir DNS kaydına sahip olmadığı için academy.htb altında herkese açık sub-domainler olmadığı anlamına gelir. academy.htb dosyasını /etc/hosts dosyamıza eklemiş olsak da, yalnızca ana domain’i ekledik, bu nedenle ffuf diğer alt domain’leri aradığında, bunları /etc/hosts dosyasında bulamayacak ve genel DNS’e soracaktır, ki bu da açık bir şekilde bunlara sahip olmayacaktır.
Soru : Bir müşteri sub-domain portalı bulmak için ‘inlanefreight.com’ üzerinde bir sub-domain fuzzing testi çalıştırmayı deneyin. Tam domain adı nedir?
Cevap : customer
Vhost Fuzzing
Önceki bölümde gördüğümüz gibi, herkese açık DNS kayıtlarını kullanarak herkese açık sub domainleri fuzz edebildik. Ancak, herkese açık bir DNS kaydı olmayan sub domainleri veya herkese açık olmayan web siteleri altındaki sub domainleri fuzzing yapmak söz konusu olduğunda, aynı yöntemi kullanamayız. Bu bölümde Vhost Fuzzing ile bunu nasıl yapacağımızı öğreneceğiz.
Vhostlar vs. Sub-domains
VHost’lar ve sub-domain’ler arasındaki temel fark, bir VHost’un temelde aynı sunucuda sunulan ve aynı IP’ye sahip bir ‘sub-domain’ olmasıdır, öyle ki tek bir IP iki veya daha fazla farklı web sitesine hizmet veriyor olabilir.
Vhostlar vs. Sub-domains
VHost’lar ve sub-domain’ler arasındaki temel fark, bir VHost’un temelde aynı sunucuda sunulan ve aynı IP’ye sahip bir ‘sub-domain’ olmasıdır, öyle ki tek bir IP iki veya daha fazla farklı web sitesine hizmet veriyor olabilir.
VHost’ların genel DNS kayıtları olabilir ya da olmayabilir.
Birçok durumda, birçok web sitesi aslında herkese açık olmayan sub domainlere sahip olur ve bunları herkese açık DNS kayıtlarında yayınlamaz ve bu nedenle onları bir tarayıcıda ziyaret edersek, herkese açık DNS IP’lerini bilmeyeceğinden bağlanamayız. Bir kez daha, sub domain fuzzing kullanırsak, yalnızca public sub domainleri tespit edebiliriz ancak public olmayan sub domainleri tespit edemeyiz.
Bu noktada, halihazırda sahip olduğumuz bir IP üzerinde VHosts Fuzzing’i kullanıyoruz. Aynı IP üzerinde bir tarama ve tarama testi yapacağız ve ardından hem herkese açık hem de herkese açık olmayan sub-domainleri ve VHost’ları tanımlayabileceğiz.
Vhosts Fuzzing
VHost’ları taramak için, tüm kelime listesini /etc/hosts dosyamıza manuel olarak eklemeden, HTTP başlıklarını, özellikle de Host: başlığını fuzzing yapacağız. Bunu yapmak için, bir başlık belirtmek için -H bayrağını kullanabiliriz ve aşağıdaki gibi içinde FUZZ anahtar kelimesini kullanacağız:
M1R4CKCK@htb[/htb]$ ffuf -w /opt/useful/SecLists/Discovery/DNS/subdomains-top1million-5000.txt:FUZZ -u http://academy.htb:PORT/ -H 'Host: FUZZ.academy.htb' /'___\ /'___\ /'___\
/\ \__/ /\ \__/ __ __ /\ \__/
\ \ ,__\\ \ ,__\/\ \/\ \ \ \ ,__\
\ \ \_/ \ \ \_/\ \ \_\ \ \ \ \_/
\ \_\ \ \_\ \ \____/ \ \_\
\/_/ \/_/ \/___/ \/_/
v1.1.0-git
________________________________________________
:: Method : GET
:: URL : http://academy.htb:PORT/
:: Wordlist : FUZZ: /opt/useful/SecLists/Discovery/DNS/subdomains-top1million-5000.txt
:: Header : Host: FUZZ
:: Follow redirects : false
:: Calibration : false
:: Timeout : 10
:: Threads : 40
:: Matcher : Response status: 200,204,301,302,307,401,403
________________________________________________
mail2 [Status: 200, Size: 900, Words: 423, Lines: 56]
dns2 [Status: 200, Size: 900, Words: 423, Lines: 56]
ns3 [Status: 200, Size: 900, Words: 423, Lines: 56]
dns1 [Status: 200, Size: 900, Words: 423, Lines: 56]
lists [Status: 200, Size: 900, Words: 423, Lines: 56]
webmail [Status: 200, Size: 900, Words: 423, Lines: 56]
static [Status: 200, Size: 900, Words: 423, Lines: 56]
web [Status: 200, Size: 900, Words: 423, Lines: 56]
www1 [Status: 200, Size: 900, Words: 423, Lines: 56]
<...SNIP...>
Kelime listesindeki tüm kelimelerin 200 OK döndürdüğünü görüyoruz! Bu beklenen bir durum, çünkü http://academy.htb:PORT/ adresini ziyaret ederken sadece başlığı değiştiriyoruz. Yani, her zaman 200 OK alacağımızı biliyoruz. Ancak, VHost mevcutsa ve başlıkta doğru bir tane gönderirsek, farklı bir yanıt boyutu almalıyız, çünkü bu durumda, muhtemelen farklı bir sayfa gösterecek olan VHost’lardan sayfa alacağız.
Sonuçları Filtreleme
Şimdiye kadar, ffuf’umuzda herhangi bir filtreleme kullanmadık ve sonuçlar varsayılan olarak HTTP kodlarına göre otomatik olarak filtreleniyor, bu da 404 NOT FOUND kodunu filtreliyor ve geri kalanını tutuyor. Ancak, önceki ffuf çalıştırmamızda gördüğümüz gibi, 200 kodlu birçok yanıt alabiliriz. Bu durumda, sonuçları bu bölümde öğreneceğimiz başka bir faktöre göre filtrelememiz gerekecektir.
Filtreleme
Ffuf, belirli bir HTTP kodunu, yanıt boyutunu veya kelime miktarını eşleştirme veya filtreleme seçeneği sunar. Bunu ffuf -h ile görebiliriz:
M1R4CKCK@htb[/htb]$ ffuf -h...SNIP...
MATCHER OPTIONS:
-mc Match HTTP status codes, or "all" for everything. (default: 200,204,301,302,307,401,403)
-ml Match amount of lines in response
-mr Match regexp
-ms Match HTTP response size
-mw Match amount of words in response
FILTER OPTIONS:
-fc Filter HTTP status codes from response. Comma separated list of codes and ranges
-fl Filter by amount of lines in response. Comma separated list of line counts and ranges
-fr Filter regexp
-fs Filter HTTP response size. Comma separated list of sizes and ranges
-fw Filter by amount of words in response. Comma separated list of word counts and ranges
<...SNIP...>
Bu durumda, diğer VHost’lardan gelen yanıt boyutunun ne olacağını bilmediğimiz için eşleştirmeyi kullanamayız. Yukarıdaki testten de görüldüğü gibi, yanlış sonuçların yanıt boyutunun 900 olduğunu biliyoruz ve bunu -fs 900 ile filtreleyebiliriz. Şimdi, aynı önceki komutu tekrarlayalım, yukarıdaki bayrağı ekleyelim ve ne elde ettiğimize bakalım:
M1R4CKCK@htb[/htb]$ ffuf -w /opt/useful/SecLists/Discovery/DNS/subdomains-top1million-5000.txt:FUZZ -u http://academy.htb:PORT/ -H 'Host: FUZZ.academy.htb' -fs 900 /'___\ /'___\ /'___\
/\ \__/ /\ \__/ __ __ /\ \__/
\ \ ,__\\ \ ,__\/\ \/\ \ \ \ ,__\
\ \ \_/ \ \ \_/\ \ \_\ \ \ \ \_/
\ \_\ \ \_\ \ \____/ \ \_\
\/_/ \/_/ \/___/ \/_/
v1.1.0-git
________________________________________________
:: Method : GET
:: URL : http://academy.htb:PORT/
:: Wordlist : FUZZ: /opt/useful/SecLists/Discovery/DNS/subdomains-top1million-5000.txt
:: Header : Host: FUZZ.academy.htb
:: Follow redirects : false
:: Calibration : false
:: Timeout : 10
:: Threads : 40
:: Matcher : Response status: 200,204,301,302,307,401,403
:: Filter : Response size: 900
________________________________________________
<...SNIP...>
admin [Status: 200, Size: 0, Words: 1, Lines: 1]
:: Progress: [4997/4997] :: Job [1/1] :: 1249 req/sec :: Duration: [0:00:04] :: Errors: 0 ::
Sayfayı ziyaret ederek ve bağlanıp bağlanamayacağımızı görerek bunu doğrulayabiliriz:
Not 1: “admin.academy.htb” adresini “/etc/hosts” dosyasına eklemeyi unutmayın.
Not 2: Egzersiziniz yeniden başlatıldıysa, web sitesini ziyaret ederken hala doğru bağlantı noktasına sahip olduğunuzdan emin olun.
Sayfaya erişebildiğimizi görüyoruz, ancak academy.htb ile elde ettiğimizden farklı olarak boş bir sayfa alıyoruz, bu nedenle bunun gerçekten farklı bir VHost olduğunu doğruluyoruz. Hatta https://admin.academy.htb:PORT/blog/index.php adresini ziyaret edebiliriz ve 404 SAYFA BULUNAMADI hatası alacağımızı görürüz, bu da gerçekten farklı bir VHost’ta olduğumuzu teyit eder.
admin.academy.htb üzerinde recursive bir tarama çalıştırmayı deneyin ve hangi sayfaları tanımlayabileceğinizi görün.
Soru : ‘academy.htb’ üzerinde bir VHost fuzzing taraması çalıştırmayı deneyin ve başka hangi VHost’ları elde ettiğinize bakın. Başka hangi VHost’ları elde ettiniz?
Cevap : test.academy.htb
1- Öncelikle /etc/hosts dosyamıza ip adresini ve url adını yazalım .
2- Fuzz vhost ve subdomain arayalım . Farklı olarak bulunan vhost veya subdomain adresmiz cevabımızdır.
ffuf -w /opt/useful/SecLists/Discovery/DNS/subdomains-top1million-5000.txt:FUZZ -u http://academy.htb:58381/ -H 'Host: FUZZ.academy.htb' -ic -fs 986 /'___\ /'___\ /'___\
/\ \__/ /\ \__/ __ __ /\ \__/
\ \ ,__\\ \ ,__\/\ \/\ \ \ \ ,__\
\ \ \_/ \ \ \_/\ \ \_\ \ \ \ \_/
\ \_\ \ \_\ \ \____/ \ \_\
\/_/ \/_/ \/___/ \/_/
v2.1.0
________________________________________________
:: Method : GET
:: URL : http://academy.htb:58381/
:: Wordlist : FUZZ: /opt/useful/SecLists/Discovery/DNS/subdomains-top1million-5000.txt
:: Header : Host: FUZZ.academy.htb
:: Follow redirects : false
:: Calibration : false
:: Timeout : 10
:: Threads : 40
:: Matcher : Response status: 200-299,301,302,307,401,403,405,500
:: Filter : Response size: 986
________________________________________________
admin [Status: 200, Size: 0, Words: 1, Lines: 1, Duration: 3ms]
test [Status: 200, Size: 0, Words: 1, Lines: 1, Duration: 0ms]
:: Progress: [4997/4997] :: Job [1/1] :: 74 req/sec :: Duration: [0:00:07] :: Errors: 0 ::
Parameter Fuzzing — GET
admin.academy.htb adresinde recursive ffuf taraması yaparsak http://admin.academy.htb:PORT/admin/admin.php adresini bulmamız gerekir. Bu sayfaya erişmeye çalışırsak aşağıdakileri görürüz:
Bu, bayrağı okuma erişimine sahip olup olmadıklarını doğrulamak için kullanıcıları tanımlayan bir şey olması gerektiğini gösterir. Giriş yapmadık ya da backend’de doğrulanabilecek herhangi bir cookie’ye sahip değiliz. Dolayısıyla, belki de bayrağı okumak için sayfaya iletebileceğimiz bir anahtar vardır. Bu tür anahtarlar genellikle bir GET ya da POST HTTP isteği kullanılarak parametre olarak aktarılır. Bu bölümde, sayfa tarafından kabul edilebilecek bir parametre belirleyene kadar bu tür parametreler için nasıl fuzz yapılacağı tartışılacaktır.
İpucu: Fuzzing parametreleri, herkesin erişebileceği yayınlanmamış parametreleri açığa çıkarabilir. Bu tür parametreler daha az test edilmiş ve daha az güvenli olma eğilimindedir.
GET Request Fuzzing
Bir web sitesinin çeşitli bölümlerini nasıl fuzzing yaptığımıza benzer şekilde, parametreleri numaralandırmak için ffuf kullanacağız. İlk olarak GET istekleri için fuzzing ile başlayalım, bunlar genellikle URL’den hemen sonra bir ? sembolü ile geçilir:
http://admin.academy.htb:PORT/admin/admin.php?param1=key.Dolayısıyla, tek yapmamız gereken yukarıdaki örnekte param1'i FUZZ ile değiştirmek ve taramamızı yeniden çalıştırmaktır. Ancak başlamadan önce uygun bir kelime listesi seçmeliyiz. Bir kez daha, SecLists /opt/useful/SecLists/Discovery/Web-Content/burp-parameter-names.txt içinde tam da bunu sunuyor. Bununla birlikte, taramamızı çalıştırabiliriz.
Bir kez daha, çok sayıda sonuç alacağız, bu nedenle aldığımız varsayılan yanıt boyutunu filtreleyeceğiz.
M1R4CKCK@htb[/htb]$ ffuf -w /opt/useful/SecLists/Discovery/Web-Content/burp-parameter-names.txt:FUZZ -u http://admin.academy.htb:PORT/admin/admin.php?FUZZ=key -fs xxx /'___\ /'___\ /'___\
/\ \__/ /\ \__/ __ __ /\ \__/
\ \ ,__\\ \ ,__\/\ \/\ \ \ \ ,__\
\ \ \_/ \ \ \_/\ \ \_\ \ \ \ \_/
\ \_\ \ \_\ \ \____/ \ \_\
\/_/ \/_/ \/___/ \/_/
v1.1.0-git
________________________________________________
:: Method : GET
:: URL : http://admin.academy.htb:PORT/admin/admin.php?FUZZ=key
:: Wordlist : FUZZ: /opt/useful/SecLists/Discovery/Web-Content/burp-parameter-names.txt
:: Follow redirects : false
:: Calibration : false
:: Timeout : 10
:: Threads : 40
:: Matcher : Response status: 200,204,301,302,307,401,403
:: Filter : Response size: xxx
________________________________________________
<...SNIP...> [Status: xxx, Size: xxx, Words: xxx, Lines: xxx]
Bir geri dönüş alıyoruz. Sayfayı ziyaret etmeyi deneyelim ve bu GET parametresini ekleyelim ve şimdi bayrağı okuyup okuyamayacağımızı görelim:
Gördüğümüz gibi, geri aldığımız tek isabet kullanımdan kaldırılmış ve artık kullanılmıyor gibi görünüyor.
Soru : Bu bölümde öğrendiklerinizi kullanarak, bu sayfada bir parametre fuzzing taraması yapın. bu web sayfası tarafından kabul edilen parametre nedir?
Cevap : user
1- İlk olarak /etc/hosts dosyamıza ip adresini ve url adresini ekleyelim. Ardından ffuf toolumuz ile işlemimizi yapalım.
Parameter Fuzzing — POST
POST istekleri ile GET istekleri arasındaki temel fark, POST isteklerinin URL ile birlikte iletilmemesi ve bir ? sembolünden sonra basitçe eklenememesidir. POST istekleri HTTP isteği içindeki veri alanında iletilir.
Veri alanını ffuf ile fuzzlamak için, daha önce ffuf -h çıktısında gördüğümüz gibi -d bayrağını kullanabiliriz. Ayrıca POST istekleri göndermek için -X POST eklememiz gerekir.
İpucu: PHP’de “POST” verisi “content-type” sadece “application/x-www-form-urlencoded” kabul edebilir. Dolayısıyla, bunu “ffuf” içinde “-H ‘Content-Type: application/x-www-form-urlencoded’” ile ayarlayabiliriz.
Öyleyse, daha önce yaptığımızı tekrarlayalım, ancak FUZZ anahtar sözcüğümüzü -d bayrağından sonra yerleştirelim:
M1R4CKCK@htb[/htb]$ ffuf -w /opt/useful/SecLists/Discovery/Web-Content/burp-parameter-names.txt:FUZZ -u http://admin.academy.htb:PORT/admin/admin.php -X POST -d 'FUZZ=key' -H 'Content-Type: application/x-www-form-urlencoded' -fs xxx /'___\ /'___\ /'___\
/\ \__/ /\ \__/ __ __ /\ \__/
\ \ ,__\\ \ ,__\/\ \/\ \ \ \ ,__\
\ \ \_/ \ \ \_/\ \ \_\ \ \ \ \_/
\ \_\ \ \_\ \ \____/ \ \_\
\/_/ \/_/ \/___/ \/_/
v1.1.0-git
________________________________________________
:: Method : POST
:: URL : http://admin.academy.htb:PORT/admin/admin.php
:: Wordlist : FUZZ: /opt/useful/SecLists/Discovery/Web-Content/burp-parameter-names.txt
:: Header : Content-Type: application/x-www-form-urlencoded
:: Data : FUZZ=key
:: Follow redirects : false
:: Calibration : false
:: Timeout : 10
:: Threads : 40
:: Matcher : Response status: 200,204,301,302,307,401,403
:: Filter : Response size: xxx
________________________________________________
id [Status: xxx, Size: xxx, Words: xxx, Lines: xxx]
<...SNIP...>
Bu sefer görebildiğimiz gibi, GET ve id olan başka bir parametreyi fuzzing yaparken elde ettiğimizle aynı olan birkaç isabet aldık. Bakalım id parametresi ile bir POST isteği gönderirsek ne elde edeceğiz. Bunu curl ile aşağıdaki gibi yapabiliriz:
M1R4CKCK@htb[/htb]$ curl http://admin.academy.htb:PORT/admin/admin.php -X POST -d 'id=key' -H 'Content-Type: application/x-www-form-urlencoded'<div class='center'><p>Invalid id!</p></div>
<...SNIP...>
Gördüğümüz gibi, mesaj artık Invalid id!
Value Fuzzing
Çalışan bir parametreyi fuzz ettikten sonra, şimdi ihtiyacımız olan bayrak içeriğini döndürecek doğru değeri fuzz etmeliyiz. Bu bölümde, kelime listemizi geliştirdikten sonra parametreler için fuzzing’e oldukça benzer olması gereken parametre değerleri için fuzzing tartışılacaktır.
Özel Kelime Listesi
Parametre değerlerini fuzzing yapmak söz konusu olduğunda, her parametre belirli bir değer türü bekleyeceğinden, her zaman işimize yarayacak önceden hazırlanmış bir kelime listesi bulamayabiliriz.
Kullanıcı adları gibi bazı parametreler için, potansiyel kullanıcı adları için önceden hazırlanmış bir kelime listesi bulabilir veya web sitesini potansiyel olarak kullanan kullanıcıları temel alarak kendi kelime listemizi oluşturabiliriz. Bu gibi durumlarda, seclists dizini altında çeşitli kelime listeleri arayabilir ve hedeflediğimiz parametreyle eşleşen değerleri içerebilecek bir tane bulmaya çalışabiliriz. Özel parametreler gibi diğer durumlarda, kendi kelime listemizi geliştirmemiz gerekebilir. Bu durumda, id parametresinin bir tür sayı girişi kabul edebileceğini tahmin edebiliriz. Bu id’ler özel bir formatta olabilir veya 1–1000 veya 1–1000000 gibi sıralı olabilir. 1–1000 arasındaki tüm sayıları içeren bir kelime listesi ile başlayacağız.
Bu kelime listesini oluşturmanın, ID’leri bir dosyaya elle yazmaktan Bash veya Python kullanarak komut dosyası oluşturmaya kadar birçok yolu vardır. En basit yol, Bash’te 1–1000 arasındaki tüm sayıları bir dosyaya yazan aşağıdaki komutu kullanmaktır:
M1R4CKCK@htb[/htb]$ for i in $(seq 1 1000); do echo $i >> ids.txt; doneKomutumuzu çalıştırdığımızda, kelime listemiz hazır olmalıdır:
M1R4CKCK@htb[/htb]$ cat ids.txt1
2
3
4
5
6
<...SNIP...>
Şimdi değerler için fuzzing işlemine geçebiliriz.
Value Fuzzing
Komutumuz, parametreleri fuzzlamak için kullandığımız POST komutuna oldukça benzer olmalıdır, ancak FUZZ anahtar kelimemiz parametre değerinin olacağı yere konulmalıdır ve az önce oluşturduğumuz ids.txt kelime listesini aşağıdaki gibi kullanacağız:
M1R4CKCK@htb[/htb]$ ffuf -w ids.txt:FUZZ -u http://admin.academy.htb:PORT/admin/admin.php -X POST -d 'id=FUZZ' -H 'Content-Type: application/x-www-form-urlencoded' -fs xxx /'___\ /'___\ /'___\
/\ \__/ /\ \__/ __ __ /\ \__/
\ \ ,__\\ \ ,__\/\ \/\ \ \ \ ,__\
\ \ \_/ \ \ \_/\ \ \_\ \ \ \ \_/
\ \_\ \ \_\ \ \____/ \ \_\
\/_/ \/_/ \/___/ \/_/
v1.0.2
________________________________________________
:: Method : POST
:: URL : http://admin.academy.htb:30794/admin/admin.php
:: Header : Content-Type: application/x-www-form-urlencoded
:: Data : id=FUZZ
:: Follow redirects : false
:: Calibration : false
:: Timeout : 10
:: Threads : 40
:: Matcher : Response status: 200,204,301,302,307,401,403
:: Filter : Response size: xxx
________________________________________________
<...SNIP...> [Status: xxx, Size: xxx, Words: xxx, Lines: xxx]
Hemen bir isabet elde ettiğimizi görüyoruz. Son olarak, önceki bölümde yaptığımız gibi curl kullanarak başka bir POST isteği gönderebilir, yeni bulduğumuz id değerini kullanabilir ve bayrağı toplayabiliriz.
Soru : ‘ids.txt’ kelime listesini oluşturmaya çalışın, kabul edilen değeri bir fuzzing taramasıyla belirleyin ve ardından bayrağı toplamak için ‘curl’ ile bir ‘POST’ isteğinde kullanın. Bayrağın içeriği nedir?
Cevap :
1- Bash betiğimizle wordlistimizi oluşturalım. Ardından hedef siteye id parametresinin alabile.eği değerleri fuzzlayalım .
2- 73 değerini aldık . 73 değerinin ne anlama geldğini bize sonuç olarak ne verdiğini curl kullanarak bakalım .