file_upload
Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| file_upload [2023/12/01 16:19] – zrinka | file_upload [2026/06/17 17:06] (current) – mbunic | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| ==== File upload ==== | ==== File upload ==== | ||
| - | **File upload ranjivosti** odnose se na napade koji se izvršavaju postavljanjem (// | + | **File upload ranjivosti** odnose se na napade koji se izvršavaju postavljanjem (// |
| + | |||
| + | Jednostavan primjer je slučaj u aplikacijama koje nemaju popis dozvoljenih ekstenzija | ||
| + | |||
| + | Složeniji primjeri su slučajevi gdje se stvarno vrši validacija sadržaja datoteke, npr. datoteka mora biti validna slika, a sustav je konfiguriran tako da izvršava kôd samo ako se datoteke nalaze u određenim direktorijima. U takvim slučajevima mogući su napadi korištenjem **polyglot** datoteka, koje mogu istovremeno biti i validna slika i validan programski kôd. Ako je u sustavu također prisutna i **path traversal** ranjivost pri pohrani učitane datoteke, koja omogućuje arbitraran odabir direktorija u koji će se datoteka pohraniti manipulirajući imenom datoteke (npr. " | ||
| - | Kod web aplikacije koje dozvoljavaju prijenos datoteka na poslužitelj (fotografija, | ||
| - | \\ | ||
| \\ | \\ | ||
| \\ | \\ | ||
| Line 25: | Line 27: | ||
| Budući da u zadatku nije navedeno, aplikacija vjerojatno ne provjerava ekstenzije datoteka koje se objavljuju. Pokušajmo za početak objaviti .php datoteku. Napravimo datoteku test.php datoteku s ovim sadržajem: | Budući da u zadatku nije navedeno, aplikacija vjerojatno ne provjerava ekstenzije datoteka koje se objavljuju. Pokušajmo za početak objaviti .php datoteku. Napravimo datoteku test.php datoteku s ovim sadržajem: | ||
| < | < | ||
| - | Zatim odaberimo u navigaciji " | + | Zatim odaberimo u navigaciji " |
| {{ : | {{ : | ||
| Line 46: | Line 48: | ||
| \\ | \\ | ||
| \\ | \\ | ||
| - | Također, ako aplikacija nema provjeru naziva datoteke koja se postavlja, napadač može objaviti datoteku istog naziva kao neka datoteka kritična za rad sustava i na taj način ju prebrisati. U još ekstremnijem slučaju napadač može u naziv datoteke ubaciti sekvencu za pomicanje po direktorijima (..) i objaviti datoteke na lokacije kojima ne bi smio imati pristup. Zato je dobra praksa da sustav sâm dodijeli ime datoteci koja se postavlja. Vrlo je važno imati i provjeru veličine datoteke. Prevelika datoteka može izazvati tzv. // | + | Također, ako aplikacija nema provjeru naziva datoteke koja se postavlja, napadač može objaviti datoteku istog naziva kao neka datoteka kritična za rad sustava i na taj način ju prebrisati. U još ekstremnijem slučaju napadač može u naziv datoteke ubaciti sekvencu za pomicanje po direktorijima ("..") i objaviti datoteke na lokacije kojima ne bi smio imati pristup. Zato je dobra praksa da sustav sâm dodijeli ime datoteci koja se postavlja. Vrlo je važno imati i provjeru veličine datoteke. Prevelika datoteka može izazvati tzv. // |
| - | Ponekad aplikacije imaju validaciju datoteka, ali ona ne bude dobro provedena. Ako sustav ima listu ekstenzija koje smatra opasnima, to nije uvijek dovoljna zaštita jer je uvijek | + | Ponekad aplikacije imaju validaciju datoteka, ali ona ne bude dobro provedena. Ako sustav ima listu ekstenzija koje smatra opasnima, to nije uvijek dovoljna zaštita jer je moguće da se neki opasan format zaboravi dodati na listu. Isto tako, moguće je da se ekstenzija modificira tako da ju sustav ne prepozna kao jednu od zabranjenih. |
| \\ | \\ | ||
| \\ | \\ | ||
| Line 69: | Line 71: | ||
| {{ : | {{ : | ||
| - | Vidimo da nam to ne uspijeva jer dobivamo obavijest da datoteka nije slika. Dakle, sigurni smo da se radi provjera ekstenzije s klijentske (// | + | Vidimo da nam to ne uspijeva jer dobivamo obavijest da datoteka nije slika. Dakle, sigurni smo da se radi provjera ekstenzije s klijentske (// |
| {{ : | {{ : | ||
| Line 83: | Line 85: | ||
| < | < | ||
| Bolja je opcija napisati " | Bolja je opcija napisati " | ||
| - | Dobili smo \\ | + | Dobili smo ispis:\\ |
| **backups cache important-do-not-touch lib local lock log mail opt run spool tmp www** | **backups cache important-do-not-touch lib local lock log mail opt run spool tmp www** | ||
| Najzanimljivije nam djeluje **important-do-not-touch** pa ćemo izlistati njegov sadržaj. Napišimo u //cmd// parametar: | Najzanimljivije nam djeluje **important-do-not-touch** pa ćemo izlistati njegov sadržaj. Napišimo u //cmd// parametar: | ||
| < | < | ||
| - | Dobili smo **admin-forbidden local**. | + | rezultira s: |
| **admin-forbidden** djeluje kao da bi mogao imati nešto zanimljivo u sebi. Izlistajmo i njegov sadržaj: | **admin-forbidden** djeluje kao da bi mogao imati nešto zanimljivo u sebi. Izlistajmo i njegov sadržaj: | ||
| Line 121: | Line 123: | ||
| Pokušajmo na isti način postaviti datoteku. Napravimo php shell kao i prije: | Pokušajmo na isti način postaviti datoteku. Napravimo php shell kao i prije: | ||
| < | < | ||
| - | te ga preimenujmo tako da ima ekstenziju .jpg na kraju. Uključimo // | + | te ga preimenujmo tako da ima ekstenziju .jpg na kraju. Uključimo // |
| {{ : | {{ : | ||
| - | Vidimo drugačije upozorenje. To je zato što, za razliku od prethodnih slučajeva, sustav radi još jednu provjeru na poslužiteljskoj (// | + | Vidimo drugačije upozorenje. To je zato što, za razliku od prethodnih slučajeva, sustav radi još jednu provjeru na poslužiteljskoj (// |
| < | < | ||
| GIF89a; | GIF89a; | ||
| Line 135: | Line 137: | ||
| Datoteka je uspješno postavljena jer zadovoljava klijentsku provjeru, no ne možemo slati nikakve naredbe jer ju sustav interpretira kao fotografiju. Pošaljimo ponovno zahtjev, ali ga presretnimo i promijenimo ekstenziju u .php. Dobivamo identično upozorenje jer sustav prepoznaje neslaganje s formatom datoteke koji se odredi prema početku (GIF89a;), ekstenzijom i zadanim tipom datoteke u // | Datoteka je uspješno postavljena jer zadovoljava klijentsku provjeru, no ne možemo slati nikakve naredbe jer ju sustav interpretira kao fotografiju. Pošaljimo ponovno zahtjev, ali ga presretnimo i promijenimo ekstenziju u .php. Dobivamo identično upozorenje jer sustav prepoznaje neslaganje s formatom datoteke koji se odredi prema početku (GIF89a;), ekstenzijom i zadanim tipom datoteke u // | ||
| - | Naime, za svaki poslužitelj treba konfigurirati točno koje će ekstenzije kad ih se posjeti izvršiti neki programski kôd, a koje ne. Zato se naša .jpg datoteka neće izvršiti (iako su istog sadržaja kao i kad joj promijenimo ekstenziju u .php ). No, mnogi su poslužitelji konfigurirani tako da .phtml datoteke tretiraju kao .php, no vidjeli | + | Naime, za svaki poslužitelj treba konfigurirati točno koje će ekstenzije kad ih se posjeti izvršiti neki programski kôd, a koje ne. Zato se naša .jpg datoteka neće izvršiti (iako su istog sadržaja kao i kad joj promijenimo ekstenziju u .php ). No, mnogi su poslužitelji konfigurirani tako da .phtml datoteke tretiraju kao .php. Vidjeli |
| {{ : | {{ : | ||
| Line 143: | Line 145: | ||
| \\ | \\ | ||
| \\ | \\ | ||
| - | Budući da je gotovo nemoguće pokriti sve načine na koje se može zaobići validacija datoteke, potrebno je konfigurirati poslužitelj tako da se, ako do njega slučajno dođe izvršivi programski kôd, spriječi njegovo izvršavanje. Dodatna mjera zaštite je onemogućiti postavljanje datoteke prije nego što prođe sve provjere. Neki sustavi koriste odvojeno privremeno spremište (tzv. // | ||
| - | |||
| - | |||
| - | |||
| - | |||
| ===Izvori=== | ===Izvori=== | ||
| [1] https:// | [1] https:// | ||
| [2] https:// | [2] https:// | ||
| [3] https:// | [3] https:// | ||
file_upload.1701447585.txt.gz · Last modified: 2025/12/01 11:40 (external edit)