User Tools

Site Tools


command_injection

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
command_injection [2026/06/12 13:56] – Značajne ispravke... mbuniccommand_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 proizvoljne naredbe na //host// operacijskom sustavu kroz neku ranjivu aplikaciju. Ranjivost se obično očituje nedostatku validacije korisničkog unosa. Nesigurni se podatci najčešće prenose putem formi kolačića. Ovo je jedan od opasnijih napada jer napadaču omogućuje eskalaciju ovlasti čak do te mjere da može brisati datoteke na računalu za koje ne bi trebao bi znati da postoje. Uz to, naredba se može izvesti na sistemskoj ljusci, što značda napadač ima mogućnost utjecati na cijeli operacijski sustav.+**Command injection** je tip napada u kojem napadač izvršava naredbe na operacijskom sustavu poslužitelja kroz neku ranjivu aplikaciju. Ranjivost nastaje kada se korisnički unos, bez odgovarajuće validacije, izravno ili neizravno koristi za sastavljanje naredbe koja se izvršava ljusci operacijskog sustava (engl. //shell//, npr. Bash na Linuxu ili PowerShell na Windowsima). Primjeri korisničkih unosa u web-aplikaciji koji se mogu naknadno koristiti za sastavljanje naredbi za izvršavanje u ljusci operacijskog sustava mogu biti podaci iz obrazaca (formi), kolačića, URL parametara te ponekad čak i korisnička imena ili lozinke.
  
