← Back to Penetration testing
H5 Fuzzy
Tekijä: Aapo Tavio
Pohjana Tero Karvinen 2026: Tunkeutumistestaus 2026 kevät, Tunkeutumistestaus
h5 Fuzzy
Käytettävän ympäristön ominaisuudet
-
Host
-
Host PC: HP Laptop 15s-eq3xxx
-
OS: Ubuntu 24.04.4 LTS
-
Processor: AMD Ryzen™ 7 5825U with Radeon™ Graphics × 16
-
Memory: 16.0 GiB
-
NIC: Realtek Semiconductor Co., 802.11 ax Wireless
-
Architecture: x86_64
-
Firmware version: F.20
-
Kernel Version: Linux 6.17.0-22-generic
-
-
Virtual Machine
-
OS: Kali GNU/Linux Rolling
-
Release: 2026.1
-
Kernel Version: Linux 6.19.11+kali-amd64
-
Architecture: x86-64
-
Hardware Vendor: QEMU
-
Hardware Model: Ubuntu 24.04 PC Q35 + ICH9, 2009
-
Hardware Version: pc-q35-noble
-
Firmware Version: 1.16.3-debian-1.16.3-2
-
Firmware Date: Tue 2014-04-01
-
x) Lue/katso/kuuntele ja tiivistä. (Tässä x-alakohdassa ei tarvitse tehdä testejä tietokoneella, vain lukeminen tai kuunteleminen ja tiivistelmä riittää. Tiivistämiseen riittää muutama ranskalainen viiva. Lisää mukaan jokin oma idea, huomio, kysymys tai kommentti.)
- Karvinen 2023: Find Hidden Web Directories - Fuzz URLs with ffuf
- Ffuf on Joona Hoikkalan kehittämä fuzzer
- Voidaan käyttää moneen tarkoitukseen, esim.
- Piilotetut hakemistot
- Otsakkeet
- Post parametreihin
- Tarvitaan sanakirja, jota käytetään työkalun kanssa
- Ffuffissa on omat suodatukseen käytettävät valinnat joita pitää usein käyttää
- OMA KOMMENTTI
- On hienoa huomata Suomesta tulevan huippuluokan innovaatioita
- Hoikkala 2023: ffuf README.md
- Hakemistojen löytämisen syntaksissa käytetään valintaa -u jonka jälkeen URL jonka lopussa avainsana FUZZ
- Virtual hostien löytäminenkin on mahdollista ffufilla
- Valinnalla -maxtime voidaan määrittää sekunteina aika jonka ffuf ajaa maksimissaan
- Rekursiivisesti fuzzatessa valinnalla -maxtime-job voidaan määrittää kyseisen hakemistopolun fuzzauksen aika
- Uusi job luodaan aina kun alihakemisto löytyy
- Painamalla enter ffufin ajon aikana prosessi pysäytetään ja interaktiivinen tila alkaa
- OMA KOMMENTTI
- En itse oikein ymmärtänyt mitä ulkoisella “mutatorilla” saavutetaan tuotettaessa testitapaus?
a) Fuzzzz. Ratkaise dirfuz-1 artikkelista Karvinen 2023: Find Hidden Web Directories - Fuzz URLs with ffuf.
24.4.2026 22:05
Latasin kalilleni dirfuzt-1 tiedoston, joka oli elf-binääri. Laitoin nettiyhteyden pois päältä ja ajoin komennot
$ chmod u+x dirfuzt-1 #Komennolla muutetaan käyttäjien oikeuksia, u tarkoittaa käyttäjää joka on omistajana tiedostossa, +x antaa ajo(execute) oikeudet, lopuksi tiedosto johon muutokset tehdään
$ ./dirfuzt-1 #Ajaa nykyisessä hakemistossa olevan tiedoston dirfuzt-1
Tämän jälkeen menin selaimella osoitteeseen http://127.0.0.2:8000.

Kuva 1. Tehtävän sivu selaimessa
Tehtäväsivu alas ja netti päälle. Latasin sanakirjan osoitteesta SecLists - common.txt (danielmiessler. Github).
Nettiyhteys pois ja tehtäväsivu taas ylös. Ajoin ffufin komennolla
$ ffuf -w common.txt -u http://127.0.0.2:8000/FUZZ #Ajaa ffufin kohteessa 127.0.0.2:8000 ja /FUZZ ilmoittaa paikan johon sanakirjan sanoja syötetään. Valinta -w määrittää käytettävän sanakirjan ja valinta -u määrittää urlin
(Valintojen lähteenä ffufin manuaali Kalissa. Komento: man ffuf)
Suurimmassa osassa vastauksista oli kokona 154 tavua, sanoja 9 ja rivejä 10.

Kuva 2. Osa ohjelman ajamisen jälkeisestä tulosteesta
Suodatin seuraavaksi kaikki 154 tavua sisältävät vastaukset pois komennolla
$ ffuf -w common.txt -u http://127.0.0.2:8000/FUZZ -fs 154 #Valinta -fs 154 suodattaa kaikki 154 tavua sisältävät vastaukset pois tulosteesta
(Valinnan lähteenä ffufin ohje Kalissa. Komento: ffuf)
Tällä kertaa tuli siedettävä määrä vastauksia.

Kuva 3. Suodatetut tulokset
Gitin tiedostotkin voisivat olla mielenkiintoisia, mutta tiedosto “wp-admin” on kaikkein kiinnostavin. Menin siis osoitteeseen http://127.0.0.2:8000/wp-admin, josta löysin lipun.

Kuva 4. Lippu löytyi muodossa FLAG{}
Gitin hakemistostakin löytyi lippu.

Kuva 5. Lippu oli myös muodossa FLAG{}
b) Fuff me. Asenna FuffMe-harjoitusmaali. Karvinen 2023: Fuffme - Install Web Fuzzing Target on Debian
25.4.2026 10:41
Suoritin ensimmäiseksi komennot
$ sudo apt-get update #Päivittää saatavilla olevien pakettien listan
$ sudo apt-get install docker.io #Asentaa paketin docker.io ja riippuvuudet
En asentanut ffufia ja gitiä, koska minulla oli ne varmasti jo valmiina. Seuraavaksi komennot
$ git clone https://github.com/adamtlangley/ffufme #Kloonaa repositorion koneelleni määrittämästäni osoitteesta gitin avulla
$ cd ffufme/ #Vaihtaa käsiteltävän hakemiston hakemistoon ffufme
$ sudo docker build -t ffufme . #docker build tekee kuvan (image) Dockerfilestä. Valinta -t antaa mahdollisuuden nimetä ja asettaa tagin kuvaan muodossa nimi:tag. Lopuksi tulee hakemisto, josta Dockerfileä käytetään
(Lähteet docker komentoon: Docker. URL: Build, tag, and publish an image
Purpose/usage of Docker build -t flag vs Docker tag
What Is Tag In Docker?)
Ja vielä komento
$ sudo docker run -d -p 80:80 ffufme #run luo ja ajaa uuden kontin kuvasta, valinta -d ajaa komennon taustalla ja tulostaa uuden kontin id:n näytölle, valinta -p antaa asettaa hostin ja kontin portit muodossa hostPort:containerPort, lopuksi kuvan nimi joka tapauksessa oli ffufme
(Komennon ja valintojen lähteenä Dockerin manuaali Kalissa. Komento: man docker-run)
Sain komennon ajamisen jälkeen kontin id:n näytölle.

Kuva 6. Kontin id tuli vain näytölle
Varmistin vielä kontin toimivuuden curlilla.
$ curl -si localhost|grep title #curl hakee resurssit urlista, valinta -s poistaa tilapalkin, varoitukset, virheilmoitukset, valinta -i näyttää vain otsakkeet, localhost on url, merkki | putkittaa tulosteen, grep title poimii tulosteesta vain rivit joissa on sana title
(Valintojen -s ja -i lähteenä curlin manuaali Kalissa. Komento: man curl)

Kuva 7. Sivun otsikko haettuna curlilla
Kohde toimi ja oli valmiina tehtäviin.
Ratkaise ffufme harjoitukset - kaikki paitsi ei “Content Discovery - Pipes”.
c) Basic Content Discovery
25.4.2026 16:50
Koska olin aikaisemmin sulkenut jo kalin, kontti oli alhaalla joten loin uuden kontin. Tarkoitukseni oli ensimmäiseksi laittaa vanha kontti ylös, mutta hieman myöhemmin sain tietää, että olisi pitänyt ajaa ihan eri komento. Komentona
$ sudo docker run -d -p 80:80 ffufme
Latasin samalla tehtävään tarvittavat sanakirjat. En löytänyt sanakirjoja, jotka oli kerrottu localhost osoitteessa tehtävänannon yhteydessä. Todennäköisesti niiden nimet olivat muuttuneet joksikin toiseksi. Valitsin päättelyni perusteella ne, jotka olivat mielestäni lähimpänä tarkoitettuja sanakirjoja. Tiedoston parameters.txt korvasin tiedostolla burp-parameter-names.txt ja tiedoston subdomains.txt tiedostolla subdomains-top1million-5000.txt.
(Sanakirjat löydettävissä danielmiesslerin SecLists reposta: burp-parameter-names.txt ja subdomains-top1million-5000.txt)
Sitten vielä internet yhteys pois päältä.
25.4.2026 17:57
Tehtävänanto oli kuvanmukainen.

Kuva 8. Tehtävänanto löytyi localhostin sivuilta
Suoritin kuvanmukaisen komennon terminaalissa.
$ ffuf -w ~/wordlists/common.txt -u http://localhost/cd/basic/FUZZ

Kuva 9. Tehtävän hakemistot löytyivät
Menin vielä katsomaan selaimella urlit.

Kuva 10. Kuvassa tiedosto class

Kuva 11. Kuvassa tiedosto development.log
d) Content Discovery With Recursion
25.4.2026 18:15
Tehtävänanto oli seuraavan mukainen.

Kuva 12. Tehtävänanto löytyi localhost sivulta
Nyt pitäisi siis rekursiivisesti hakea hakemistoja ja tiedostoja. Ajoin komennon.
$ ffuf -w ~/wordlists/common.txt -recursion -u http://localhost/cd/recursion/FUZZ #Valinta -recursion hakee kaikkia osumia myös alihakemistoista
(Valinnan lähteenä ffufin ohje kalissa. Komento: ffuf)

Kuva 13. Tulos rekursiivisesta fuzzauksesta
Vastauksesta löytyi hakemistot admin ja users sekä polussa localhost…/admin/users/ tiedosto 96. Menin katsomaan tiedoston selaimella.

Kuva 14. Tiedosto 96 selaimessa ilmoitti onnistumisesta
e) Content Discovery With File Extensions
25.4.2026 18:35
Ensimmäiseksi katsottiin taas tehtävänanto.

Kuva 15. Tehtävänanto tehtävään localhost sivulla
Tällä kertaa piti etsiä logs hakemistosta tiedostonimiä, jotka sisältävät tiedostopäätteen (file extension) .log. Tämä saavutetaan ffufissa valinnalla -e. Lähdin ajamaan komentoa.
$ ffuf -w ~/wordlists/common.txt -e .log -u http://localhost/cd/ext/logs/FUZZ #Valinta -e mahdollistaa tiedostopäätteiden lisäämisen FUZZ-avainsanan perään
(Valinnan lähteenä ffufin ohje kalissa. Komento: ffuf)

Kuva 16. Vastaus tehtävän fuzzaus komentoon
Tiedosto users.log löytyi. Jälleen kerran menin selaimella katsomaan.

Kuva 17. Tehtävän ratkaisu oli löydetty
f) No 404 Status
25.4.2026 18:50
Otin tehtävänannosta taas kuvakaappauksen.

Kuva 18. Tehtävänanto löytyi jälleen localhost sivulta
Ajoin ensimmäiseksi komennon
$ ffuf -w ~/wordlists/common.txt -u http://localhost/cd/no404/FUZZ
Kuten tehtävänannossakin sanottiin, http-otsakkeiden tilakoodi oli 200 ainakin todella monessa polussa.

