h2 - Break & unbreak
Date: 31-10-2024
Ympäristö:
OS: Debian GNU/Linux 12 "Bookworm"
Browser: Firefox 128.3.1esr (64-bit)
Hardware Model: innotek Gmhb VirtualBox
Memory: 5.7 GiB
Prosessor: AMD Ryzen 9 3900X - 6 cores used
Disk: 21.5 GB
Network: NAT
A) Murtaudu 010-staff-only. Ks. Karvinen 2024: Hack'n Fix
Ensimmäinen haaste olikin, kun input kenttään ei pystynytkään syöttämään mitään muuta
kuin vain numeroita. Tähän oli onneksi helppo ratkaisu kun Client puolen koodissa pystyi muuttamaan
input kentän
type="number"
muuttujan vain tyhjäksi, minkä jälkeen kenttään pystyi syöttämään mitä vain.
(Yksi lisäsyy, miksi Client puolen tarkistukset eivät ole riittäviä)
Ihan ensimmäisenä kokeilin kalssikko ' OR 1=1--
mutta tämä ei toiminu ja
antoi vain
tyhjentävästi vastuaukseksi "foo". Tämän vastauksen jälkeen lähdin kokeilemaan paljon
kaikkea erillaista, mitkä ei toiminu ja antoivat vaan "500 internal server error".
Palasin tämän jälkeen annettuihin tietoihin ja yritin ymmärtää täysin miten tietokanta
toimii ja mistä se koostuu, minkä perusteella tulin tämmöiseen taulukko päätelmään.
Pins | Username | Password |
---|---|---|
123 | - | somedude |
- | admin | - |
- | - | foo |
Tässä vaiheessa en siis tienny yhtään tarpeeksi SQL injektioista ja ylipäätänsä SQL
kielenäkin on melko vieras, kun en ole sitä koskaan muuten käyttänyt paitsi juuri SQL injektioissa. Näin
siis
lähdin lukemaan lisää eri tapoja, miten toteuttaa eri SQL injektioita, kunnes löysin sopivan tavan tähän
tarkoitukseen.
UNION attack mahdollistaa yhden tai useampien SELECT lauseiden käyttämisen. Tämän resurssin avulla
onnistuin kokoomaan hyöäkkäys lauseen ' UNION SELECT password FROM pins--
. Tässä suuressa
avussa oli
myös aikaisempi taulukko jonka olin koonnu itselleni, minkä avulla oli helpompi tajuta ns. logiikka.
(PortSwigger Ltd.)
Ja tämän lauseen avulla onnistuinkin sitten saamaan lipun:
Lippu =SUPERADMIN%%rootALL-FLAG{Tero-e45f8764675e4463db969473b6d0fcdd}
B) Korjaa 010-staff-only haavoittuvuus.
Seuraavaksi oli aika korjata koodissa olevat virheet, jotta sama injektio ei olisi enää
mahdollista. Löysin yhden virheen, mikä luo mahdollisuuden tälle injektiolle. Ongelma siis on tässä,
että SELECT lauseessa oltiin käytetty suoraan käyttäjältä tullutta syötettä, eikä sitä syötettä oltu
puhdistettu välissä oikeiden menetelmien kautta.
Tarkoituksena on siis luoda erillinen pin2
muuttuja mihin käyttäjän syöttämä tieto
tallennetaan, ja minkä
jälkeen se yhdistetään turvallisesti execute()
funktiossa.
Ja näin korjatun koodin myötä samalla syötteellä tulos on tämä. Eli korjaus toimi
toivotulla tavalla ja kyseinen injektio ei enää toimi.
Haavoittuus on syntynyt todennäköisesti tiedottomuudesta, kun ei ole tiedetty miten SQL injektio toimii
ja miten sitä vastaan voi suojautua. Tämä on hyvä esimerkki siitä, että tietämättömyys voi olla
hyvin kallis virhe.
Ja tässä ainoana apuna käytin Copilottia, mikä auttoi selittämään, mitä koodi tekee,
ja miten eri functiot toimivat.
C) Ratkise. Karvinen 2023: Find Hidden Web Directories - Fuzz URLs with ffuf dirfuzt-1.
Seuraavaksi vuorossa oli ffuf haaste, jossa tarkoituksena oli löytää piilotetut
hakemistot nettisivuilta. Teron kirjoittamassa ohjeessa miten ffuf työkalu toimii, selitettiin
loistavasti miten työkalua pystyy käyttämään tähän tarkoitukseen, ja miten filtteröidä tuloksia, jotta
löydetään halutut hakemistot.
Lähdin haasteeseen lataamaalla kohteen ja antamalla sille tarkoituksenmukaiset oikeudet komennolla
chmod 744 dirfuzt-1
. Tämän jälkeen
tein yleisen discovery skannauksen komennolla
./ffuf -w common.txt -u http://127.0.0.2:8000/FUZZ
, mikä
oletettavasti palautti paljon tuloksia 200 status koodilla.
Lähdin samalla lähestymistavalla liikenteeseen, kun esimerkkitehtävässäkin eli filtteröin hakemiston
koon mukaan ei halutut vastaukset pois. Tässä tapauksessa se tapahtui filtterillä
-fs 154
minkä mä lisäsin vain aiemmin käyttämän komennon perään.
Tämä palautti minulle suoraan halutut hakemistot ja hakemalla ne manuaalisesti selaimesta löytyi heti
ensimmäisellä yritykellä halutut liput.
Hakemistot:
Version hallinta hakemisto: .git/
Flag: FLAG{tero-git-3cc87212bcd411686a3b92547d47fc51}
Admin sivun hakemisto: wp-admin/
Flag: FLAG{tero-wpadmin-3364c855a2ac87341fc7bcbda995b580}
(Tero Karvinen 2023)
D) Murtaudu 020-your-eyes-only. Ks. Karvinen 2024: Hack'n Fix
Tässä tehtävässä oli tarkoituksena päästä käsiksi admin access consoleen, ilman että
katsoo lähdekoodia.
Kun olin saanut ympäristön pyörimään locaalisti Teron ohjeiden mukaan, niin lähdin liikkeelle
ihan vain kokeilemalla eri salasana käyttäjätunnus yhdistelmiä. Tämä ei kuitenkaan tuottanut tulosta.
Kokeilin paljon kaikkea erillaista varmaan noin 5 tuntia, mutta mikään ei toiminut. Kokeilin manipuloida
URL osoitetta, syöttää väärää tietoa input kenttiin, ffuf skannata käyttäen eri sanalistoja, brute
forcettaa, ffuf:aa jopa headereita, muuttamalla itse tehdyn käyttäjän oikeuksia, mutta mikään ei
toiminut. Tässä vaiheessa pisin mihin olin päässyt oli
403 Forbidden
sivu.
Olin todellakin luovuttanut jo, kun olin katsonut kaikki vinkit ja
neuvot mitä olin saanut, mutta mikään ei toiminut. Katsoin kaiken materjaalin mukaanlukien 0x03 Still Fuzzing Faster
(U Fool) - joohoi - HelSec Virtual meetup #1 videon ffuf:in
käytöstä.
Omassa turhautumisessani loin vielä uuden käyttäjän ja kirjauduin sisään. Siinä samalla luin vinkkejä
tarkkaan läpi ja ihan tuurilla vain muutin URL kentän admin-desktop
osoitteen
admin-console
osoitteeseen kun olin sisäänkirjautuneena, minkä olin siis löytäny fuff skannauksen aikana, ja se toimi.
Pääsin siis admin consoleen.
Tiivistelmä
Haavoittuvuus: Eli kyseessä oli väärin määritetyt käyttäjä oikeudet, jotka mahdollistivat
admin-consoleen pääsyn.
Haavoittuvuuden hyödyntäminen: Sinun pitää olla sisäänkirjautuneena millä tahansa käyttäjänä ja
muuttaa URL osoite
admin-desktop
osoitteesta admin-console
osoitteeseen.
Hyvinkin yksinkertainen vertikaalinen liikuminen, joka mahdollistaa admin-consoleen pääsyn.
KÄYTETYT MATERJAALIT:
- Hack'n Fix
- SecLists Wordlists
- 0x03 Still Fuzzing Faster
(U Fool) - joohoi - HelSec Virtual meetup #1
E) Korjaa 020-your-eyes-only haavoittuvuus. Osoita testillä, että ratkaisusi toimii.
Korjaus onneksi olikin hieman helpompi. Eli virhe tapahtui kohdassa /hats/views.py
ja ongelma oli että viimeisessä "test_func"
funktiossa oli unohdettu tarkistaa että
käyttäjä läpäisee tarkistuksen, jotta pääsee admin consoleen. Tämä oli selkesäti vain huomaamattomuus
virhe
sillä tämä tarkistus oli tehty kaikissa muissa funktioissa.
Korjaus oli siis vain lisätä self.request.user.is_staff
tarkistus.
Ja korjaus tosiaan toimi, kun yritin päästä admin consoleen ilman oikeuksia, niin sain vain
403 Forbidden
sivun.
Tiivistelmä
Haavoittuvuuden korjaus: Lisää self.request.user.is_staff
tarkistus
/hats/views.py
tiedostoon kohtaan test_func
and sanan jälkeen.
class AdminShowAllView(UserPasssesTestMixin, TemplateView):
template_name = 'hats/admin_show_all.html'
def test_func(self:)
return self.request.user.is_authenticated and
Tämä haavoittuvuus voisi löytyä miltä tahansa sivulta joka ksäittelee käyttäjä oikeuksia.
Etenkin monimutkaisemmissa sivuissa, joissa on useampia sivuja ja käyttäjiä, tämä voisi olla
hyvinkin helposti tapahtuva haavoittuvuus, koska tämä perustuu ihmis virheeseen.
Tämän voisi välttää esimerkiksi automaattisilla testeillä, jotka testaavat kaikki funktiot.
x) Lue/katso ja tiivistä. (Tässä x-alakohdassa ei tarvitse tehdä testejä tietokoneella, vain lukeminen ja tiivistelmä riittää. Tiivistämiseen riittää muutama ranskalainen viiva.)
- Broken Access Control ja privilage escalation tarkoittaa sitä, että käyttäjä pystyy pääsemään käsiksi
tietoihin tai
toimintoihin joihin hänellä ei pitäisi olla oikeutta.
- ffuf on työkalu, joka mahdollistaa hakemistojen ja tiedostojen etsimisen nettisivuilta sekä paljon
muuta edistynempää kuten headereiden fuff:austa.
- Raportin kirjoittamiseen on tietyt standardit, jotka tulee ottaa huomioon ja asiat mitä ei
varmasti saa tehdä, kuten sepittää tietoja.
- SQL Injection on hyökkäys, jossa hyökkääjä pystyy syöttämään SQL koodia input kenttiin, joka
mahdollistaa tietokannan manipuloinnin.
g) & h) Vapaaehtoinen. Johdantotehtävä, joka auttaa 010-staff-only ratkaisemisessa.
Molemmat tehtävät suoritin jo tunnilla.
Lähteet
1. PortSwigger Ltd. UNION attacks. Luettavissa: https://portswigger.net/web-security/sql-injection/union-attacks. Luettu: 29.10.2024.
2. Tero Karvinen 2023. Find Hidden Web Directories - Fuzz URLs with ffuf. Luettavissa: https://terokarvinen.com/2023/fuzz-urls-find-hidden-directories/. Luettu: 30.10.2024.
3. Tero Karvinen 2024. Hack'n Fix. Luettavissa: https://terokarvinen.com/hack-n-fix/. Luettu: 30.10.2024.
4. 0x03 Still Fuzzing Faster (U Fool) - joohoi - HelSec Virtual meetup #1. Video. Katsottavissa: https://www.youtube.com/watch?v=mbmsT3AhwWU. Katsottu: 30.10.2024.
5. danielmiessler 2024. SecLists. Luettavissa: https://github.com/danielmiessler/SecLists Luettu: 30.10.2024.