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.

Sivu selaimessa
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.

Ohjelman ajaminen
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.

Tuloste
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.

Lippu
Kuva 4. Lippu löytyi muodossa FLAG{}

Gitin hakemistostakin löytyi lippu.

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.

Kontti
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)

Otsikko
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.

Tehtavananto
Kuva 8. Tehtävänanto löytyi localhostin sivuilta

Suoritin kuvanmukaisen komennon terminaalissa.

$ ffuf -w ~/wordlists/common.txt -u http://localhost/cd/basic/FUZZ

Tulos
Kuva 9. Tehtävän hakemistot löytyivät

Menin vielä katsomaan selaimella urlit.

Ensimmainen sivu
Kuva 10. Kuvassa tiedosto class

Toinen sivu
Kuva 11. Kuvassa tiedosto development.log


d) Content Discovery With Recursion

25.4.2026 18:15

Tehtävänanto oli seuraavan mukainen.

Tehtavananto
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)

Tulos
Kuva 13. Tulos rekursiivisesta fuzzauksesta

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

Ratkaisu sivu
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.

Tehtavananto
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)

Vastaus komentoon
Kuva 16. Vastaus tehtävän fuzzaus komentoon

Tiedosto users.log löytyi. Jälleen kerran menin selaimella katsomaan.

Ratkaisu
Kuva 17. Tehtävän ratkaisu oli löydetty


f) No 404 Status

25.4.2026 18:50

Otin tehtävänannosta taas kuvakaappauksen.

Tehtavananto
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.

Vastaus komentoon
Kuva 19. Otsakkeen tilakoodin perusteella kaikkiin pitäisi päästä

Silti niitä ei löydy.

Polku selaimessa
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.

Vastaus komentoon
Kuva 21. Fuzzauksen tulos suodatettuna pituudella 669

Tiedosto secret löytyi, joten taas lähdettiin firefoxilla surffaamaan.

Tiedosto selaimessa
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

Tehtavananto
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”

Sivu
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.

Tulos
Kuva 25. Osa vastauksesta komennon ajamiseen

Selaimestakin sai vahvistuksen tehtävän onnistuneesta suorittamisesta.

Ratkaisu
Kuva 26. Ratkaisu tehtävään saavutettu


h) Rate Limited

25.4.2026 21:07

Tehtavananto
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.

Tulos
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.

Tulos
Kuva 29. Tulos fuzzauksesta

Sitten tuttuun tapaan selaimella hakemaan tiedosto.

Ratkaisu
Kuva 30. Ratkaisu tehtävään selaimessa


i) Subdomains - Virtual Host Enumeration

25.4.2026 21:36

Tehtavananto
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.

Tulos
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.

Tulos
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.

Tulos
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)

Vastaus pyyntoon
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