| Both sides previous revisionPrevious revisionNext revision | Previous revision |
| argument_injection [2025/04/22 16:22] – ppale | argument_injection [2026/06/18 17:53] (current) – mbunic |
|---|
| ====Argument injection==== | ====Argument injection==== |
| |
| "Argument injection" je podvrsta "command injection" napada. Razlikuje se u tome što se u argument injectionu, "napad" može ugraditi samo u jedan argument naredbe, dok se u command injectionu kôd može ubaciti i usred naredbe. Dok se u klasičnom command injectionu često mogu dodavati i mijenjati argumenti naredbe ili čak dodavati potpuno nove naredbe vještim korištenjem komandnih operatora, prostor za „manevriranje“ u argument injectionu je znatno manji i više ovisi o kontekstu same naredbe u čiji se argument vrši argument injection. | **Argument injection** je podvrsta **command injection** napada. Razlikuje se u tome što se u argument injection napadu zlonamjerna manipulacija naredbom može ugraditi samo u jedan argument naredbe, dok se u command injectionu kôd može ubaciti usred ili nakon naredbe te se potpuno kontekstualno odvojiti. |
| | |
| | Dok se u klasičnom command injectionu često mogu dodavati i mijenjati argumenti naredbe i dodavati potpuno nove naredbe vještim korištenjem komandnih operatora, prostor za „manevriranje“ u argument injectionu je znatno manji i više ovisi o kontekstu same naredbe u čiji se argument vrši argument injection. |
| |
| ===PRIMJER -Zadatak s Hacknite platforme – Flask GCC=== | ===PRIMJER -Zadatak s Hacknite platforme – Flask GCC=== |
| {{argumentinjectionv2:slika2.png}} | {{argumentinjectionv2:slika2.png}} |
| |
| Ovime se efektivno ime učitane datoteke koristi kao dio naredbe, te se može iskoristiti za command injection. Ovaj command injection ima ograničenje. Može se samo promijeniti izvršavanje naredbe u kojoj je injekcija, naredba pozivanja GCC prevoditelja. Ne može se ubaciti druga arbitrarna bash naredba korištenjem uobičajenih bash operatora kao što su ‘;’, ‘&’, ‘|’, .. | Ovaj command injection ima ograničenje. Ne može se, umjesto pozivanja GCC prevoditelja, ubaciti neka arbitrarna bash naredba korištenjem uobičajenih bash operatora kao što su ‘;’, ‘&’, ‘|’ …, nego će se uvijek pozivati GCC prevoditelj. Dakle, napadač može samo pokušati na lukav način u ime datoteke ugraditi naredbu koju želi da se izvrši (command injection). |
| Kako bi se uspješno poslala datoteka s injektiranom naredbom, ime datoteke mora uspješno proći kroz filter koju funkcija „allowed_file“ implementira. Kako se provjerava samo završava li ime datoteke s ".c", ime naše datoteke treba nakon injektirane naredbe završavati s „.c“. | Kako bi se uspješno poslalo ime datoteke koje sadrži injektiranu naredbu, ime datoteke mora uspješno proći kroz filter koju implementira funkcija „allowed_file“. Kako se provjerava samo završava li ime datoteke s “.c”, ime naše datoteke treba nakon injektirane naredbe završavati s „.c“. Da bi se command injection u naredbi pozivanja GCC-a efektivno iskoristio, trebaju se istražiti funkcionalnosti i zastavice GCC-a, kako bi se pronašao način za iskorištavanje pronađene ranjivosti, tj. da se „nagovori“ GCC da izvrši naredbu koju napadač želi. GCC ima funkcionalnost pozivanja subkomandi unutar wrapper programa, korištenjem -wrapper zastavice. Ova funkcionalnost se može iskoristiti kako bi se pokrenuo bash process i dala mu se naredba koju napadač želi izvršiti. |
| Da bi se command injection u naredbi pozivanja GCC-a efektivno iskoristio, trebaju se istražiti funkcionalnosti i zastavice GCC-a, kako bi se pronašao način za iskorištavanje pronađene ranjivosti. GCC ima funkcionalnost pozivanja subkomandi unutar wrapper programa, korištenjem -wrapper zastavice. Ova funkcionalnost se može iskoristiti kako bi se pokrenuo bash process i dala mu se naredba koju napadač želi izvršiti. | |
| |
| Potrebno je i analizirati kôd kako bi se pronašlo može li napadač nekako dobiti rezultat pokretanja injektiranje naredbe preko sučelja aplikacije. Ako ne može, onda provjeriti može li se izvući preko weba ili može li se reverse shell pokrenuti, kako bi se znalo kako konstruirati injektiranu naredbu. Analizom izvornog kôda prikazanom na slici 2. , može se uočiti da će se rezultat izvršavanja subprocess procesa ispisati kao paragraf na vraćenoj stranici. | Potrebno je i analizirati kôd kako bi se pronašlo može li napadač nekako dobiti rezultat pokretanja injektiranje naredbe preko sučelja aplikacije. Ako ne može, onda treba provjeriti može li se izvući preko weba ili može li se pokrenuti reverse shell, kako bi se ispravnoi oblikovala injektirana naredba. Analizom izvornog kôda prikazanom na slici 2. , može se uočiti da će se rezultat izvršavanja subprocessa ispisati kao paragraf na vraćenoj stranici. |
| |
| {{argumentinjectionv2:slika3.png}} | {{argumentinjectionv2:slika3.png}} |
| |
| |
| Kada je poznato da se command injection može izvršiti i vidjeti rezultat izvođenja naredbe na sučelju aplikacije, može se prvo konstruirati payload za pokretanje naredbe „ls“. | Kada je poznato da se command injection može izvršiti i vidjeti rezultat izvođenja naredbe na sučelju aplikacije, može se prvo konstruirati tekst payloada za pokretanje naredbe „ls“. |
| Prvo se generira neka vrlo jednostavna .c datoteka čiji kod nije bitan, te joj se ime odmah promijeni u payload, ili se poslan zahtjev s normalnim imenom datoteke presretne burp suiteovim presretačem (eng. Proxy) i tamo promjeni. | Prvo se generira neka vrlo jednostavna .c datoteka čiji kod nije bitan, te joj se ime odmah promijeni u tekst payloada, ili se poslan zahtjev s normalnim imenom datoteke presretne burp suiteovim presretačem (eng. Proxy) i tamo promjeni. |
| |
| Payload ime datoteke za pokretanje ls naredbe, uz zaobilaženje filtera glasi: | Payload ime datoteke za pokretanje ls naredbe, uz zaobilaženje filtera glasi: |
| {{argumentinjectionv2:slika4.png}} | {{argumentinjectionv2:slika4.png}} |
| |
| Slanjem ovog zahtjeva, na stranici se ispisuju sve datoteke u trenutnom direktoriju, gdje se vidi da je prisutna i datoteka flag.txt. Prikazano na slici 5. | Slanjem ovog zahtjeva, na stranici se ispisuju sve datoteke u trenutnom direktoriju, gdje se vidi da je prisutna i datoteka koju napadač traži, npr. flag.txt. Prikazano na slici 5. |
| |
| {{argumentinjectionv2:slika5.png}} | {{argumentinjectionv2:slika5.png}} |
| </code> | </code> |
| |
| U bashu, može se vidjeti koji su znakovi definirani kao razdjeljivači. Oni su uobičajeno space, tab i newline. Da bi zamijenili ulogu razmaka u naredbi „cat flag.txt“, a održali namjenu razmaka, možemo direktno dohvatiti vrijednost definirane IFS varijable u kontekstu bash procesa. Da bi se to postiglo, razmak u naredbi „cat flag.txt“ se treba zamijeniti dohvaćanjem vrijednosti te varijable – „${IFS}“ kako bi imali naredbu ekvivalentnog značenja, ali drukčije zapisanu – „cat ${IFS}flag.txt“. Koristeći ovaj pristup, potpuna naredba za dohvaćanje flaga je: | u bashu, može se vidjeti koji su znakovi definirani kao razdjeljivači. Oni su uobičajeno space, tab i newline. Da bi u naredbi „cat flag.txt“ imali razmak, ali da ga filter ne vidi, možemo izravno dohvatiti vrijednost definirane IFS varijable u kontekstu (trenutku izvođenja) bash procesa. Da bi se to postiglo, razmak u naredbi „cat flag.txt“ se treba zamijeniti dohvaćanjem vrijednosti te varijable – „${IFS}“ kako bi imali naredbu ekvivalentnog značenja, ali drukčije zapisanu – „cat${IFS}flag.txt“. Koristeći ovaj pristup, potpuna naredba za dohvaćanje flaga je: |
| |
| <code> | <code> |