ssti
Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| ssti [2023/11/20 08:45] – zrinka | ssti [2025/12/01 11:40] (current) – external edit 127.0.0.1 | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| ====SSTI==== | ====SSTI==== | ||
| - | **SSTI (Server Side Template Injection)** je ranjivost do koje dolazi kada je napadač | + | **SSTI (Server Side Template Injection)** je ranjivost do koje dolazi kada napadač |
| - | + | Generatori predložaka (eng. //template engines//) su dizajnirani za generiranje web stranica kombiniranjem fiksnih predložaka s promjenjivim podatcima. Do SSTI-a dolazi kada je korisnički unos nije poslan kao podatak, već je konkateniran direktno u predložak. Ovakav pristup dopušta napadačima da ubacuju proizvoljne | |
| - | Generatori predložaka (eng. //template engines//) su dizajnirani za generiranje web stranica kombiniranjem fiksnih predložaka s promjenjivim podatcima. Do SSTI-a dolazi kada je korisnički unos nije poslan kao podataka, već je konkateniran direktno u predložak. Ovakav pristup dopušta napadačima da ubacuju proizvoljne | + | |
| ===Detekcija ranjivosti i prikupljanje informacija=== | ===Detekcija ranjivosti i prikupljanje informacija=== | ||
| Line 8: | Line 7: | ||
| Jedan od osnovnih pristupa otkrivanju ovakve ranjivosti je zbunjivanje predloška (eng. //template fuzzing//) umetanjem nizova posebnih znakova često korištenih u predlošku, npr. | Jedan od osnovnih pristupa otkrivanju ovakve ranjivosti je zbunjivanje predloška (eng. //template fuzzing//) umetanjem nizova posebnih znakova često korištenih u predlošku, npr. | ||
| + | **%%${{< | ||
| - | ${{< | + | Kako bi se ovakva ranjivost lakše razlikovala od obične XSS ranjivosti, preporučuje se umetanje jednostavnih matematičkih operacija. Potrebno je identificirati koji je generator predložaka korišten. To se ostvari isprobavanjem različitih predložaka dok neki od njih ne vrati smislen rezultat. Iako je broj potencijalnih jezika velik, svi koriste sličnu sintaksu |
| - | + | < | |
| - | Kako bi se ovakva ranjivost lakše razlikovala od obične XSS ranjivosti, preporuča se umetanje jednostavnih matematičkih operacija. Potrebno je identificirati koji je generator predložaka korišten. To se ostvari isprobavanjem različitih predložaka | + | |
| {{7*7}} | {{7*7}} | ||
| ${7*7} | ${7*7} | ||
| Line 19: | Line 17: | ||
| #{7*7} | #{7*7} | ||
| *{7*7} | *{7*7} | ||
| - | + | </ | |
| - | Iako je broj potencijalnih jezika velik, svi koriste sličnu sintaksu | + | Jednom kad je generator predložaka poznat, potrebno je pročitati dokumentaciju predloška kako bi se otkrio najefikasniji pristup napadu. Ključna poglavlja uključuju osnovnu sintaksu, sigurnost, listu ugrađenih metoda, funkcija, filtera i varijabli te ekstenzija |
| {{ :: | {{ :: | ||
| Line 27: | Line 25: | ||
| ===Napad=== | ===Napad=== | ||
| - | Nakon što su prikupljene sve potrebne informacije o aplikaciji, moguće je napasti web aplikaciju | + | Nakon što su prikupljene sve potrebne informacije o aplikaciji, moguće je napasti web aplikaciju |
| - | $output = $twig-> | + | < |
| U primjeru se dio predloška generira dinamički putem GET parametra //name//. S obzirom na to da se sintaksa evaluira na poslužitelju, | U primjeru se dio predloška generira dinamički putem GET parametra //name//. S obzirom na to da se sintaksa evaluira na poslužitelju, | ||
| - | http:// | + | < |
| Line 39: | Line 37: | ||
| Cilj nam je s pomoću SSTI napada izmijeniti svoje ime, a možda i doći do nekih zgodnih podataka. | Cilj nam je s pomoću SSTI napada izmijeniti svoje ime, a možda i doći do nekih zgodnih podataka. | ||
| - | Prvo što unosimo matematičke jednadžbe u polje za unos teksta kako bismo otkrili predložak, odnosno HTML dokument koji sadrži varijable. U polje unosimo: | + | Prvo unosimo matematičke jednadžbe u polje za unos teksta kako bismo otkrili predložak, odnosno HTML dokument koji sadrži varijable. U polje unosimo |
| - | {{7*7}} | + | **%%{{7*7}}%%** |
| - | ...i zatim gledamo kako će se interpretirati u predlošku.\\ | + | |
| {{ :: | {{ :: | ||
| - | Aplikacija izračunava brojeve dane matematičkom | + | Aplikacija izračunava brojeve dane jednadžbom i vraća ih kao naše ime. Budući da se naredba 7*7 izvršila, |
| - | Krećemo | + | Krećemo |
| - | {{" | + | Vidimo da se string prepoznao |
| - | Vidimo da se string prepoznao. Možemo isprobati i bilo koji drugi predložak i uvjeriti se da evaluacija neće proći. Sad pokušajmo saznati u kojem se jeziku mogu prihvatiti naredbe. | + | Ako unesemo **%%{{" |
| - | Ako pošaljemo u vitičastim zagradama //" | + | Ono što sad želimo je doći do Pythonovog |
| - | {{" | + | < |
| - | zaista | + | |
| - | Ono što sad želimo je doći do Pythonovog | + | |
| {{" | {{" | ||
| - | .__init__.__globals__[' | + | .__init__.__globals__[' |
| - | {{ :: | + | |
| - | Raščlanimo ju na dijelove. | + | Raščlanimo ju na dijelove. **%%.__class__%%** vraća klasu objekta nad kojim je funkcija pozvana (u ovom slučaju ' |
| - | **.__class__** vraća klasu objekta nad kojim je funkcija pozvana (u ovom slučaju ' | + | |
| + | {{ :: | ||
| + | Na ovaj smo način izveli naredbu operacijskog sustava na udaljenom poslužitelju. U ovom slučaju to je bila ls naredba, no mogla se iskoristiti i bilo koja druga. | ||
| ===Izvori==== | ===Izvori==== | ||
ssti.1700469913.txt.gz · Last modified: 2025/12/01 11:40 (external edit)