hacktricks/pentesting-web/web-tool-wfuzz.md
2024-02-10 13:11:20 +00:00

367 lines
20 KiB
Markdown

# Web alatka - WFuzz
<details>
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Drugi načini podrške HackTricks-u:
* Ako želite da vidite **vašu kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
</details>
Alatka za FUZZ-ovanje web aplikacija bilo gde.
> [Wfuzz](https://github.com/xmendez/wfuzz) je napravljen da olakša zadatak u proceni web aplikacija i zasniva se na jednostavnom konceptu: zamenjuje svako pojavljivanje ključne reči FUZZ vrednošću zadatog payload-a.
## Instalacija
Instalirano na Kali
Github: [https://github.com/xmendez/wfuzz](https://github.com/xmendez/wfuzz)
```
pip install wfuzz
```
## Opcije filtriranja
### **Code**
### **Kod**
This option allows you to filter the response based on the HTTP status code. You can specify a single code or a range of codes using the syntax `code` or `code1-code2`. For example, to filter for all responses with a status code of 200, you would use `--filter-code 200`. To filter for all responses with status codes between 400 and 500, you would use `--filter-code 400-500`.
Ova opcija vam omogućava filtriranje odgovora na osnovu HTTP statusnog koda. Možete specificirati jedan kod ili opseg kodova koristeći sintaksu `kod` ili `kod1-kod2`. Na primer, da biste filtrirali sve odgovore sa statusnim kodom 200, koristili biste `--filter-code 200`. Da biste filtrirali sve odgovore sa statusnim kodovima između 400 i 500, koristili biste `--filter-code 400-500`.
### **Size**
### **Veličina**
This option allows you to filter the response based on the size of the response body. You can specify a single size or a range of sizes using the syntax `size` or `size1-size2`. For example, to filter for all responses with a body size of 100 bytes, you would use `--filter-size 100`. To filter for all responses with body sizes between 200 and 500 bytes, you would use `--filter-size 200-500`.
Ova opcija vam omogućava filtriranje odgovora na osnovu veličine tela odgovora. Možete specificirati jednu veličinu ili opseg veličina koristeći sintaksu `veličina` ili `veličina1-veličina2`. Na primer, da biste filtrirali sve odgovore sa veličinom tela od 100 bajtova, koristili biste `--filter-size 100`. Da biste filtrirali sve odgovore sa veličinama tela između 200 i 500 bajtova, koristili biste `--filter-size 200-500`.
### **Words**
### **Reči**
This option allows you to filter the response based on the presence or absence of specific words in the response body. You can specify one or more words to include or exclude using the syntax `+word1,+word2` or `-word1,-word2`. For example, to filter for all responses that contain the words "password" and "admin", you would use `--filter-words +password,+admin`. To filter for all responses that do not contain the words "error" and "invalid", you would use `--filter-words -error,-invalid`.
Ova opcija vam omogućava filtriranje odgovora na osnovu prisustva ili odsustva određenih reči u telu odgovora. Možete specificirati jednu ili više reči za uključivanje ili isključivanje koristeći sintaksu `+reč1,+reč2` ili `-reč1,-reč2`. Na primer, da biste filtrirali sve odgovore koji sadrže reči "password" i "admin", koristili biste `--filter-words +password,+admin`. Da biste filtrirali sve odgovore koji ne sadrže reči "error" i "invalid", koristili biste `--filter-words -error,-invalid`.
```bash
--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
```
## Opcije izlaza
Wfuzz provides several options for displaying the output of the scan. These options can be used to customize the format and level of detail in the output.
### Standard output
By default, Wfuzz displays the output on the standard output (stdout). This is the most common way to view the results of a scan. The output includes information such as the request URL, response status code, and any discovered vulnerabilities.
### Output to a file
Wfuzz also allows you to redirect the output to a file using the `-o` or `--output` option followed by the desired file name. This can be useful for saving the results of a scan for later analysis or sharing with others.
Example:
```
wfuzz -c -z file,wordlist/general/common.txt --hc 404 http://example.com/FUZZ -o output.txt
```
In this example, the output of the scan will be saved to a file named `output.txt`.
### Output to a workspace
Wfuzz supports integration with cloud/SaaS platforms such as Workspace, AWS, and GCP. This allows you to send the output of a scan directly to a workspace or cloud storage for further analysis or collaboration.
To use this feature, you need to configure the appropriate settings in Wfuzz and provide the necessary credentials for the cloud/SaaS platform.
### Output to a database
Wfuzz also supports storing the output of a scan in a database. This can be useful for managing and querying large amounts of scan data.
To enable database output, you need to configure the database settings in Wfuzz and provide the necessary credentials and connection details.
### Custom output format
If none of the built-in output options meet your needs, Wfuzz allows you to define a custom output format using the `--output-format` option. This option accepts a string that specifies the desired format.
Example:
```
wfuzz -c -z file,wordlist/general/common.txt --hc 404 http://example.com/FUZZ --output-format "URL: {url}, Status: {status_code}"
```
In this example, the output will be customized to display only the URL and status code for each request.
```bash
wfuzz -e printers #Prints the available output formats
-f /tmp/output,csv #Saves the output in that location in csv format
```
### Opcije enkodera
The `wfuzz` tool provides several options for encoding payloads. These options can be used to modify the format of the payloads sent during the fuzzing process. Here are some of the available encoder options:
- **URL Encoding**: This option (`-z url`) encodes special characters in the payload using URL encoding. For example, the space character is encoded as `%20`.
- **HTML Encoding**: This option (`-z html`) encodes special characters in the payload using HTML encoding. For example, the less than symbol `<` is encoded as `&lt;`.
- **Base64 Encoding**: This option (`-z b64`) encodes the payload using Base64 encoding. This can be useful when dealing with binary data.
- **Hex Encoding**: This option (`-z hex`) encodes the payload using hexadecimal encoding. Each byte of the payload is represented by two hexadecimal digits.
- **Unicode Encoding**: This option (`-z unicode`) encodes the payload using Unicode encoding. Each character of the payload is represented by its Unicode code point.
These encoding options can be combined with other `wfuzz` options to customize the fuzzing process and increase the chances of finding vulnerabilities in web applications.
```bash
wfuzz -e encoders #Prints the available encoders
#Examples: urlencode, md5, base64, hexlify, uri_hex, doble urlencode
```
Da biste koristili enkoder, morate ga naznačiti u opciji **"-w"** ili **"-z"**.
Primeri:
```bash
-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
```
## CheetSheet
### Brute force napad na login formu
#### **POST, Jedna lista, filter string (sakrij)**
```bash
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 liste, filter kod (prikaži)**
```bash
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 liste, filter string (prikaži), proxy, kolačići**
---
#### **GET, 2 листе, филтер стринг (прикажи), прокси, колачићи**
```bash
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"
```
### Brute force direktorijuma/RESTful brute force
[Arjun lista reči za parametre](https://raw.githubusercontent.com/s0md3v/Arjun/master/arjun/db/params.txt)
```
wfuzz -c -w /tmp/tmp/params.txt --hc 404 https://domain.com/api/FUZZ
```
### BF putanja parametara
BF (Brute Force) napad je tehnika koja se koristi za otkrivanje validnih vrednosti putanja parametara. Ova tehnika se koristi kada je potrebno pronaći tačne vrednosti parametara kako bi se izvršio određeni zahtev.
Da biste izvršili BF napad na putanju parametara, možete koristiti alat kao što je `wfuzz`. Ovaj alat će automatski generisati različite kombinacije vrednosti parametara i poslati ih na ciljani URL. Kada se pronađe validna vrednost parametra, to znači da je putanja parametara otkrivena.
Da biste izvršili BF napad na putanju parametara koristeći `wfuzz`, možete koristiti sledeću sintaksu:
```plaintext
wfuzz -c -z file,<wordlist> --hc <response_code> <url>?<param>=FUZZ
```
Gde:
- `-c` opcija se koristi za prikazivanje samo uspešnih zahteva
- `-z file,<wordlist>` opcija se koristi za učitavanje liste reči iz datoteke
- `--hc <response_code>` opcija se koristi za filtriranje odgovora sa određenim HTTP statusnim kodom
- `<url>` predstavlja ciljani URL
- `<param>` predstavlja ime parametra koji želite da testirate
- `FUZZ` je oznaka koju `wfuzz` koristi za zamenjivanje vrednosti parametra iz liste reči
Na primer, ako želite da izvršite BF napad na putanju parametara sa parametrom `id` na URL-u `http://example.com`, koristeći listu reči `wordlist.txt`, možete koristiti sledeću komandu:
```plaintext
wfuzz -c -z file,wordlist.txt --hc 200 http://example.com?id=FUZZ
```
Ova komanda će automatski generisati različite kombinacije vrednosti parametra `id` iz liste reči `wordlist.txt` i poslati ih na URL `http://example.com`. Samo uspešni zahtevi sa HTTP statusnim kodom 200 će biti prikazani.
BF napad na putanju parametara može biti veoma koristan za otkrivanje validnih vrednosti parametara i pronalaženje ranjivosti u ciljanoj aplikaciji.
```bash
wfuzz -c -w ~/git/Arjun/db/params.txt --hw 11 'http://example.com/path%3BFUZZ=FUZZ'
```
### Header Autentifikacija
#### **Osnovno, 2 liste, filter string (prikaži), proxy**
```bash
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 liste, filter string (prikaži), proxy**
---
##### **NTLM**
NTLM (New Technology LAN Manager) je autentifikacioni protokol koji se koristi u Windows mrežama. WFuzz podržava NTLM autentifikaciju i može se koristiti za testiranje sigurnosti sistema koji koriste ovaj protokol.
##### **2 liste**
WFuzz omogućava korišćenje 2 liste za napade. Prva lista se koristi za generisanje URL-ova, dok se druga lista koristi za generisanje payload-a. Ovo je korisno kada želite da testirate više kombinacija URL-ova i payload-a.
##### **Filter string (prikaži)**
Filter string (prikaži) je opcija koja vam omogućava filtriranje rezultata napada na osnovu određenog stringa. Možete koristiti ovu opciju da biste prikazali samo one rezultate koji sadrže određeni string, što vam pomaže da se fokusirate samo na relevantne informacije.
##### **Proxy**
Proxy je posrednik između vašeg računara i ciljnog servera. WFuzz podržava korišćenje proxy servera za anonimno izvršavanje napada. Možete konfigurisati proxy postavke u WFuzz-u kako biste sakrili svoj identitet tokom napada.
```bash
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"
```
### Brute forceovanje kolačića/zaglavlja (brute vhost)
#### **Kolačić, filter koda (prikaži), proxy**
```bash
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, filter kod (sakrij), proxy**
User-Agent je HTTP zaglavlje koje se koristi za identifikaciju klijentskog softvera koji šalje zahtev serveru. Može se koristiti za prikrivanje identiteta ili za lažno predstavljanje kao drugi klijentski softver.
Filter kod se koristi za filtriranje rezultata pretrage kako bi se prikazali samo određeni rezultati koji ispunjavaju određene uslove. Može se koristiti za sužavanje obima pretrage i fokusiranje na relevantne rezultate.
Proxy je posrednik između klijenta i servera koji omogućava anonimnost i zaštitu identiteta. Proxy server može se koristiti za sakrivanje IP adrese klijenta i zaobilaženje ograničenja pristupa od strane servera.
```bash
wfuzz -c -w user-agents.txt -p 127.0.0.1:8080:HTTP --ss "Welcome " -H "User-Agent: FUZZ" "http://example.com/index.php"
```
#### **Host**
```bash
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
```
#### **Korišćenje fajla**
Ova tehnika se koristi za izvršavanje brute force napada na HTTP metode (verbs) koristeći listu metoda iz fajla.
Da biste koristili ovu tehniku, prvo morate kreirati fajl koji sadrži listu HTTP metoda koje želite da isprobate. Svaka metoda treba biti navedena u zasebnom redu.
Na primer, možete kreirati fajl `methods.txt` sa sledećim sadržajem:
```
GET
POST
PUT
DELETE
```
Zatim možete koristiti `wfuzz` alat za izvršavanje brute force napada na HTTP metode koristeći ovaj fajl. Evo primera komande:
```
wfuzz -w methods.txt http://example.com/FUZZ
```
Ovde `FUZZ` predstavlja rezervisanu reč koju `wfuzz` koristi za zamenjivanje sa svakom metodom iz fajla.
Nakon izvršavanja komande, `wfuzz` će automatski zameniti `FUZZ` sa svakom metodom iz fajla i poslati HTTP zahtev na odgovarajuću putanju na ciljnom veb serveru.
Ova tehnika je korisna za otkrivanje potencijalno ranjivih HTTP metoda na ciljnom veb serveru.
```bash
wfuzz -c -w methods.txt -p 127.0.0.1:8080:HTTP --sc 200 -X FUZZ "http://example.com/index.php"
```
#### **Korišćenje inline liste**
Inline lista je tehnika koja se koristi u alatu wfuzz kako bi se brzo i efikasno testirali različiti parametri. Ova tehnika omogućava da se vrednosti parametara iz liste ubace direktno u URL zahteva, umesto da se koristi fajl sa listom vrednosti.
Da biste koristili inline listu, potrebno je da definišete listu vrednosti u formatu `{vrednost1,vrednost2,vrednost3}`. Zatim, umesto da koristite opciju `-z` za učitavanje fajla sa listom, koristite opciju `-Z` i navodite inline listu kao vrednost.
Na primer, ako želite da testirate različite vrednosti za parametar `id`, možete koristiti inline listu na sledeći način:
```
wfuzz -c -z list.txt http://example.com/?id=FUZZ
```
Ovde `list.txt` predstavlja fajl sa listom vrednosti, dok `FUZZ` predstavlja oznaku koja će biti zamenjena sa svakom vrednošću iz liste.
Sa inline listom, isti rezultat možete postići na sledeći način:
```
wfuzz -c -Z {1,2,3} http://example.com/?id=FUZZ
```
Ovde se inline lista `{1,2,3}` direktno ubacuje u URL zahteva, umesto da se koristi fajl sa listom.
Korišćenje inline liste može biti veoma korisno kada želite brzo da testirate različite vrednosti parametara i izbegnete upotrebu dodatnih fajlova.
```bash
$ wfuzz -z list,GET-HEAD-POST-TRACE-OPTIONS -X FUZZ http://testphp.vulnweb.com/
```
### Brute force napad na direktorijume i fajlove
Brute force napad je tehnika koja se koristi za otkrivanje direktorijuma i fajlova na ciljnom veb serveru. Ova tehnika se zasniva na pokušaju svih mogućih kombinacija putanja ili imena fajlova kako bi se pronašli oni koji su dostupni.
#### Upotreba alata Wfuzz
Wfuzz je popularan alat za izvršavanje brute force napada na direktorijume i fajlove. Ovaj alat omogućava korisnicima da definišu listu putanja ili imena fajlova koje žele da testiraju. Wfuzz zatim automatski generiše sve moguće kombinacije i šalje zahteve serveru.
#### Instalacija Wfuzz-a
Da biste instalirali Wfuzz, možete koristiti sledeću komandu:
```bash
sudo apt-get install wfuzz
```
#### Osnovna upotreba Wfuzz-a
Osnovna sintaksa za upotrebu Wfuzz-a je:
```bash
wfuzz -c -z file,<wordlist> -u <target_url> -t <num_threads> -H <headers>
```
- `-c` opcija omogućava prikazivanje samo uspešnih odgovora
- `-z file,<wordlist>` opcija definiše da se koristi lista reči iz datoteke za generisanje putanja ili imena fajlova
- `-u <target_url>` opcija definiše ciljnu URL adresu
- `-t <num_threads>` opcija definiše broj niti koje će se koristiti za izvršavanje napada
- `-H <headers>` opcija definiše dodatne zaglavlja koja će se poslati sa zahtevima
#### Primer upotrebe Wfuzz-a
Evo primera kako možete koristiti Wfuzz za brute force napad na direktorijume i fajlove:
```bash
wfuzz -c -z file,wordlist.txt -u http://example.com/FUZZ -t 10 -H "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3"
```
U ovom primeru, Wfuzz će koristiti listu reči iz datoteke "wordlist.txt" za generisanje putanja koje će biti testirane na URL adresi "http://example.com/FUZZ". Napad će se izvršavati sa 10 niti, a dodatno će se poslati zaglavlje "User-Agent" sa svakim zahtevom.
#### Napredne opcije Wfuzz-a
Wfuzz takođe pruža napredne opcije koje omogućavaju korisnicima da prilagode napad prema svojim potrebama. Ove opcije uključuju podešavanje vremenskog ograničenja, podešavanje HTTP metoda, podešavanje autentifikacije i još mnogo toga.
Za više informacija o naprednim opcijama Wfuzz-a, možete pogledati zvaničnu dokumentaciju alata.
```bash
#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
```
## Alat za zaobilaženje veb stranica
[https://github.com/carlospolop/fuzzhttpbypass](https://github.com/carlospolop/fuzzhttpbypass)
<details>
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Drugi načini podrške HackTricks-u:
* Ako želite da vidite **vašu kompaniju oglašenu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu**, proverite [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
</details>