hacktricks/pentesting-web/web-tool-wfuzz.md
2024-02-10 18:14:16 +00:00

22 KiB
Raw Blame History

Web Aracı - WFuzz

AWS hacklemeyi sıfırdan kahraman seviyesine öğrenin htARTE (HackTricks AWS Kırmızı Takım Uzmanı)!

HackTricks'i desteklemenin diğer yolları:

Herhangi bir yerde web uygulamalarını FUZZ etmek için bir araç.

Wfuzz, web uygulamalarının değerlendirmelerinde görevi kolaylaştırmak için oluşturulmuş olup, temel bir kavrama dayanır: FUZZ anahtar kelimesine yapılan herhangi bir başvuruyu belirli bir payload değeriyle değiştirir.

Kurulum

Kali'de yüklü

Github: https://github.com/xmendez/wfuzz

pip install wfuzz

Filtreleme seçenekleri

Code

-c, --code <CODE>

Specify the expected HTTP response code(s) to filter the results. Multiple codes can be separated by commas.

Size

-s, --size <SIZE>

Specify the expected HTTP response size(s) to filter the results. Multiple sizes can be separated by commas.

Words

-w, --word <WORD>

Specify the expected word(s) to filter the results. Multiple words can be separated by commas.

Regex

-r, --regex <REGEX>

Specify the regular expression(s) to filter the results. Multiple regular expressions can be separated by commas.

Follow Redirects

--follow-redirects

Follow redirects and include them in the results.

Exclude Redirects

--exclude-redirects

Exclude redirects from the results.

Exclude Status Codes

--exclude-status <CODE>

Specify the HTTP response code(s) to exclude from the results. Multiple codes can be separated by commas.

Exclude Sizes

--exclude-size <SIZE>

Specify the HTTP response size(s) to exclude from the results. Multiple sizes can be separated by commas.

Exclude Words

--exclude-word <WORD>

Specify the word(s) to exclude from the results. Multiple words can be separated by commas.

Exclude Regex

--exclude-regex <REGEX>

Specify the regular expression(s) to exclude from the results. Multiple regular expressions can be separated by commas.

--hs/ss "regex" #Hide/Show
#Simple example, match a string: "Invalid username"
#Regex example: "Invalid *"

--hc/sc CODE #Hide/Show by code in response
--hl/sl NUM #Hide/Show by number of lines in response
--hw/sw NUM #Hide/Show by number of words in response
--hh/sh NUM #Hide/Show by number of chars in response
--hc/sc NUM #Hide/Show by response code

Çıktı seçenekleri

wfuzz provides several options to control the output format and content. These options can be used to customize the way the results are displayed and saved.

-o, --output <file>

Specify the output file where the results will be saved. This can be useful for further analysis or documentation purposes.

-f, --filter <expression>

Apply a filter to the output results based on a given expression. This allows you to only display or save specific results that match the filter criteria.

-c, --colorize

Enable colorized output for better readability. This option can be helpful when analyzing large amounts of data.

-s, --saveoutput

Save the output results to a file. This option is useful when you want to save the results without displaying them on the screen.

-d, --delimiter <character>

Specify a custom delimiter character to separate the output fields. By default, the delimiter is set to a comma (,).

-t, --table

Display the output results in a table format. This option provides a more organized and structured view of the results.

-l, --limit <number>

Limit the number of output results to be displayed or saved. This can be useful when dealing with large datasets to avoid overwhelming the screen or saving unnecessary data.

-v, --verbose

Enable verbose mode to display additional information about the requests and responses. This can be helpful for debugging or understanding the behavior of the target application.

-q, --quiet

Disable verbose mode and only display essential information. This option is useful when you want to minimize the amount of output displayed on the screen.

-h, --help

Display the help menu with all the available options and their descriptions.

-V, --version

Display the version information of wfuzz.

wfuzz, çıktı formatını ve içeriğini kontrol etmek için birkaç seçenek sunar. Bu seçenekler, sonuçların nasıl görüntüleneceği ve kaydedileceği özelleştirmek için kullanılabilir.

-o, --output <dosya>

Sonuçların kaydedileceği çıktı dosyasını belirtin. Bu, daha fazla analiz veya belgeleme amaçları için kullanışlı olabilir.

-f, --filter <ifade>

