command_injection
Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| command_injection [2026/06/12 13:56] – Značajne ispravke... mbunic | command_injection [2026/06/12 18:21] (current) – //host// višak mbunic | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| ====Command injection==== | ====Command injection==== | ||
| - | **Command injection** je tip napada u kojem napadač izvršava | + | **Command injection** je tip napada u kojem napadač izvršava naredbe na operacijskom sustavu |
| - | Uzmimo za primjer naredbu cat (concatenate) u Linuxu koja služi kako bi korisnik mogao vidjeti | + | Ovaj napad omogućuje napadaču izvršavanje naredbi s privilegijama korisnika pod kojim se izvršava web-aplikacija, |
| + | |||
| + | Uzmimo za primjer naredbu | ||
| < | < | ||
| - | int main(char* argc, char** argv) { | + | int main(int argc, char** argv) { |
| char cmd[CMD_MAX] = "/ | char cmd[CMD_MAX] = "/ | ||
| strcat(cmd, argv[1]); | strcat(cmd, argv[1]); | ||
| Line 13: | Line 15: | ||
| </ | </ | ||
| - | Ovaj kod bi trebao korisniku omogućit isključivo čitanje drugih datoteka Linux naredbom **cat**, | + | Funkcija **system()** predaje sastavljeni niz znakova ljusci operacijskog sustava na izvršavanje. |
| + | |||
| + | Ovaj kod bi trebao korisniku omogućiti isključivo čitanje drugih datoteka Linux naredbom **cat**, | ||
| < | < | ||
| Line 19: | Line 23: | ||
| </ | </ | ||
| - | Nakon ovog unosa potpuna | + | Nakon ovog unosa konačna |
| Line 26: | Line 30: | ||
| </ | </ | ||
| - | Točka zarez (;) je znak koji odjeljuje naredbe (u Unix sustavima), tako da ovaj unos odgovara pokretanju dviju naredbi. | + | Točka-zarez (;) je znak koji odjeljuje naredbe (u Linux i Unix sustavima), tako da ovaj unos odgovara pokretanju dviju naredbi. |
| < | < | ||
| Line 34: | Line 38: | ||
| - | Rm je funkcija | + | **rm** |
| - | Ovo je primjer command | + | Ovo je primjer |
| + | Nakon izvođenja naredbe čitanja datoteke " | ||
| + | |||
| + | |||
| + | Drugi je primjer internetska trgovina koja nudi tražilicu proizvoda za koju prima parametre putem URL-a. Primjerice, upit | ||
| - | Drugi je primjer internetska trgovina koja ima tražilicu proizvoda i prima parametre preko URL-a. Primjerice, upit | ||
| < | < | ||
| https:// | https:// | ||
| </ | </ | ||
| - | pretražuje postoji li proizvod s id-jem 381 u trgovini s id-jem 29. Sustav zatim parsira upit tako što izvuče productID i storeID te izvede | + | |
| + | pretražuje postoji li proizvod s ID-om 381 u trgovini s ID-om 29. Sustav zatim parsira upit tako što izvlači vrijednosti | ||
| < | < | ||
| stockreport.pl 381 29 | stockreport.pl 381 29 | ||
| </ | </ | ||
| + | |||
| Međutim, napadač bi mogao unijeti sljedeće: | Međutim, napadač bi mogao unijeti sljedeće: | ||
| + | |||
| < | < | ||
| - | https:// | + | https:// |
| </ | </ | ||
| - | Dakle, umjesto productID parametra unio je **& echo aiwefwlguh**.Nakon parsiranja izvršava se : | ||
| - | < | ||
| - | stockreport.pl & echo aiwefwlguh & 29 | ||
| - | </ | ||
| - | Prvi se izvodi stockreport.pl koji nema argumente, dakle unos je neispravan. Nakon njega postoji još jedna naredba (echo aiwefwlguh) koja se nesmetano izvede, iako u sustavu nije predviđena. U ovome slučaju nije bila maliciozna naredba, ali služi za demonstraciju mogućnosti ubacivanja naredbe koja bi mogla napraviti štetu na sustavu. Zatim ide znak & koji služi za razvdajanje parametara u URL-u te ostaje " | ||
| - | Command injection moguć je i u naredbama koje ne zahtjevaju unos korisnika ako napadač manipulira varijablama okruženja. Primjerice, napadač može promijeniti varijablu APPHOME koja u ovome primjeru određuje lokaciju gdje će se aplikacija instalirati: | ||
| - | < | ||
| - | char* home=getenv(" | ||
| - | char* cmd=(char*)malloc(strlen(home)+strlen(INITCMD)); | ||
| - | if (cmd) { | ||
| - | strcpy(cmd, | ||
| - | strcat(cmd, | ||
| - | execl(cmd, NULL); | ||
| - | } | ||
| - | </ | ||
| - | Skripta dohvaća varijablu okruženja APPHOME (varijabla home) i lokaciju radni direktorij (varijabla cmd). Ako naredba postoji, varijabla okruženja se kopira na to mjesto. Ranjivost se krije u tome što nema nikakve provjere APPHOME varijable. To znači da, ako napadač promijeni varijablu APPHOME na neku putanju koja sadrži malicioznu verziju inicijalizacijske skripte (INITCMD), ona će se izvršiti zajedno s kodom koji bi inače trebao. | + | Kao vrijednost parametra productID, umjesto broja, uneseno je **;cat**, dok je kao vrijednost parametra storeID uneseno **/ |
| - | |||
| - | Također, napadač bi mogao izvesti ovu naredbu za promjenu lozinke: | ||
| < | < | ||
| - | system(" | + | stockreport.pl; |
| </ | </ | ||
| - | Naredba mijenja radni direktorij u /var/yp i tamo poziva make. Ona je sama po sebi sigurna jer nema korisničkog unosa, što znači da ju ni napadač | + | Prvo se pokušava izvesti stockreport.pl, ali bez postavljenih argumenata, što je neispravan unos te se izvršavanje ove naredbe završava greškom. Ova greška |
| + | |||
| + | Nakon toga se pokreće sljedeća naredba **cat / | ||
| - | Ukratko, command injection napad može se izvesti u naredbama koja nemaju dobro provedenu validaciju | + | U oba opisana primjera, kada bi validacija |
| __**PRIMJER**__ **Zadatak s Hacknite platforme - Linux ROT13** | __**PRIMJER**__ **Zadatak s Hacknite platforme - Linux ROT13** | ||
command_injection.1781272578.txt.gz · Last modified: 2026/06/12 13:56 by mbunic