ssti
Differences
This shows you the differences between two versions of the page.
| Next revision | Previous revision | ||
| ssti [2023/10/27 10:45] – plaintext katarina | 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 | ||
| - | 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 konkateniran direktno | + | ===Detekcija ranjivosti i prikupljanje informacija=== |
| + | Da bi se detektirala SSTI ranjivost na poslužitelju, treba uočiti razlike između odgovora na očekivane podatke i odgovora na bilo koji dani teret. Ako poslužitelj u nekom trenutku vrati grešku, lako je otkriti da je ranjiv te čak i s pomoću kojeg generatora | ||
| - | Detekcija | + | Jedan od osnovnih pristupa otkrivanju ovakve |
| - | Da bi se detektirala SSTI ranjivost na poslužitelju, | + | **%%${{< |
| - | 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 |
| + | < | ||
| + | {{7*7}} | ||
| + | ${7*7} | ||
| + | <%= 7*7 %> | ||
| + | ${{7*7}} | ||
| + | #{7*7} | ||
| + | *{7*7} | ||
| + | </ | ||
| - | Nakon što je identificiran potencijal za SSTI ranjivost na poslužitelju, | + | Jednom kad je generator predložaka poznat, potrebno je pročitati dokumentaciju predloška kako bi se otkrio |
| - | + | ||
| - | Ukoliko poslužitelj ne vrati pogreške pri osnovnim pokušajima otkrivanja ranjivosti, potrebno je testirati razne jezično-specifične terete i promatrati njihovu interpretaciju na generatoru predložaka. Uobičajen način izvođenja ovake diferencijacije je umetanje jednostavnih matematičkih operacija koristeći sintaksu različitih jezika uz promatranje uspješnosti izvođenja. | + | |
| - | + | ||
| - | Jednom kad je generator predložaka poznat, potrebno je pročitati dokumentaciju predloška kako bi se otkrio | + | |
| - | + | ||
| + | {{ :: | ||
| - | Slika 1: primjer stabla odluke za otkrivanje jezika i generatora predložaka u pitanju | ||
| - | 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, dio predloška | + | U primjeru |
| - | http:// | + | < |
| + | **PRIMJER: Labos pronađen na internetu**\\ | ||
| + | Otvorimo stranicu na adresi https:// | ||
| + | {{ :: | ||
| + | |||
| + | 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 | ||
| + | **%%{{7*7}}%%** | ||
| + | {{ :: | ||
| + | Aplikacija izračunava brojeve dane jednadžbom i vraća ih kao naše ime. Budući da se naredba 7*7 izvršila, znamo da se koristi predložak s dvostrukim vitičastim zagradama pa možemo stranici poslati kompleksnije naredbe. Pokušajmo doći do informacija o sustavu na kojem se nalazi aplikacija.\\ | ||
| + | Krećemo s nečim jednostavnim te zasad samo pokušajmo **%%{{" | ||
| + | Vidimo da se string prepoznao jer smo dobili odgovor "Hello foo". Sad pokušajmo saznati u kojem se jeziku mogu prihvatiti naredbe tako što ćemo zvati neke funkcije nad tim stringom. | ||
| + | Ako unesemo **%%{{" | ||
| + | Ono što sad želimo je doći do Pythonovog ' | ||
| + | < | ||
| + | {{" | ||
| + | .__init__.__globals__[' | ||
| + | Raščlanimo ju na dijelove. **%%.__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==== | |
| - | + | [1]https:// | |
| - | PRIMJER – LABOS | + | [2]https:// |
| - | Otvorimo stranicu na adresi | + | [3]https:// |
| - | + | ||
| - | Cilj nam je pomoću SSTI napada izmjeniti naše ime, a možda i doći do nekih zgodnih podataka. | + | |
| - | Prvo što radimo je bacamo matematičke jednadžbe u polje zaunos teksta kako bismo otkrili predložak, odnosno HTML dokument koji sadrži varijable. U polje unosimo {{7*7}} i zatim gledamo kako će se interpretirati u predlošku. | + | |
| - | Aplikacija izračunava brojeve dane arbitrarnom matematičkom jednadžnom i vraća ih kao naše ime. Sad kad znamo koji predložak HTML-a se koristi pa u {{zagradama}} možemo slati i kompleksnije komande. Idemo sad probati doći do informacija o sustavu na kojem se nalazi aplikacija te o tehnologijama koje ju pokreću. Šaljemo komandu: | + | |
| - | {{" | + | |
| - | + | ||
| - | I dobivamo svašta jer je aplikacija uistinu ranjiva na SSTI napade. Vidimo da je aplikacija pisana u Python Flasku, da smo došli do naziva json paketa i da koristi Jinja predložak. | + | |
ssti.1698403555.txt.gz · Last modified: 2025/12/01 11:40 (external edit)