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 [2023/11/20 12:12] (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 sa 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/06/03 10:22 (external edit)