multistage
Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| multistage [2025/02/10 15:39] – kresimir | multistage [2025/12/01 11:40] (current) – external edit 127.0.0.1 | ||
|---|---|---|---|
| Line 8: | Line 8: | ||
| Napomena 1: administrator na remote instanci ima jako dugu, nasumično generiranu lozinku | Napomena 1: administrator na remote instanci ima jako dugu, nasumično generiranu lozinku | ||
| Napomena 2: lozinka administratora za lokalno testiranje je password123 | Napomena 2: lozinka administratora za lokalno testiranje je password123 | ||
| - | Napomena 3: funkcionalnost registracije i password reseta je disableana | + | Napomena 3: funkcionalnost registracije i password reseta je onemogućena (disabled) |
| Napomena: Zadatak se periodički resetira (svaka 4 sata). Ako je zadatak nedostupan pričekajte 1-2 minute. | Napomena: Zadatak se periodički resetira (svaka 4 sata). Ako je zadatak nedostupan pričekajte 1-2 minute. | ||
| Hint: Krivotvorite remember me cookie | Hint: Krivotvorite remember me cookie | ||
| Line 18: | Line 18: | ||
| Pristupom na web stranicu, može se vidjeti forma za upload slike prikazana na slici 1. | Pristupom na web stranicu, može se vidjeti forma za upload slike prikazana na slici 1. | ||
| - | {{multistage: | + | {{ multistage: |
| - | Ostali resursi stranice su nedostupni, jer je potrebno ulogirati | + | Ostali resursi stranice su nedostupni, jer se prvo treba prijaviti (login) |
| U dostupnom izvornom kodu, pod resources/ | U dostupnom izvornom kodu, pod resources/ | ||
| - | {{multistage: | + | {{ multistage: |
| - | Ovdje se vidi da se koristi funkcionalnost resize. Kako bi se pronašla implementacija ove funkcionalnosti, | + | Ovdje se vidi da se koristi funkcionalnost |
| - | {{multistage: | + | {{ multistage: |
| - | Ovdje se može uočiti da se koristi alat imagemagick u PHP metodi process, koja pokreće i izvršava naredbe u novoj ljusci. Ovo izgleda kao komad koda koji bi potencijalno mogao biti ranjiv. | + | Ovdje se može uočiti da se koristi alat "imagemagick" |
| - | Kako bi se sakupilo više informacija o imagemagick | + | Kako bi se sakupilo više informacija o alatu imagemagick, može se pogledati Dockerfile prikazan na slici 4. |
| - | {{multistage: | + | {{ multistage: |
| - | Ovdje je važno uočiti 6. liniju | + | Ovdje je važno uočiti 6. liniju: |
| < | < | ||
| ENV IMAGEMAGICK_VERSION=7.1.0-49 | ENV IMAGEMAGICK_VERSION=7.1.0-49 | ||
| Line 43: | Line 43: | ||
| Koja označava da je verzija alata 7.1.0-49. | Koja označava da je verzija alata 7.1.0-49. | ||
| - | Pretraživanjem upita „ImageMagick 7.1 0 49 exploit“ putem interneta, može se pronaći da postoji CVE-2022-44268 | + | Pretraživanjem upita „ImageMagick 7.1 0 49 exploit“ putem Interneta, može se pronaći da postoji |
| < | < | ||
| https:// | https:// | ||
| </ | </ | ||
| - | Na stranici su dostupna uputstva za korištenje. Nakon preuzimanja projekta i instalacije svih potrebnih paketa, generiranje payload | + | Na stranici su dostupna uputstva za korištenje. Nakon preuzimanja projekta i instalacije svih potrebnih paketa, generiranje payload |
| < | < | ||
| python3 generate.py -f "/ | python3 generate.py -f "/ | ||
| Line 54: | Line 54: | ||
| Nakon uploada slike exploit.png, | Nakon uploada slike exploit.png, | ||
| - | {{multistage: | + | {{ multistage: |
| Pristupom putanji za sliku nad kojom se izvršila naredba resize alatom imagemagick, | Pristupom putanji za sliku nad kojom se izvršila naredba resize alatom imagemagick, | ||
| - | Nad preuzetom slikom se pokreće (Linux) naredba | + | Nad preuzetom slikom se pokreće (Linux) naredba: |
| < | < | ||
| identify -verbose preuzetaSlika.png | identify -verbose preuzetaSlika.png | ||
| Line 63: | Line 63: | ||
| Pokretanjem ove naredbe, u polju „Raw profile type“ bi se trebao nalaziti sadržaj ciljane datoteke payloada - /etc/passwd u heksadecimalnom zapisu. Ovo je prikazano na slici 6. | Pokretanjem ove naredbe, u polju „Raw profile type“ bi se trebao nalaziti sadržaj ciljane datoteke payloada - /etc/passwd u heksadecimalnom zapisu. Ovo je prikazano na slici 6. | ||
| - | {{multistage: | + | {{ multistage: |
| - | Kako bi dobili sadržaj datoteke u čitljivom obliku iz heksadecimalnog zapisa u polju, sadržaj se jednostavno može kopirati (počevši od 726f6… ) u CyberChef i dekodirati | + | Kako bi dobili sadržaj datoteke u čitljivom obliku iz heksadecimalnog zapisa u polju, sadržaj se jednostavno može kopirati (počevši od 726f6… ) u CyberChef i dekodirati opcijom „From Hex“ ili se sadržaj može dekodirati u Pythonu korištenjem naredbe: |
| < | < | ||
| print(bytes.fromhex("< | print(bytes.fromhex("< | ||
| Line 72: | Line 72: | ||
| Nakon dekodiranja, | Nakon dekodiranja, | ||
| - | {{multistage: | + | {{ multistage: |
| Ovime je dokazano da ovaj napad radi i da se može uspješno iskoristiti za čitanje sadržaja različitih datoteka sa servera. | Ovime je dokazano da ovaj napad radi i da se može uspješno iskoristiti za čitanje sadržaja različitih datoteka sa servera. | ||
| Line 78: | Line 78: | ||
| Pokušaj čitanja datoteke /flag.txt neće biti moguć – pojavit će se server error, jer u Dockerfileu flag.txt ima postavljene dozvole na read only samo za vlasnika datoteke, koji je „www-data“, | Pokušaj čitanja datoteke /flag.txt neće biti moguć – pojavit će se server error, jer u Dockerfileu flag.txt ima postavljene dozvole na read only samo za vlasnika datoteke, koji je „www-data“, | ||
| + | {{ multistage: | ||
| + | Može se zaključiti da je potrebno pročitati neku drugu datoteku koja će sadržavati podatke koji će omogućiti pristup stranici. Pregledom daljnjih naredbi prikazanih na slici 9. može se vidjeti da se koristi datoteka " | ||
| - | {{multistage: | + | {{ multistage:slika9.png }} |
| - | Može se zaključiti da je potrebno pročitati neki drugi file koji će sadržavati podatke koji će omogućiti pristup stranici. Pregledom daljnjih naredbi prikazanih na slici 9. može se vidjeti da se koristi datoteka database.sql za stvaranje druge datoteke database.sqlite u kojoj su vjerojatno definirani inicijalni korisnici sustava, kao admin. | + | |
| + | Provjerom sadržaja datoteke " | ||
| - | {{multistage: | + | {{ multistage:slika10.png }} |
| - | Provjerom sadržaja datoteke database.sql, | + | Kako bi se pročitao remember_token, |
| - | + | ||
| - | + | ||
| - | {{multistage: | + | |
| - | + | ||
| - | Kako bi se pročitao remember_token, | + | |
| < | < | ||
| python3 generate.py -f "/ | python3 generate.py -f "/ | ||
| </ | </ | ||
| - | Postupak se ponavlja kao pri dohvatu datoteke / | + | Postupak se ponavlja kao pri dohvatu datoteke / |
| < | < | ||
| Line 104: | Line 100: | ||
| </ | </ | ||
| - | Nego je potrebno | + | Nego je potrebno |
| < | < | ||
| exiftool -b -RawProfileTypeSqlite preuzetaSlika.png > extracted_profile.bin | exiftool -b -RawProfileTypeSqlite preuzetaSlika.png > extracted_profile.bin | ||
| </ | </ | ||
| - | Kako bi se extractani | + | Kako bi se izlučeni |
| - | {{multistage: | + | {{ multistage: |
| - | Sad se ovaj uređeni file može uploadati na CyberChef, dekodirati opcijom „From Hex“ i onda se dekodirani ispis može preuzeti kao novi file koji se može pohraniti s nastavkom .sqlite. | + | Sad se ova uređena datoteka |
| - | Ovaj dekodirani file se onda može ili lokalno analizirati nekim SQLite browserom / viewerom ili se može koristiti neka online verzija. Pri analizi | + | Ova dekodirana datoteka |
| - | {{multistage: | + | {{ multistage: |
| U Dockerfileu se nalazi još jedna važna naredba prikazana na slici 13. | U Dockerfileu se nalazi još jedna važna naredba prikazana na slici 13. | ||
| - | {{multistage: | + | {{ multistage: |
| Naredba | Naredba | ||
| < | < | ||
| Line 127: | Line 123: | ||
| </ | </ | ||
| - | Je naredba Laravela za generiranje nasumičnog ključa aplikacije - APP_KEY. Taj ključ se koristi za korisničke sesije i pojedine enkripcije, čime bi mogao biti koristan za pristup sustavu. Nakon što je ključ nasumično generiran prethodno spomenutom naredbom, on se pohranjuje u .env datoteku u kojoj su pohranjene pojedine informacije, | + | je naredba Laravela za generiranje nasumičnog ključa aplikacije - APP_KEY. Taj ključ se koristi za korisničke sesije i pojedine enkripcije, čime bi mogao biti koristan za pristup sustavu. Nakon što je ključ nasumično generiran prethodno spomenutom naredbom, on se pohranjuje u ".env" |
| < | < | ||
| / | / | ||
| </ | </ | ||
| - | Još jednom se ponavlja postupak za čitanje ove datoteke, prvo generacijom payloada naredbom | + | Još jednom se ponavlja postupak za čitanje ove datoteke, prvo generacijom payloada naredbom: |
| < | < | ||
| python3 generate.py -f "/ | python3 generate.py -f "/ | ||
| </ | </ | ||
| - | Nakon čega je dovoljno slijediti isti postupak koji se koristio i pri dohvatu datoteke / | + | Nakon čega je dovoljno slijediti isti postupak koji se koristio i pri dohvatu datoteke / |
| < | < | ||
| Line 144: | Line 140: | ||
| - | {{multistage: | + | {{ multistage: |
| Vidi se da je APP_KEY u base64 zapisu, što se može jednostavno dešifrirati. | Vidi se da je APP_KEY u base64 zapisu, što se može jednostavno dešifrirati. | ||
| Line 152: | Line 148: | ||
| </ | </ | ||
| - | Generiranje kolačića admina | + | ===Generiranje kolačića admina=== |
| Za generiranje remember me kolačića admin korisnika, potrebni su APP_KEY aplikacije, radi enkripcije i remember_token korisnika admin. Obje vrijednosti su poznate iz preuzetih datoteka .env i database.sqlite. Sljedeći korak je samo generirati | Za generiranje remember me kolačića admin korisnika, potrebni su APP_KEY aplikacije, radi enkripcije i remember_token korisnika admin. Obje vrijednosti su poznate iz preuzetih datoteka .env i database.sqlite. Sljedeći korak je samo generirati | ||
| Line 158: | Line 154: | ||
| Jedan jednostavan postupak kako generirati isti remember me kolačić, kao što je na instanci zadatka koja je na platformi, je da se lokalno pokrene cijeli sustav čiji source kod je dostupan, ali s istim vrijednostima APP_KEY I remember_token korisnika admin. Također može se i promijeniti lozinka korisnika admin, kako bi se moglo ulogirati u lokalnu instancu s tim korisnikom i dobiti kolačić. Sustav je najjednostavnije pokrenuti kao docker kontejner, korištenjem već dostupnog Dockerfilea. | Jedan jednostavan postupak kako generirati isti remember me kolačić, kao što je na instanci zadatka koja je na platformi, je da se lokalno pokrene cijeli sustav čiji source kod je dostupan, ali s istim vrijednostima APP_KEY I remember_token korisnika admin. Također može se i promijeniti lozinka korisnika admin, kako bi se moglo ulogirati u lokalnu instancu s tim korisnikom i dobiti kolačić. Sustav je najjednostavnije pokrenuti kao docker kontejner, korištenjem već dostupnog Dockerfilea. | ||
| - | Kako bi se namjestio APP_KEY na lokalnoj instanci da odgovara pročitanom APP_KEY-u s platforme, prvo se treba u Dockerfileu maknuti | + | Kako bi se namjestio APP_KEY na lokalnoj instanci da odgovara pročitanom APP_KEY-u s platforme, prvo treba u Dockerfileu maknuti |
| < | < | ||
| Line 167: | Line 163: | ||
| - | {{multistage: | + | {{ multistage: |
| Nakon što su Dockerfile i .env file namješteni, | Nakon što su Dockerfile i .env file namješteni, | ||
| - | Trenutačno je vrijednost password neki bcrypt hash nepoznate vrijednosti, | + | Trenutačno je vrijednost password neki bcrypt hash nepoznate vrijednosti, |
| < | < | ||
| <?php | <?php | ||
| Line 178: | Line 174: | ||
| </ | </ | ||
| - | Pokretanjem ove skripte naredbom | + | Pokretanjem ove skripte naredbom: |
| < | < | ||
| php skripta.php | php skripta.php | ||
| </ | </ | ||
| - | Bit će ispisan bcrypt hash, koji se onda zajedno s pročitanom remember_token vrijednošću može upisati u database.sq, | + | bit će ispisan bcrypt hash, koji se onda zajedno s pročitanom remember_token vrijednošću može upisati u database.sq, |
| - | {{multistage: | + | {{ multistage: |
| - | Sada je je potrebno sagraditi docker kontejner s promijenjenim izvornim kodom naredbom | + | Sada je je potrebno sagraditi docker kontejner s promijenjenim izvornim kodom naredbom: |
| (ovo može potrajati duže) | (ovo može potrajati duže) | ||
| < | < | ||
| Line 199: | Line 195: | ||
| Sada bi na putanji localhost: | Sada bi na putanji localhost: | ||
| - | Odlaskom na | + | Odlaskom na: |
| < | < | ||
| Localhost: | Localhost: | ||
| Line 205: | Line 201: | ||
| Može se ulogirati s e-mailom iz baze i postavljenom lozinkom. Potrebno je odabrati opciju „Remember me“ (slika 17). | Može se ulogirati s e-mailom iz baze i postavljenom lozinkom. Potrebno je odabrati opciju „Remember me“ (slika 17). | ||
| - | {{multistage: | + | {{ multistage: |
| - | Nakon uspješne prijave, bit će generiran remember me kolačić, kojemu se jednostavno može pristupiti koristeći | + | Nakon uspješne prijave, bit će generiran remember me kolačić, kojemu se jednostavno može pristupiti koristeći |
| - | Otvaranjem razvojnih alata internet | + | Otvaranjem razvojnih alata internetskog |
| - | {{multistage: | + | {{ multistage: |
| Potrebno je samo prekopirati ime i vrijednost remember me kolačića (remember_web_59ba… označen plavom bojom na slici 18.) s lokalne instance na instancu zadatka na platformi. U implementaciji zadatka remember me kolačić ne sadržava hash lozinke, što se nekada zna koristiti, pa je zato ovaj pristup moguć, inače bi bilo potrebno još naknadno mijenjati kolačić. | Potrebno je samo prekopirati ime i vrijednost remember me kolačića (remember_web_59ba… označen plavom bojom na slici 18.) s lokalne instance na instancu zadatka na platformi. U implementaciji zadatka remember me kolačić ne sadržava hash lozinke, što se nekada zna koristiti, pa je zato ovaj pristup moguć, inače bi bilo potrebno još naknadno mijenjati kolačić. | ||
| - | Nakon što je kolačić dodan na instancu zadatka na platformi, odlaskom na putanju | + | Nakon što je kolačić dodan na instancu zadatka na platformi, odlaskom na putanju: |
| < | < | ||
| http:// | http:// | ||
| Line 222: | Line 218: | ||
| Bit će ispisano da je prijava uspješna kao korisnik admin. Prikazano na slici 19. | Bit će ispisano da je prijava uspješna kao korisnik admin. Prikazano na slici 19. | ||
| - | {{multistage: | + | {{ multistage: |
| Sada se flag može dohvatiti pristupom putanji | Sada se flag može dohvatiti pristupom putanji | ||
| Line 231: | Line 227: | ||
| - | {{multistage: | + | {{ multistage: |
multistage.1739201948.txt.gz · Last modified: 2025/12/01 11:40 (external edit)