Verilen bir ifadeye dayalı olarak çıktı sonuçlarına bir filtre uygulayın. Bu, filtre kriterlerine uyan belirli sonuçları yalnızca görüntülemenize veya kaydetmenize olanak tanır.

-c, --colorize

Daha iyi okunabilirlik için renkli çıktıyı etkinleştirin. Bu seçenek, büyük miktarda veri analiz ederken yardımcı olabilir.

-s, --saveoutput

Çıktı sonuçlarını bir dosyaya kaydedin. Bu seçenek, sonuçları ekranda görüntülemeden kaydetmek istediğinizde kullanışlıdır.

-d, --delimiter <karakter>

Çıktı alanlarını ayırmak için özel bir ayırıcı karakter belirtin. Varsayılan olarak, ayırıcı virgül (,) olarak ayarlanır.

-t, --table

Çıktı sonuçlarını tablo formatında görüntüleyin. Bu seçenek, sonuçların daha düzenli ve yapılandırılmış bir görünümünü sağlar.

-l, --limit <sayı>

Görüntülenecek veya kaydedilecek çıktı sonuçlarının sayısını sınırlayın. Bu, büyük veri kümeleriyle uğraşırken ekranıırı yüklememek veya gereksiz veri kaydetmemek için kullanışlı olabilir.

-v, --verbose

İstekler ve yanıtlar hakkında ek bilgileri görüntülemek için ayrıntılı modu etkinleştirin. Bu, hata ayıklama veya hedef uygulamanın davranışını anlama konusunda yardımcı olabilir.

-q, --quiet

Ayrıntılı modu devre dışı bırakın ve yalnızca temel bilgileri görüntüleyin. Bu seçenek, ekranda görüntülenen çıktı miktarını en aza indirmek istediğinizde kullanışlıdır.

-h, --help

Tüm mevcut seçenekleri ve açıklamalarını içeren yardım menüsünü görüntüler.

-V, --version

wfuzz'un sürüm bilgilerini görüntüler.

wfuzz -e printers #Prints the available output formats
-f /tmp/output,csv #Saves the output in that location in csv format

Kodlayıcı seçenekleri

There are several encoding options available in wfuzz that can be used to modify the payloads sent during the fuzzing process. These encoding options can help bypass certain security measures or evade detection. The following are the available encoding options in wfuzz:

  • URL Encoding: This option encodes special characters in the URL using percent-encoding. It is useful when fuzzing URLs that contain special characters that may be interpreted differently by the server.

  • HTML Encoding: This option encodes special characters in the payload using HTML entities. It is useful when fuzzing web forms or input fields that may not properly handle special characters.

  • Base64 Encoding: This option encodes the payload using Base64 encoding. It is useful when fuzzing parameters that are expected to be Base64 encoded.

  • Hex Encoding: This option encodes the payload using hexadecimal representation. It is useful when fuzzing parameters that are expected to be in hexadecimal format.

  • Unicode Encoding: This option encodes the payload using Unicode characters. It is useful when fuzzing parameters that may be vulnerable to Unicode-based attacks.

  • Double URL Encoding: This option applies URL encoding twice to the payload. It can be used to bypass certain security filters that only decode the payload once.

  • UTF-8 Encoding: This option encodes the payload using UTF-8 encoding. It is useful when fuzzing parameters that may be vulnerable to UTF-8-based attacks.

  • UTF-16 Encoding: This option encodes the payload using UTF-16 encoding. It is useful when fuzzing parameters that may be vulnerable to UTF-16-based attacks.

  • UTF-32 Encoding: This option encodes the payload using UTF-32 encoding. It is useful when fuzzing parameters that may be vulnerable to UTF-32-based attacks.

  • Mixed Encoding: This option applies a combination of different encodings to the payload. It can be useful when fuzzing parameters that may be vulnerable to multiple encoding-based attacks.

These encoding options can be specified using the --encoding parameter in wfuzz.

wfuzz -e encoders #Prints the available encoders
#Examples: urlencode, md5, base64, hexlify, uri_hex, doble urlencode

Bir kodlayıcıyı kullanmak için, onu "-w" veya "-z" seçeneğinde belirtmelisiniz.

Örnekler:

-z file,/path/to/file,md5 #Will use a list inside the file, and will transform each value into its md5 hash before sending it
-w /path/to/file,base64 #Will use a list, and transform to base64
-z list,each-element-here,hexlify #Inline list and to hex before sending values

Hile Kağıdı