-Uzmimo za primjer naredbu cat (concatenate) u Linuxu koja služi kako bi korisnik mogao vidjeti sadržaj neke datoteke u čitljivom formatu+Ovaj napad omogućuje napadaču izvršavanje naredbi s privilegijama korisnika pod kojim se izvršava web-aplikacija, no ako sustav nije ispravno konfiguriran, može doći do podizanja razine privilegija (engl. //privilege escalation//) do administratorskog korisnika, što napadaču daje potpunu kontrolu sustava. 
 + 
 +Uzmimo za primjer naredbu **cat** (od engl. //concatenate//) u Linuxu koja se koristi za prikaz sadržaja datoteka
 <file> <file>
  
-int main(char* argc, char** argv) {+int main(int argc, char** argv) {
     char cmd[CMD_MAX] = "/usr/bin/cat ";     char cmd[CMD_MAX] = "/usr/bin/cat ";
     strcat(cmd, argv[1]);     strcat(cmd, argv[1]);
Line 13: Line 15:
 </file> </file>
  
-Ovaj kod bi trebao korisniku omogućit isključivo čitanje drugih datoteka Linux naredbom **cat**, definirajući apsolutnu putanju do izvršne datoteke cat (ekvivalentno kao samo pozivanje naredbe cat, koristi se ista izvršna datoteka). Kao argument se prima naziv datoteke, primjerice: "filename.txt", nakon čega bi konstruirana naredba bila "cat filename.txt". Međutim, korisnik bi mogao unijeti maliciozan unos, primjerice: +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**, pri tome je korištena apsolutna putanja do izvršne datoteke "/usr/bin/cat(ekvivalentno kao samo pozivanje naredbe cat, koristi se ista izvršna datoteka). Program kao argument prima naziv datoteke, primjerice: "filename.txt", nakon čega bi konstruirana naredba bila "cat filename.txt". Međutim, korisnik bi mogao unijeti zlonamjeran unos, primjerice: 
  
 <code> <code>
Line 19: Line 23:
 </code> </code>
  
-Nakon ovog unosa potpuna sastavljena naredba bi bila:+Nakon ovog unosa konačna sastavljena naredba bi bila:
  
  
Line 26: Line 30:
 </code> </code>
  
-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.
  
 <code> <code>
Line 34: Line 38:
  
  
-Rm je funkcija za brisanje (remove),  -r je opcija koja označava rekurzivno brisanje, odnosno brisanje svih poddirektorija,znači force, odnosno bez traženja dodatnih potvrda od korisnika za brisanje. Kosa crta (/) je oznaka za root direktorij u Linux sustavima.+**rm** je naredba za brisanje (od engl. //remove//),  -r je opcija koja označava rekurzivno brisanje, odnosno brisanje svih poddirektorija,-označava prisilno izvršavanje bez traženja dodatne potvrde korisnika. Kosa crta (/) označava korijenski (engl. rootdirektorij datotečnog sustava Linuxu.
  
  
-Ovo je primjer command injectiona jer je u naredbu za čitanje datoteke ubačena naredba rm -rf. Nakon izvođenja naredbe čitanja datoteke "filename.txt, pokreće se naredba “rm -rf /” kooja briše sve datoteke i direktorije iz root direktorija, efektivno brisajući sve što može biti izbrisano iz datotečnog sustava.+Ovo je primjer napada command injection jer je u legitimnu naredbu za čitanje datoteke umetnuta dodatna naredba **rm -rf /**.
  
 +Nakon izvođenja naredbe čitanja datoteke "filename.txt", pokreće se naredba "rm -rf /", koja pokušava rekurzivno brisati sve datoteke i direktorije počevši od root direktorija, efektivno brišući sve što je dostupno procesu.
 +
 +
 +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  
 <code> <code>
 https://insecure-webshop.com/stockStatus?productID=381&storeID=29  https://insecure-webshop.com/stockStatus?productID=381&storeID=29 
 </code> </code>
-pretražuje postoji li proizvod s id-jem 381 u trgovini s id-jem 29. Sustav zatim parsira upit tako što izvučproductID i storeID te izvede naredbu koja može izgledati ovako:+ 
 +pretražuje postoji li proizvod s ID-om 381 u trgovini s ID-om 29. Sustav zatim parsira upit tako što izvlači vrijednosti productID i storeID parametara te zatim izvršava naredbu koja izgleda ovako: 
 <code> <code>
 stockreport.pl 381 29 stockreport.pl 381 29
 </code> </code>
 +
 Međutim, napadač bi mogao unijeti sljedeće:  Međutim, napadač bi mogao unijeti sljedeće: 
 +
 <code> <code>
-https://insecure-website.com/stockStatus?productID= & echo aiwefwlguh &storeID=29+https://insecure-website.com/stockStatus?productID=;cat&storeID=/etc/passwd
 </code> </code>
-Dakle, umjesto productID parametra unio je **& echo aiwefwlguh**.Nakon parsiranja izvršava se :  
-<code> 
-stockreport.pl & echo aiwefwlguh & 29 
-</code> 
-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 "29" što sustav pokušava pročitati kao naredbu, ali ne postoji pa se ni ne izvede.\\ 
-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: 
-<file> 
-char* home=getenv("APPHOME"); 
-char* cmd=(char*)malloc(strlen(home)+strlen(INITCMD)); 
-if (cmd) { 
-    strcpy(cmd,home); 
-    strcat(cmd,INITCMD); 
-    execl(cmd, NULL); 
-} 
-</file> 
  
-Skripta dohvaća varijablu okruženja APPHOME (varijabla home) i lokaciju radni direktorij (varijabla cmd). Ako naredba postojivarijabla okruženja se kopira na to mjesto. Ranjivost se krije u tome što nema nikakve provjere APPHOME varijable. To znači daako 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 productIDumjesto brojauneseno je **;cat**dok je kao vrijednost parametra storeID uneseno **/etc/passwd**. Nakon parsiranja izvršava se: 
  
- 
-Također, napadač bi mogao izvesti ovu naredbu za promjenu lozinke: 
 <code> <code>
-system("cd /var/yp && make &> /dev/null");+stockreport.pl;cat /etc/passwd
 </code> </code>
  
-Naredba mijenja radni direktorij u /var/yp i tamo poziva makeOna je sama po sebi sigurna jer nema korisničkog unosa, što znači da ju ni napadač ne možizmijenitiMeđutim, budući da nije zadana apsolutna putanja do make filea, ako napadač promijeni $PATH varijablu okruženjamožna tu putanju unijeti malicioznu verziju make binarne datoteke.+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 ne utječna naredbu koja se izvršava nakon operatora točka-zarez za odjeljivanje naredbi. 
 + 
 +Nakon toga se pokreće sljedeća naredba **cat /etc/passwd** koja se uspješno izvršava. Ako se rezultat izvršavanja naredbe ispisuje u odgovoru poslužiteljabit ćprikazan sadržaj datoteke /etc/passwd.
  
  
-Ukratkocommand injection napad može se izvesti u naredbama koja nemaju dobro provedenu validaciju korisničkog unosa. Kako bi se izbjegaoaplikacija ne bi trebala ignorirati svaki unos koji djeluje neispravnoveć bi trebala pogledati postoji li nešto toj naredbi što bi moglo potencijalno biti command injection napad+U oba opisana primjerakada bi validacija korisničkog unosa bila adekvatno implementirana, primjerice dozvoljavanjem unosa samo brojeva za parametre te odbacivanjem unosa koji sadrže operator točka-zarez ili druge specijalne znakove (&, /, razmak, *, itd.)ranjivost ne bi postojala. Još bolji pristup jeumjesto zabranjivanja znakova (engl. //blacklist//), ograničiti unos tako da smije sadržavati samo znakove iz dozvoljenog skupa (engl. //whitelist//). Za parametre bi u tom slučaju jedini dozvoljeni znakovi za unos bile znamenke 0–9, a za prvi primjer samo znakovi koji se mogu pojaviti unutar imena datoteke.
  
 __**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

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki