command_injection
Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| command_injection [2023/11/13 11:01] – zrinka | command_injection [2025/12/01 11:40] (current) – external edit 127.0.0.1 | ||
|---|---|---|---|
| Line 60: | Line 60: | ||
| Ukratko, command injection napad može se izvesti u naredbama koja nemaju dobro provedenu validaciju korisničkog unosa. Kako bi se izbjegao, aplikacija ne bi trebala ignorirati svaki unos koji djeluje neispravno, već bi trebala pogledati postoji li nešto u toj naredbi što bi moglo potencijalno biti command injection napad. | Ukratko, command injection napad može se izvesti u naredbama koja nemaju dobro provedenu validaciju korisničkog unosa. Kako bi se izbjegao, aplikacija ne bi trebala ignorirati svaki unos koji djeluje neispravno, već bi trebala pogledati postoji li nešto u toj naredbi što bi moglo potencijalno biti command injection napad. | ||
| - | __**PRIMJER**__ **Zadatak | + | __**PRIMJER**__ **Zadatak |
| < | < | ||
| Ivica obožava raditi s Linuxom, i pokušava koristiti Linux naredbe gdje god može. Budući da mu je trebao | Ivica obožava raditi s Linuxom, i pokušava koristiti Linux naredbe gdje god može. Budući da mu je trebao | ||
| ROT13 kalkulator za CTF natjecanje, odlučio je napraviti web stranicu na kojoj se nalazi ROT13 kalkulator | ROT13 kalkulator za CTF natjecanje, odlučio je napraviti web stranicu na kojoj se nalazi ROT13 kalkulator | ||
| - | napravljen pomoću Linux naredbi. | + | napravljen |
| Flag je u formatu CTF2021[brojevi]. | Flag je u formatu CTF2021[brojevi]. | ||
| http:// | http:// | ||
| Line 79: | Line 79: | ||
| Sustav očekuje tekst koji će kodirati Cezarovom šifrom. Budući da smo mi unijeli oznaku kraja naredbe (;), ta je naredba neispravna, ali nije nikako definirano da se nakon toga ne smije definirati neka druga naredba. Mi smo dodali naredbu cat .../flag i, iako je prva naredba možda bacila grešku, druga je izvedena. Navodnici su važni jer imamo razmake između riječi.\\ | Sustav očekuje tekst koji će kodirati Cezarovom šifrom. Budući da smo mi unijeli oznaku kraja naredbe (;), ta je naredba neispravna, ali nije nikako definirano da se nakon toga ne smije definirati neka druga naredba. Mi smo dodali naredbu cat .../flag i, iako je prva naredba možda bacila grešku, druga je izvedena. Navodnici su važni jer imamo razmake između riječi.\\ | ||
| Primijetimo da smo istu stvar mogli postići da smo u URL dodali // | Primijetimo da smo istu stvar mogli postići da smo u URL dodali // | ||
| - | Objasnimo točno zašto ovo funkcionira. Najčešće se korisnički zahtjevi šalju tzv. POST zahtjevom. On se često na neki način kodira i nadodaje na trenutni URL. Nije presudno da korisnik zaista upiše podatak u polje koje je predviđeno za to budući da bi se njegov unos ionako prenio u URL i nakon toga dalje obradio. Tekst "; cat / | + | Objasnimo točno zašto ovo funkcionira. Najčešće se korisnički zahtjevi šalju tzv. POST zahtjevom. On se često na neki način kodira i nadodaje na trenutni URL. U ovom slučaju koristi se ASCII kodiranje, no postoje još neke metode. Nije presudno da korisnik zaista upiše podatak u polje koje je predviđeno za to budući da bi se njegov unos ionako prenio u URL i nakon toga dalje obradio. Tekst "; cat / |
| Oznaka **%3B** označava **;**\\ | Oznaka **%3B** označava **;**\\ | ||
| **+** označava **razmak**.\\ | **+** označava **razmak**.\\ | ||
| **%2F** je oznaka za **/**. \\ | **%2F** je oznaka za **/**. \\ | ||
| - | __**PRIMJER**__ **Zadatak | + | __**PRIMJER**__ **Zadatak |
| < | < | ||
| Kroz učenje razvoja web stranica Ivica sve više uči i o Linuxu. Kako bi uspješno zapamtio sve što je naučio o Linux naredbama te ujedno vježbao izradu web stranica, napravio je interaktivnu web stranicu koja demonstrira što rade različite Linux naredbe. | Kroz učenje razvoja web stranica Ivica sve više uči i o Linuxu. Kako bi uspješno zapamtio sve što je naučio o Linux naredbama te ujedno vježbao izradu web stranica, napravio je interaktivnu web stranicu koja demonstrira što rade različite Linux naredbe. | ||
| Line 92: | Line 92: | ||
| </ | </ | ||
| - | Rješenje je slično prethodnom, samo što nemamo prostor za korisnički unos, već unosimo naredbu u URL. Pri tome moramo paziti na kodiranje znakova. Oznaka %20 označava razmak. Ako želimo izvesti naredbu preko URL-a, moramo zadati naredbu (parametar //cmd//) i argumente (parametar //arg//). Zadat ćemo neku nepostojeću naredbu koja će baciti grešku (npr. neki broj), a cijelu malicioznu naredbu stavit ćemu u argument. Isto kao i prije, krenut ćemo oznakom kraja naredbe (;) i nakon toga upisati cat naredbu datoteke koju želimo pročitati. Budući da stranice predefinirano povlače datoteke s putanje /var/www, pretpostavit ćemo da postoji datoteka " | + | Rješenje je slično prethodnom, samo što nemamo prostor za korisnički unos, već unosimo naredbu u URL. Pri tome moramo paziti na kodiranje znakova. U ovom se slučaju koristi klasično URL kodiranje. Oznaka %20 označava razmak. Ako želimo izvesti naredbu preko URL-a, moramo zadati naredbu (parametar //cmd//) i argumente (parametar //arg//). Zadat ćemo neku nepostojeću naredbu koja će baciti grešku (npr. neki broj), a cijelu malicioznu naredbu stavit ćemo argument. Isto kao i prije, krenut ćemo oznakom kraja naredbe (;) i nakon toga upisati cat naredbu datoteke koju želimo pročitati. Budući da stranice predefinirano povlače datoteke s putanje /var/www, pretpostavit ćemo da postoji datoteka " |
| < | < | ||
| To je ujedno i naše rješenje. | To je ujedno i naše rješenje. | ||
| Line 100: | Line 100: | ||
| [2]https:// | [2]https:// | ||
| [3]https:// | [3]https:// | ||
| + | [4]https:// | ||
command_injection.1699873262.txt.gz · Last modified: 2025/12/01 11:40 (external edit)