Giriş Formu bruteforce

POST, Tek liste, filtre dizesi (gizle)

wfuzz -c -w users.txt --hs "Login name" -d "name=FUZZ&password=FUZZ&autologin=1&enter=Sign+in" http://zipper.htb/zabbix/index.php
#Here we have filtered by line

POST, 2 listesi, filtre kodu (göster)

wfuzz.py -c -z file,users.txt -z file,pass.txt --sc 200 -d "name=FUZZ&password=FUZ2Z&autologin=1&enter=Sign+in" http://zipper.htb/zabbix/index.php
#Here we have filtered by code

GET, 2 listeler, dize filtresi (göster), proxy, çerezler

wfuzz -c -w users.txt -w pass.txt --ss "Welcome " -p 127.0.0.1:8080:HTTP -b "PHPSESSIONID=1234567890abcdef;customcookie=hey" "http://example.com/index.php?username=FUZZ&password=FUZ2Z&action=sign+in"

Dizin/RESTful bruteforce saldırısı

Arjun parametreleri wordlist'i

wfuzz -c -w /tmp/tmp/params.txt --hc 404 https://domain.com/api/FUZZ

Yol Parametreleri BF

Path parametreleri, bir URL'nin yolunda bulunan değişkenlerdir. Bu parametreler, web uygulamalarında dinamik içerik oluşturmak için kullanılır. WFuzz, bu path parametrelerini brute force saldırılarıyla keşfetmek için kullanılabilir.

WFuzz, bir wordlist (kelime listesi) ve hedef URL'yi kullanarak path parametrelerini brute force etmek için kullanılır. Wordlist, olası parametre değerlerini içeren bir liste olarak düşünülebilir. WFuzz, bu wordlist'i kullanarak hedef URL'ye farklı parametre değerleriyle istekler gönderir ve yanıtları analiz eder.

Bu saldırı, web uygulamasının path parametrelerinde güvenlik açıklarını keşfetmek için kullanılabilir. Örneğin, bir web uygulaması, path parametresini doğru bir şekilde doğrulamıyorsa veya sınırlamalar uygulamıyorsa, saldırganlar bu açığı kullanarak yetkisiz erişim elde edebilir veya hassas bilgilere erişebilir.

WFuzz, path parametrelerini brute force etmek için farklı saldırı modları sunar. Bunlar arasında FUZZ, FUZZ2, FUZZ3 ve FUZZ4 bulunur. Bu modlar, wordlist'teki her bir değeri hedef URL'ye ekleyerek istekleri gönderir.

Path parametreleri brute force saldırıları, web uygulamalarının güvenlik açıklarını keşfetmek için etkili bir yöntemdir. Ancak, bu saldırıları gerçekleştirirken yasal izinlere ve etik kurallara uyulması önemlidir.

wfuzz -c -w ~/git/Arjun/db/params.txt --hw 11 'http://example.com/path%3BFUZZ=FUZZ'

Başlık Kimlik Doğrulama

Temel, 2 list, filtre dizesi (göster), proxy

wfuzz -c -w users.txt -w pass.txt -p 127.0.0.1:8080:HTTP --ss "Welcome" --basic FUZZ:FUZ2Z "http://example.com/index.php"

NTLM, 2 listesi, filtreleme dizesi (göster), proxy

Bu bölümde, NTLM kimlik doğrulama protokolünü hedefleyen bir saldırıyı gerçekleştirmek için wfuzz aracını kullanacağız. Bu saldırıda, iki farklı liste kullanarak hedef web uygulamasında bulunan kullanıcı adlarını ve şifreleri deneyeceğiz. Ayrıca, sonuçları filtrelemek için bir dize kullanacağız ve bir proxy sunucusu üzerinden saldırıyı yönlendireceğiz.

wfuzz -c -z file,users.txt -z file,passwords.txt --hc 401,403 -u http://target.com/login.php -H "Authorization: NTLM FUZZ" -F "username=admin&password=FUZZ" -t 50 --filter "length(content) > 100" -p 127.0.0.1:8080

