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:57] – 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 napadač iskorištava sintaksu predloška web aplikacije kako bi u obrazac umetnuo zlonamjerni teret koji će se izvesti na poslužitelju. | **SSTI (Server Side Template Injection)** je ranjivost do koje dolazi kada napadač iskorištava sintaksu predloška web aplikacije kako bi u obrazac umetnuo zlonamjerni teret koji će se izvesti na poslužitelju. | ||
| - | + | 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 podatak, 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č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 dok neki od njih ne vrati smislen rezultat, primjerice: | + | 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 |
| < | < | ||
| {{7*7}} | {{7*7}} | ||
| Line 20: | Line 19: | ||
| </ | </ | ||
| - | 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 38: | 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 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 jednadžbom i vraća ih kao naše ime. Sad kad znamo koji predložak | + | 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. Sad pokušajmo saznati u kojem se jeziku mogu prihvatiti naredbe. | + | Vidimo da se string prepoznao |
| - | Ako u dvostrukim vitičastim zagradama pošaljemo //" | + | Ako unesemo **%%{{" |
| - | {{" | + | 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.1700470621.txt.gz · Last modified: 2025/12/01 11:40 (external edit)