Kuva 19. Otsakkeen tilakoodin perusteella kaikkiin pitäisi päästä
Silti niitä ei löydy.

Kuva 20. Fuzzauksesta löytynyt mcp avattuna selaimessa
Silmäillessä vastauksia, kaikkien pituus oli 669 tavua, joten suodatin sillä vastauksia. Komentona siis
$ ffuf -w ~/wordlists/common.txt -u http://localhost/cd/no404/FUZZ -fs 669
Sitten tulikin jo tulosta.

Kuva 21. Fuzzauksen tulos suodatettuna pituudella 669
Tiedosto secret löytyi, joten taas lähdettiin firefoxilla surffaamaan.

Kuva 22. Tiedosto secret selaimessa
Kuten kuvasta näkyy sivulla oli teksti “Controller does not exist”. Tällä kertaa ei tullut ilmoitusta tiedoston löytämisestä, mutta voitaneen olettaa tehtävän olleen tehty, koska missään ei ollut kerrottu mitään tiettyä formaattia vastauksissa. Tämä vastaus kuului varmaankin kyseisen tehtävän luonteeseen.
g) Param Mining
25.4.2026 20:42

Kuva 23. Tehtävänanto tehtävään Param Mining
Kävin ensiksi katsomassa millainen sivu tulee oletuksena urlista localhost/cd/param/data. Pitäisi tulla tehtävänannon mukainen “Required Parameter Missing”

Kuva 24. Sivu avattuna selaimessa
Sieltä se tuli kuten kuuluikin. Sitten komento
ffuf -w ~/wordlists/burp-parameter-names.txt -u http://localhost/cd/param/data?FUZZ=1 #FUZZ-avainsanan kohtaan syötetään sanakirjan sanoja, joka tässä tapauksessa on parametrin paikalla fuzzaamassa parametrin nimeä. Parametrin arvona on 1
(Komennon selityksen lähteenä Hoikkala 2023. URL: Ffuf Readme)
Debug löytyi.

Kuva 25. Osa vastauksesta komennon ajamiseen
Selaimestakin sai vahvistuksen tehtävän onnistuneesta suorittamisesta.

Kuva 26. Ratkaisu tehtävään saavutettu
h) Rate Limited
25.4.2026 21:07

Kuva 27. Tehtävänanto tehtävään
Ajoin komennon
$ ffuf -w ~/wordlists/common.txt -u http://localhost/cd/rate/FUZZ -mc 200,429 #Valinta -mc ottaa http otsakkeen tilakoodit valinnan jälkeen jotka halutaan mukaan vastaukseen
(Valinnan lähteenä ffufin ohje kalissa. Komento: ffuf)
Tilakoodia 429 näytti ainakin tulevan paljon.

Kuva 28. Vastaus fuzzaukseen
Sitten ajoin tehtävänannon mukaisen toisen komennon. Toki domainin nimi piti taas muokata, koska se oli tehtävänannossa erilainen kuin localhost.
$ ffuf -w ~/wordlists/common.txt -t 5 -p 0.1 -u http://localhost/cd/rate/FUZZ -mc 200,429 #Valinnalla -t voidaan määrittää samanaikaisten tehtävien (threads) määrää, valinnalla -p määritetään viive jokaisen pyynnön välissä sekunteina
(Valintojen lähteenä ffufin ohje kalissa. Komento: ffuf)
Tuloksena tuli odotettu oraclen tiedosto.

Kuva 29. Tulos fuzzauksesta
Sitten tuttuun tapaan selaimella hakemaan tiedosto.

Kuva 30. Ratkaisu tehtävään selaimessa
i) Subdomains - Virtual Host Enumeration
25.4.2026 21:36

Kuva 31. Tehtävänanto tehtävään i
Lähdin liikkeelle komennolla
$ ffuf -w ~/wordlists/subdomains-top1million-5000.txt -H "Host: FUZZ.ffuf.me" -u http://localhost #Valinnalla -H voidaan etsiä alidomaineja muodossa Name: Value
(Valinnan lähteenä ffufin ohje kalissa. Komento: ffuf)
Vastauksessa korostui vastausten pituuden olevan 1495 tavua.

