Tässä postauksessa tehdään taas Tero Karvisen tunkeutumistestaus-kurssin läksyjä. Läksyt on täältä: http://terokarvinen.com/2020/tunkeutumistestaus-kurssi-pentest-course-ict4tn027-3003/ . Linkki myös lopussa.
a) Murra salasanoja tiivisteistä. Kokeile erilaisia salasanojen tiivisteitä ja eri ohjelmia (esim. hashcat, john). Toimiiko hashcat koneellasi GPU:lla? Miten GPU:n käyttö vaikuttaa nopeuteen?
Ensinnäkin tarvitsen tiivisteitä mitä voisin murtaa. Latasin md5 hash listan internetistä, linkki tässä (Lähde 1). Tiedosto on 7zip muodossa, joten meidän täytyy ensin purkaa se. Tein uuden kansion sitä varten, ja purin tämän .7z tiedoston komennolla:
7z x left_md5crypt.7z
ja saimme tämän avulla md5crypt.txt tiedoston, eli tekstitiedoston missä on hashit. Nyt meidän pitää vain alkaa murtamaan salasanoja. Hashcat tulee kalin mukana, ainakin ymmärtääkseni. Yksi ongelma: hashcat ei pysty käyttämään koneeni oikeita tehoja virtuaalisessa ympäristössä, joten en itseasiassa edes ole täysin varma miten tämä kannattaisi tehdä. Päätin lopulta kuitenkin eka yrittää murtaa tätä hash listaa virtuaalisessa ympäristössä, ja sen jälkeen hosti koneella.
hashcat -m 0 -a 3 -o crack.txt --force
Luin man pagea ja kasasin kyseisen komennon. -m spesifioi hash tyypit, ja tässä oli kyseessä md5 jonka koodi oli 0. -a spesifioi attack moden, 3 on brute force. -o kertoo meille output filen, ja –force pakottaa ohjelman juoksemaan virheistä huolimatta. Laitoin komennon pyörimään ja hirveä kasa keltaista tekstiä alkoi juoksemaan terminaalia pitkin. Tässä kuvakaappaus:

Käsittääkseni tämä tarkoittaa että hashcat ei tunnistanut hash tyyppiä, joten tämä ei onnistu. Terminoin komennon ja katoin man pagea uudestaan. Googlasin mikä hash type tuo $1$ on ja löysin tämän sivun: https://passlib.readthedocs.io/en/stable/lib/passlib.hash.md5_crypt.html (Lähde 2). Kyseessä onkin siis md5crypt, ei md5. Muutetaan tuossa aiemmassa komennossa -m 0 -> -m 500
Tällä kertaa onnistuimme ehkä “hieman” paremmin, mutta saimme seuraavan virheen:

Virtuaalikoneelta selkeesti on loppumassa happi ainakin brute forceen. Kokeilen seuraavaksi word list hyökkäystä. Uusi komentoni:
hashcat -m 0 -a 0 --force -o crack.txt md5crypt.txt /usr/share/wordlists/rockyou/rockyou.txt
Sama ongelma tuli taas, eli insufficient memory. Tässä kohtaa luovutin ja latasin toisen hash listan joka on hieman kevyempi. Kävin etsimässä täältä kevyemmän listan: https://hashes.org/hashlists.php (Lähde 3), ja otin sellaisen jossa oli vähän päälle 80k hashia, eli ei hirveän montaa.
Kokeilin sitäkin, tällä kertaa kyseisellä komennolla:
hashcat -m 0 -a 0 --outfile-format 2 -o crack.txt kevytlista.txt /usr/share/wordlists/rockyou/rockyou.txt
Ja nyt kun poistin –force parametrin, lopullinen ongelma selvisi:

Eli emme pysty tekemään tätä virtuaalikoneen kanssa koska hashcat ei löydä GPU:ta. Tässä kohtaa luovutin kyseisen ympäristön parissa painimisen, ja vaihdoin taktiikkaa niin että lataan hashcatin hosti koneelle ja murran nämä listat sillä.
Latasin hashcatin täältä: https://hashcat.net/hashcat/ (Lähde 4).
Seuraavaksi meidän pitää vain avata windows terminaali ja navigoida sinne mihin olen extractannut hashcatin, ja sen jälkeen voimme käyttää sitä windows terminaalilta kutsumalla hashcat64.exe:n, esim: “hashcat64.exe -m0 -a0 -o cracked.txt hashes.txt“. Samanlainen toimivuus siis kuin linuxilla. Latasin saman hashilistan kuin tuo kevytlista.txt aiemmassa kohdassa.
Käytin aluksi komentoa
hashcat64.exe -m 0 -a 0 -o cracked.txt kevytlista.txt rockyou.txt
Mutta hashcat kokoajan palautti pelkästään “exhausted” statuksen, eikä tehnyt siis yhtään mitään. Mietin pitkään mikä tässä on ongelmana, kunnes kokeilin tehdä omaa dictionary attackiani. Käytin sivustoa md5hashgenerator.com (Lähde 5) hashin tekemiseen sanasta “password” ja sitten tein oman salasanalistani missä oli pelkästään sana password, ja juoksin hashcatilla komennon
hashcat64.exe -m 0 -a 0 -o cracked.txt password.txt salasanalista.txt
ja kyllä, hashcat mursi tämän oikeastaan heti. Uskon siis että jotain vikaa oli tuossa salasanalistassani jonka olin saanut aiemmin, koska hashcat silti näyttäisi toimivan. Tässä kohtaa en ihan tiedä mistä keksisin jonkun md5 password hash tiedoston minkä voisin crackata. No, löysin vielä yhden jota ajattelin kokeilla täältä (Lähde 6). Otin tuolta Battlefield-hashes vuodelta 2013.
Tämä on näköjään oikea md5 lista, joten laitan komennon
hashcat64.exe -m 0 -a 0 -w 3 -o cracked_battlefield.txt hashes/bfield.hash passwordlist/rockyou.txt
Ainut uusi parametri on tuo -w 3, ja se kertoo että käyttää enemmän koneen tehoja. Maximi on 4, mutta en halunnut puskea systeemiä liian pitkälle. Tosin, tästä riippumatta hashcat ei käyttänyt GPU:tani sen rajoille juuri ollenkaan, itseasiassa vain 6% utilization. Mutta hashcat oli silti nopea ja teki dictionary attackin hasheja vastaan ja sai ison listan crackattuja salasanoja.

Tuossa lopullinen tuloste hashcatilta. Jos luen tätä oikein, niin sain 28.25% salasanoista crackattua rockyou.txt avulla, eli aika tehokas salasanalista. Hashcat käytti tässä GPU:tani, tosin aika pienellä teholla silti. Tuossa speed näyttäisi olevan 66983 H/s eli yli 65 tuhatta hashia sekunnissa. Olisi tietysti kiva jos hashcat käyttäisi GPU:ta vaikka 60% utilizationilla eli 10 kertaa enemmän, mutta en löytänyt miten näin voi tehdä.
b) Murra salasanoja omalla koneellasi olevista palveluista. Esimerkiksi ssh:sta ja HTML-lomakkeelta. (esim. hydra). Ole huolellinen, että osoitat ohjelmalla vain luvallisia harjoitusmaaleja; voit käyttää esim. localhost-osoitetta harjoitteluun.
Ajattelin käyttää hydraa tässä ja tehdä pari erittäin heikosti suojattua ssh käyttäjää mihin voisin murtautua. Teen kolme käyttäjää kohdekoneelle, joiden nimet ja salasanat ovat seuraavat:
ssh1:password ssh2:123456 ssh3:letmein
Eli huomattavan vulnerable salasanoja. Murtaisin myös nuo usernamet mutta minulla ei ole mitään fiksua salasanalistaa missä nuo usernamet esiintyy: olisihan nekin voinut varmaan ottaa jostain salasanalistasta, mutta sinänsä usernamien murtamisessa ei ole mitään eroa.
Katsoin apua hydran käyttämiseen täältä: https://linuxconfig.org/ssh-password-testing-with-hydra-on-kali-linux (Lähde 7). Aion käyttää dictionary hyökkäystä tässä esimerkissä, ja teen sen komennolla
hydra -L nimet.txt -u -P /usr/share/wordlists/fasttrack.txt 10.0.2.15 ssh
Nopea selitys komennosta. -L spesifioi usernamet, ja tässä käytän tiedostoa nimet.txt jossa on nuo kolmen juuri tekemän accounttini nimet. -u muuttaa miten hydra kokeilee salasanoja, ja tällä asetuksella se kokeilee jokaista salasanaa jokaista käyttäjää vastaan ja sitten liikkuu seuraavaan salasanaan. -P käyttää kalin mukana tulevaa wordlistaa fasttrack.txt joka on pienempi salasanalista jossa on kaikki yleiset salasanat (näiden pitäisi löytyä sieltä). 10.0.2.15 on toinen virtual hostini joka on samassa lähiverkossa ja ssh kertoo mitä palvelua vastaan hyökkäämme, eli ssh. Katsotaan mitä komento saa aikaan:

Hydra löysi kaikki tekemäni salasanat hieman alle minuutissa. Tämä oli kuitenkin aika hidasta ottaen huomioon että nuo salasanat olisi normaalisti pitänyt murtaa sekunnissa, joten hydra ssh:n kanssa ei ole kauhean nopea. Se oli kyllä paljon nopeampi wordpressin kanssa kun kokeilin viime viikon tehtävissä hydraa wordpress login pagea vastaan.
c) Etsi paikallisia salasanoja sivuttaissiirtymää varten. (esim LaZagne, mimikatz, meterpreter hashdump)
En ole ihan varma mikä sivuttaissiirtymä on, mutta oletan että teemme vain näillä työkaluilla sitä mitä niillä on tarkoituskin tehdä, eli tutkitaan ensin mitä nämä tekevät ja sitten käytetään.
Halusin kokeilla tätä meterpreterin kanssa, joten tarvitsen ensin kohteen mihin yhdistän, ja päätin käyttää metasploitable 2 laitetta koska siihen on helppo murtautua enkä silloin tarvitse mitään isoa setuppia. Hyökkään metasploitable 2 laitteeseen moduulilla unrealIRCd eli “use exploit/unix/irc/unreal_ircd_3281_backdoor“. Vielä sen jälkeen set RHOSTS 192.168.56.101, ja olemme valmiita. Exploit -j, sillä haluamme jättää tämän session backgroundille. Sen jälkeen voimme nostaa sen meterpreter sessioksi komennolla “session -u 4“. Tuo 4 on vain session numero, meni pari kertaa kokeiluksi joten sen takia se on noin suuri, komennolla “sessions” näkee kaikki omat sessiot.

Tuossa siis omani, eli meillä on nyt meterpreter sessiokin kohteessa. Seuraavaksi otetaan hashdump esiin, ja laitetaan se käyttöön komennolla “set post/linux/gather/hashdump/“. Sen asetukset (jotka näemme komennolla options):

Pitää vain kertoa meterpreter sessionin ID, eli meidän tapauksessa 6.

Nyt olemme valmiita. Pelkkä komento run riittää.

Tuo keräsi meille informaatiota järjestelmästä ja sen käyttäjistä sekä niiden salasanoista. Voimme käyttää tuota tehtyä tiedostoa salasanojen crackkaamiseen. Tältä tuolla metasploitin tekemässä tiedostossa näyttää:

Tuosta nyt on sinänsä hieman hankala lähteä hasheja poimimaan muuta kuin käsin, tai ainakaan itellä ei ole grep tai regex niin hyvin hallussa että tuosta saisi ne järkevästi otettua. Jos käytämme hash-identifier ohjelmaa tuohon msfadminin hashiin niin saamme seuraavan tuloksen:

Hash-identifier ohjelma siis toimii todellakin niin yksinkertaisesti että jos kalissa kirjoittaa hash-identifier terminaaliin niin ohjelma käynnistyy, ja silloin vaan voi copy pasteta tuon hashin ja se yrittää kertoa mikä hashtyyppi on kyseessä. Eli tässä tapauksessa md5. Tarkemmin sanottuna, se on md5crypt. Pistin hashin windows koneelleni ja annoin hashcatin crackata, lopputulos:
Tuossa näkyy myös komento mitä käytin. Hashcat siis sanoo crackanneensa hashin, tarkistetaan output tiedosto:

Oikein meni. Tämä on hyvin käytännöllinen tapa millä voimme kerätä salasanoja käyttöjärjestelmästä jonka olemme kompromisoineet.
d) Etsi Mirai-haittaohjelman lähdekoodista kohta, josta ilmenee käytetty hyökkäys. Selitä, miten hyökkäys toimii. Mistä muista lähteistä löytyy tietoa Miraista? Onko samoja tekniikoita käytetty muissa hyökkäyksissä tai haittaohjelmissa?
Mirain lähdekoodi löytyy githubista täältä: https://github.com/jgamblin/Mirai-Source-Code (Lähde 8). Tämä tehtävä on itselleni haastava, sillä en ole kauhean hyvä koodin lukemisessa, ja osaan ohjelmoinnista vaan täysin perusteet. Tai no, olen tehnyt oman botin ennen pythonilla, mutta en silti sanoisi että koodausosaamiseni menisi alkeellisen tason yli.
Aivan rehellisesti sanottuna koodin lukeminen oli erittäin haastavaa sillä tiedostoja oli useita, ne vaikuttivat tekevän hyvin samanlaisia asioita, ja koodi oli aika sotkuista niin että en saanut selville mitä se oikein tekee (koodia ei oltu väsätty mitenkään simppelisti). Onnistuin kuitenkin löytämään tämän käyttäjätunnus/salasanalistan:

Tiedän että mirai oli bottinetti joka hyökkäsi IoT laitteita kohtaan, ja uskon että näitä salasanoja yritetään käyttää löydettyjen IoT laitteiden sisälle kirjautumiseen (vaikuttavat olevan joko default salasanoja/todella heikkoja). En löytänyt koodista oikeastaan mitään muuta hyödyllistä, joten menisin väittämään että tuo on miten tämä botti toimii (eli etsii ensin IoT laitteita, ja sitten yrittää kirjautua niihin näillä salasanoilla).
Menin katsomaan wikipediasta lisää tietoa koska tämän jälkeen jäin aikalailla jumiin ja funktioiden tuijottaminen ei oikein vienyt minua pidemmälle. Wikipedia linkki lähteissä (Lähde 9).
Wikipediassa on mainittu että tämä botti skannaa jatkuvasti internettiä lukuunottamatta tiettyjä IP-osoitteita kuten vaikka yhdysvaltojen department of defensen käyttämiä, varmaan eivät halua ongelmiin isojen valtioiden kanssa. Tämän jälkeen mirai yrittää kirjautua näihin laitteisiin default käyttäjätunnuksilla ja salasanoilla (kuten luulinkin) ja sen jälkeen infektoitunut laite jatkaa tämän prosessin tekemistä, eli internetin skannaamista ja uusien laitteiden liittämistä botnettiin.
Toisia samanlaisia botnettejä/malwareita ovat esimerkiksi “Bashlite”, “Gafgyt”, “Gbot” ja “Remaiten”. Ne ovat itseasiassa Mirain edeltäjiä. Lähde tähän täällä: https://krebsonsecurity.com/2017/01/who-is-anna-senpai-the-mirai-worm-author/ (Lähde 10). Samassa artikkelissa myös käydään läpi investigaatio siihen, kuka Mirain takana on (ja artikkelin kirjoittaja oli myös oikeassa Mirain kehittäjästä).
e) Kokeile jotain uutta salasanojen murtamiseen tai keräämiseen tarkoitettua ohjelmaa, jota ei ole opetettu tunnilla tai käytetty vielä läksyissä. Voit katsoa vinkkejä esimerkiksi infosecn1nja:n tai 0xdf:n artikkeleista linkeistä.
En oikeen löytänyt mitään fiksuja ohjelmia, mutta päätin lopulta kokeilla sellaista ohjelmaa kuin medusa. Man pagen luettuani vaikutti siltä että tällä pystyy brute forcettamaan web logineja kuten vaikka ssh, telnet, mysql, ftp. Päätin käyttää tässä testissä kali linuxia hyökkääjäkoneena ja metasploitable 2 laitetta kohteena.
Tein metasploitable 2 uuden käyttäjän nimeltä monkey salasanalla password123, ja laitoin meduusan crackkaamaan tätä:
medusa -h 192.168.56.101 -u monkey -P /usr/share/wordlists/rockyou/rockyou.txt -M ssh -O medusabruteforce/telnet2_crack.txt -t 100
-u on käyttäjätunnus jota käytetään, -P spesifioi salasanalistan, -M on mitä moduulia käytetään (tässä tilanteessa ssh), -O on output file, ja -t on kuinka monta yritystä per sekuntti. Huomio että 100 yritystä per sekuntti ei onnistu ssh, mutta se rajoittaa sen siihen maksimiin silti.
Medusa ehtii käydä noin 1300 salasanaa läpi ennenkuin se pysähtyy. En ollut varma löysikö se salasanan vai lopettiko se, joten menin katsomaan output filen:

Ihan hirveän vaikeampaa salasanaa en viitti antaa näille testiaccounteille, eihän se mitään muuttaisi paitsi sitä että ohjelma saisi juosta taustalla sen päivän (ja ssh brute forceeminen on hidasta!). Aika simppeli työkalu käyttää, vaikka onhan olemassa tietysti voimakkaampiakin työkaluja kuten hydra. Mutta tämä on erittäin simppeli työkalu ottaa käyttöön. Tässä ei tarvinnut erikseen spesifioida porttia, vaan annoimme vaan moduleksi palvelun nimen. Porttia pystyy kuitenkin muuttamaan myös mikäli palvelu on jollain muulla portilla kuin default mitä ohjelma käyttää.
Pari hyödyllistä komentoa medusan oppimiseen:
man medusa medusa -help medusa -d
medusa -d printtaa kaikki moduulit mitä meduusalla on. Kokeilin tätä myös metasploitable 2 mysql loginia vastaan, ainut ikävä juttu on siinä että metasploitable 2 root login on ilman salasanaa: ehdin ennen tämän tajuamista kokeilla jo 3 miljoonaa salasanaa :). Tässä komento mitä käytin siinä:
medusa -h 192.168.56.101 -u mysql -P /usr/share/wordlists/rockyou/rockyou.txt -M mysql -O medusabruteforce/telnet2_crack.txt -t 100
Myös usernamen selvittämiseen voi käyttää listaa, mutta siihen tulee sitten menemään erityisen pitkä aika. Omalla rockyou.txt tiedostossa on ainakin noin 14.3 miljoonaa salasanaa, joten ihan hirveän montaa käyttäjää et halua käydä läpi noin usealla salasanalla.
f) Ratko WebGoatin tehtäviä niin, että olet ratkaissut yhteensä 25-30 tehtävää.
Olen laskujeni mukaan tehnyt 21 tehtävää tähän mennessä, joten ratkotaan ainakin 4 lisää. Aloitan kohdasta Injection flaws: command injection.
Sain mitmproxyn toimimaan tätä tehtävää varten, mutta oli vaikeaa löytää resursseja siitä, miten ohjelma toimii ja miten saisin requesteja muokattua. Pitkän googlailun jälkeen tajusin kuitenkin että tässä pitää ensin interceptata requesteja ja sitten muokata niitä ja tämän jälkeen päästää ne menemään. Mitään yhtä lähdettä en voi tähän laittaa, sillä tämä oli vaan pitkän pähkäilyn lopputulos kun viimeinkin jokin naksahti päässäni.
No, kokeillaan. Minulla on nyt mitmproxy auki ja laitan sieltä interceptin tällä filterillä:

Eli nappaamme kaikki localhostista tulevat paketit. Hyvä muistaa että webgoat toimii localhostilla, ainakin tässä meidän tapauksessa. Seuraavaksi mennään itse tehtävään:

´Tehtävässä voi siis katsoa eri sivuja tuon napin avulla. Pistetään intercept päälle ja kokeillaan vaihtaa tuota sivua ja painaa View:

Saimme tuon napattua mitmproxyssä. Punainen siis tarkoittaa että tätä ei olla vielä lähetetty eteenpäin, vaan se odottaa että teemme sille jotain/annamme sen mennä läpi. Pari hyvää komentoa muuten tähän väliin:
- painamalla “i” pystyy laittamaan intercept filterin päälle
- painamalla “a” pystyy päästämään tietyn interceptatun paketin läpi, “A” päästää kaikki läpi.
- painamalla “e” kun tarkastelee jotain yksittäistä flowta pystyy sitä muokkaamaan, ja painamalla tab pystytään tallentamaan nämä muutokset.
Mennään tuohon napattuun post requestiin ja katsotaan miltä siellä näyttää:

Tältä siis näyttää meidän POST request. Painetaan e ja muokataan sitä hieman (käytin tässä webgoatin “show solution” apuna, lähinnä mitmproxyn käyttämisen oppimista vielä).

Muokkasin hieman tuota formia, eli yritämme tässä backdoors.help lisäksi saada komentoa ipconfig pyörimään serverillä. Päästetään tämä eteenpäin ja katsotaan mitä tapahtuu:

Saimme kannustusviestin webgoatissa että olemme oikeilla jäljillä. Tehdään sama uudestaan, mutta tällä kertaa muokataan formia näin: “&netstat -a & ipconfig. Tulikin tässä kohtaa mieleen että intercept filterinä localhost on vähän liikaa, joten muokkasin sitä näin:

Nyt sen pitäisi napata vain tuo tietty post request. En kuitenkaan saanut tätä tehtävää toimimaan oikeastaan mitenkään, ja googlasin ja löysin tämän threadin: https://github.com/WebGoat/WebGoat/issues/179 (Lähde 11) jossa oli samaa ongelmaa mietitty. En nyt keksinyt tästä oikein mitään, joten käytin siellä esitettyä ” ; whoami # injectiota ja pääsin kohdasta läpi. 22 tehty.
Tässä kohdassa en selitä ihan yhtä tarkasti miten käytin mitmproxyä, samat asiat pätee aiemmasta kohdasta. Tässä tehtävässä pitää saada tehtyä SQL injektio niin, että se antaa meille dataa kaikista weather_stationeista eikä pelkästään yhdestä. Tässä miltä sql stringi näyttää:

Mitä tein oli että interceptasin tuon mitmproxyllä, ja laitoin seuraavan kyseiseen requestiin:

Päästetään tämä läpi ja katsotaan mitä tapahtuu.

Pääsimme kohdasta läpi, joten tuo on 23 tehty.
Kohta log spoofing oli sen verran hankala, että katoin neuvoa. Näköjään siinä on tarkoitus saada kirjautuessa uudelle linelle kirjoitettua “admin has succeeded in logging in”. Newline syntaksti oli vain todella kummallinen, kokeilin ensin itse /n joka yleensä toimii. Tämä oli lopulta ratkaisu:
Testi%0d%0aLogin succeeded for username: admin
Seuraava kohta on XPATH injection.
En ole ikinä tehnyt mitään XML injektioita, joten googlasin ensin miten tämmöinen kannataa suorittaa. Löysin tämän: https://owasp.org/www-community/attacks/XPATH_Injection (Lähde 12). Tuolla nopsaan lukien pistin login formiin tälläisen:

Pistin tuosta vain submit ja katsoin mitä tapahtuu:

Pääsimme kohdasta läpi tuolla, eli ei mikään erityisen haastava tehtävä ja erittäin samanlainen kuin nuo sql injektiot. 25 tehty.
Kohta String SQL injection
Tehtävä näytti tältä:

Eli tavoitteena saada kaikkien ihmisten luottokorttitiedot näkyviin, ei pelkästään vaikka smithin. Lähin kokeilemaan tätä kannalta ‘ OR 1=1, mutta ei toiminut. Googlasin tämän kaltaisen sql injection, ja löysin tämän: https://www.w3schools.com/sql/sql_injection.asp (Lähde 13). Siellä sanotaan, että “”=”” on aina totta. No, kostrutkoin oman:
' OR ''=' .
Kun laitamme tuon ‘ ja sen jälkeen OR, näyttää se tältä: ” OR ‘. Nyt meidän pitää vain laittaa tuo meidän ”=” siihen mukaan ja meidän pitäisi saada kaikkien tiedot. Huom, että = tarvitsee vain yhden ‘ koska se toinen heittomerkki tulee perään vielä automaattisesti. Katsotaan mitä tapahtuu:

Luottokorttitiedot ovat nyt meidän. 26 kohtaa tehty, ja jätän tämän tältä osaa tähän.
Lähteet:
Lähde 1: https://hashes.org/left.php
Lähde 2: https://passlib.readthedocs.io/en/stable/lib/passlib.hash.md5_crypt.html
Lähde 3: https://hashes.org/hashlists.php
Lähde 4: https://hashcat.net/hashcat/
Lähde 5: https://www.md5hashgenerator.com/
Lähde 6: http://www.adeptus-mechanicus.com/codex/hashpass/hashpass.php
Lähde 7: https://linuxconfig.org/ssh-password-testing-with-hydra-on-kali-linux
Lähde 8: https://github.com/jgamblin/Mirai-Source-Code
Lähde 9: https://en.wikipedia.org/wiki/Mirai_(malware)
Lähde 10: https://krebsonsecurity.com/2017/01/who-is-anna-senpai-the-mirai-worm-author/
Lähde 11: https://github.com/WebGoat/WebGoat/issues/179
Lähde 12: https://owasp.org/www-community/attacks/XPATH_Injection