Bu komut, wfuzz aracını kullanarak NTLM kimlik doğrulama protokolünü hedefleyen bir saldırıyı gerçekleştirir. İlgili parametreler şunlardır:

  • -c: Renkli çıktıyı etkinleştirir.
  • -z file,users.txt: Kullanıcı adlarını içeren bir dosyayı belirtir.
  • -z file,passwords.txt: Şifreleri içeren bir dosyayı belirtir.
  • --hc 401,403: 401 veya 403 durum kodlarına sahip yanıtları hariç tutar.
  • -u http://target.com/login.php: Hedef web uygulamasının giriş sayfasının URL'sini belirtir.
  • -H "Authorization: NTLM FUZZ": NTLM kimlik doğrulama başlığını belirtir ve FUZZ, wfuzz'un kullanıcı adı ve şifreleri yerleştireceği yer tutucusudur.
  • -F "username=admin&password=FUZZ": Kullanıcı adı ve şifre parametrelerini belirtir ve FUZZ, wfuzz'un kullanıcı adı ve şifreleri yerleştireceği yer tutucusudur.
  • -t 50: 50 iş parçacığı kullanarak saldırıyı gerçekleştirir.
  • --filter "length(content) > 100": Yanıt içeriğinin uzunluğunu 100'den büyük olan yanıtları filtreler.
  • -p 127.0.0.1:8080: Saldırıyı yönlendirmek için bir proxy sunucusu kullanır.

Bu komutu kullanarak wfuzz aracını NTLM kimlik doğrulama protokolünü hedefleyen bir saldırı için yapılandırabilirsiniz. Kullanıcı adları ve şifrelerin bulunduğu iki farklı liste kullanarak hedef web uygulamasında kimlik doğrulama denemeleri yapabilirsiniz. Ayrıca, sonuçları belirli bir dizeyle filtreleyebilir ve saldırıyı bir proxy sunucusu üzerinden yönlendirebilirsiniz.

wfuzz -c -w users.txt -w pass.txt -p 127.0.0.1:8080:HTTP --ss "Welcome" --ntlm 'domain\FUZZ:FUZ2Z' "http://example.com/index.php"

Çerez/Başlık bruteforce (vhost brute)

Çerez, filtre kodu (göster), proxy

wfuzz -c -w users.txt -p 127.0.0.1:8080:HTTP --ss "Welcome " -H "Cookie:id=1312321&user=FUZZ"  "http://example.com/index.php"

User-Agent, filtre kodu (gizle), proxy

Web uygulamalarını hedef alırken, User-Agent başlığını değiştirerek tarayıcıyı taklit edebilirsiniz. Bu, web sunucusuna gerçek bir tarayıcı gibi görünmenizi sağlar ve bazı filtreleme mekanizmalarını atlatmanıza yardımcı olabilir.

Wfuzz, User-Agent başlığını değiştirmek için --ua parametresini kullanır. Örneğin, aşağıdaki komutu kullanarak User-Agent başlığını "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3" olarak ayarlayabilirsiniz:

wfuzz --ua "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3" ...

Bazı durumlarda, web uygulaması girişlerini filtreleyebilir veya engelleyebilir. Bu durumda, Wfuzz filtre kodunu kullanarak bu engellemeyi atlayabilirsiniz. Filtre kodu, web sunucusuna gönderilen her yanıtı analiz eder ve belirli bir desene uyan yanıtları filtreler. Örneğin, aşağıdaki komutu kullanarak "403 Forbidden" yanıtlarını filtreleyebilirsiniz:

wfuzz --filter-code 403 ...

Wfuzz ayrıca, istekleri bir proxy sunucusu üzerinden yönlendirmenize olanak tanır. Bu, isteklerinizi gizlemek veya hedef sunucuya farklı bir IP adresiyle erişmek için kullanılabilir. Proxy sunucusunu belirtmek için --proxy parametresini kullanabilirsiniz. Örneğin, aşağıdaki komutu kullanarak istekleri "http://localhost:8080" proxy sunucusu üzerinden yönlendirebilirsiniz:

wfuzz --proxy http://localhost:8080 ...

Bu teknikleri kullanarak, web uygulamalarını daha etkili bir şekilde hedef alabilir ve güvenlik açıklarını keşfedebilirsiniz.

wfuzz -c -w user-agents.txt -p 127.0.0.1:8080:HTTP --ss "Welcome " -H "User-Agent: FUZZ"  "http://example.com/index.php"

Sunucu

wfuzz -c -w /usr/share/wordlists/SecLists/Discovery/DNS/subdomains-
top1million-20000.txt --hc 400,404,403 -H "Host: FUZZ.example.com" -u
http://example.com -t 100

Dosya kullanarak