Kuva 32. Osa tuloksesta fuzzauksessa
Suodatin koon mukaan tuloksia.
$ ffuf -w ~/wordlists/subdomains-top1million-5000.txt -H "Host: FUZZ.ffuf.me" -u http://localhost -fs 1495
En saanut mitään tuloksia.

Kuva 33. Tulos fuzzauksesta
Tämä saattoi helposti johtua sanakirjastani, koska en löytänyt samanlaista sanakirjaa kuin tehtävänannossa oli mainittu. Tämän johdosta lisäsin omaan sanakirjaani sanan “redhat”, koska tehtävänannossa oli mainittu alidomainin olevan kyseisen niminen. Ajoin uudestaan komennon vastauksen koon suodatuksella.

Kuva 34. Tulos uudesta fuzzauksesta
Alidomainia ei löytynyt selaimella, joka olikin ihan luontevaa, koska en saanut muutettua get-pyynnön host otsaketta firefoxissa, joten löysin netistä miten voisin vielä varmistaa virtual hostin olemassaolon curlilla. Lisäisin vain valinnan -H ja parametrit perään.
(Stack Exchange Inc. How to send a header using a HTTP request through a cURL call?)
Varmistin asian vielä kalissa curlin manuaalista.
(Komento: man curl)

Kuva 35. Vastaus get-pyyntöön jossa host otsake muutettuna
Vastauksessa luki “Subdomain Found” joten alidomain löytyi ja tehtävä oli paketissa.
Lähteet
Curlin manuaali Kalissa. curl - transfer a URL. Komento: man curl. Luettu: 25.4.2026.
danielmiessler. SecLists - burp-parameter-names.txt. Luettavissa: burp-parameter-names.txt. Luettu: 25.4.2026.
danielmiessler. SecLists - common.txt. Luettavissa: SecLists - common.txt. Luettu: 24.4.2026.
danielmiessler. SecLists - subdomains-top1million-5000.txt. Luettavissa: subdomains-top1million-5000.txt. Luettu: 25.4.2026.
Docker. Build, tag, and publish an image. Luettavissa: Build, tag, and publish an image. Luettu: 25.4.2026.
Dockerin manuaali Kalissa. docker-run - Create and run a new container from an image. Komento: man docker-run. Luettu: 25.4.2026.
Ffufin manuaali Kalissa. 2022. ffuf - Fast web fuzzer written in Go. Komento: man ffuf. Luettu: 24.4.2026.
Ffufin ohje Kalissa. Fuzz Faster U Fool - v2.1.0-dev. Komento: ffuf. Luettu: 25.4.2026.
Hoikkala, J. 2023. ffuf - Fuzz Faster U Fool. Luettavissa: ffuf - Fuzz Faster U Fool. Luettu: 24.4.2026.
Karvinen, T. 10.5.2023. Find Hidden Web Directories - Fuzz URLs with ffuf. Luettavissa: Find Hidden Web Directories - Fuzz URLs with ffuf. Luettu: 24.4.2026.
Karvinen, T. 30.10.2023. Fuffme - Install Web Fuzzing Target on Debian. Luettavissa: Fuffme - Install Web Fuzzing Target on Debian. Luettu: 25.4.2026.
Patel, A. GeeksforGeeks. 23.7.2025. What Is Tag In Docker?. Luettavissa: What Is Tag In Docker?. Luettu: 25.4.2026.
Stack Exchange Inc. 2021. Purpose/usage of Docker build -t flag vs Docker tag. Luettavissa: Purpose/usage of Docker build -t flag vs Docker tag. Luettu: 25.4.2026.
Stack Exchange Inc. 2025. How to send a header using a HTTP request through a cURL call?. Luettavissa: How to send a header using a HTTP request through a cURL call?. Luettu: 25.4.2026.
Tätä dokumenttia saa kopioida ja muokata GNU General Public License (versio 3 tai uudempi) mukaisesti. http://www.gnu.org/licenses/gpl.html