Robin Niinemets

Cybersecurity Student

Helsinki, Finland

×

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ä) screenshot of change to type='' attribute 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. Screenshot of the page where the SQL injection is fixed
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.

ffuf scan screenshot 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.

Screenshot of ffuf scan Screenshot of the admin console

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.