Bu yöntemde, WFuzz aracını kullanarak hedef web uygulamasında HTTP fiillerini (metodlarını) bruteforce yapabilirsiniz. WFuzz, belirli bir dosyadaki fiil listesini hedef uygulamaya göndererek, geçerli fiilleri tespit etmenizi sağlar.

Bu yöntemi kullanmak için aşağıdaki adımları izleyin:

  1. Bir fiil listesi dosyası oluşturun. Bu dosya, hedef uygulamada denemek istediğiniz HTTP fiillerini içermelidir. Örnek bir fiil listesi dosyası aşağıdaki gibi olabilir:

    GET
    POST
    PUT
    DELETE
    
  2. WFuzz aracını kullanarak fiil listesini hedef uygulamaya gönderin. Aşağıdaki komutu kullanabilirsiniz:

    wfuzz -c -z file,<fiil_listesi_dosyası> <hedef_url>
    

    Burada <fiil_listesi_dosyası> oluşturduğunuz fiil listesi dosyasının yolunu ve <hedef_url> hedef web uygulamasının URL'sini temsil eder.

  3. WFuzz, fiil listesindeki her bir fiili hedef uygulamaya göndererek yanıtları kontrol eder. Yanıtlar arasında farklılık olduğunda, geçerli bir fiil bulunmuş demektir.

Bu yöntem, hedef web uygulamasında kullanılan HTTP fiillerini tespit etmek ve güvenlik açıklarını bulmak için etkili bir yöntemdir. Ancak, hedef uygulamanın yanıtlarını dikkatlice incelemek ve yanıtlar arasındaki farkları doğru bir şekilde yorumlamak önemlidir.

wfuzz -c -w methods.txt -p 127.0.0.1:8080:HTTP --sc 200 -X FUZZ "http://example.com/index.php"

Satır içi liste kullanımı

You can use the inline list feature in Markdown to create a list within a paragraph. To create an inline list, simply separate the items with commas and enclose them in square brackets. For example:

I like fruits, such as [apple], [banana], and [orange].

This will be rendered as:

I like fruits, such as [apple], [banana], and [orange].

You can also add links or other formatting to the items in the inline list. For example:

I like fruits, such as [apple](https://example.com/apple), [banana](https://example.com/banana), and [orange](https://example.com/orange).

This will be rendered as:

I like fruits, such as apple, banana, and orange.

$ wfuzz -z list,GET-HEAD-POST-TRACE-OPTIONS -X FUZZ http://testphp.vulnweb.com/

Dizin ve Dosya Bruteforce

Dizin ve dosya bruteforce, bir web uygulamasında mevcut olan dizin ve dosyaları keşfetmek için kullanılan bir tekniktir. Bu teknik, bir saldırganın hedef web uygulamasında gizli veya gizlenmiş olan dizinleri ve dosyaları bulmasına yardımcı olur.

Bu saldırıyı gerçekleştirmek için genellikle wfuzz gibi bir araç kullanılır. Wfuzz, bir wordlist (kelime listesi) ve hedef web uygulamasının URL'si ile çalışır. Wordlist, olası dizin ve dosya adlarını içeren bir liste olarak düşünülebilir. Wfuzz, bu wordlist'i kullanarak hedef web uygulamasında mevcut olan dizin ve dosyaları denemek için otomatik olarak istekler gönderir.

Bu saldırı tekniği, web uygulamasının güvenlik açıklarını tespit etmek ve hassas bilgilere erişmek için kullanılabilir. Örneğin, gizli bir yönetici paneline veya veritabanı yedeklemelerine erişmek için kullanılabilir.

Dizin ve dosya bruteforce saldırıları, web uygulamalarının güvenlik açıklarını tespit etmek ve bu açıkları kapatmak için kullanılan bir pentesting tekniğidir. Bu nedenle, web uygulamalarının güvenliğini sağlamak için bu tür saldırılara karşı önlemler almak önemlidir.

#Filter by whitelisting codes
wfuzz -c -z file,/usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt --sc 200,202,204,301,302,307,403 http://example.com/uploads/FUZZ

Webs Bypass Etme Aracı

https://github.com/carlospolop/fuzzhttpbypass

AWS hacklemeyi sıfırdan kahraman olacak şekilde öğrenin htARTE (HackTricks AWS Kırmızı Takım Uzmanı)!

HackTricks'i desteklemenin diğer yolları: