User Tools

Site Tools


ssti

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
ssti [2023/11/20 12:12] zrinkassti [2026/06/12 19:23] (current) – Značajne ispravke i prerada ("zlonamjerni teret" i "zbunjvanje predloška (template fuzzing)") mbunic
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 obrazac umetnuo zlonamjerni teret koji ćse izvesti na poslužitelju. +**SSTI (Server Side Template Injection)** je ranjivost do koje dolazi kada napadač manipulira procesom generiranja odgovora poslužitelja iz predloška web aplikacije. Time napadač određenim slučajevima možizvršavati proizvoljan kôd na poslužitelju (**remote code execution**, **RCE**), kao i mijenjati generirani odgovor koji poslužitelj vraća. 
-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 naredbe kako bi manipulirali generatorom predložakašto im često omogućava preuzimanje kontrole nad cijelim poslužiteljem. + 
 + 
 +Generatori predložaka (engl. //template engines//) su dizajnirani za generiranje web stranica kombiniranjem fiksnih predložaka s promjenjivim podacima. Do SSTI-a dolazi kada korisnički unos nije proslijeđen kao podatak, već je konkateniran direktno u predložak u nepročišćenom obliku, pri čemu se zadržava sintaksa koda za generiranje predloška. Ovo napadačima omogućuje izvršavanje proizvoljnog koda unutar procesa generiranja predloška, u istom programskom jeziku koji koristi generator predložaka. Napad može eskalirati do izvršavanja naredbi u ljusci operacijskog sustava poslužitelja.
  
 ===Detekcija ranjivosti i prikupljanje informacija=== ===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 s pomoću kojeg generatora predložaka je izveden. Još jedan od pokazatelja ranjivosti je nereflektirani ili nepotpuno reflektirani podatak za kojeg se očekuje da će ga poslužitelj reflektirati.+Da bi se detektirala SSTI ranjivost na poslužitelju, treba uočiti razlike između odgovora na očekivane podatke i odgovora na unos koji ukazuje na mogućnost izvršavanja koda. Ako poslužitelj u nekom trenutku vrati grešku, može se otkriti da je ranjiv te ponekad koji je točno generator predložaka korišten. Još jedan od pokazatelja ranjivosti je nereflektirani ili nepotpuno reflektirani podatak za koji se očekuje da će ga poslužitelj reflektirati.
  
-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 enumeracija i ispitivanje generatora predložaka (engl. //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  dizajniranu da ne interferira s HTML znakovima, 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 unosa sa specifičnom sintaksom za različite predloške dok neki ne proizvede rezultat koji ukazuje na uspješno izvršavanje koda. Iako je broj potencijalnih generatora predloška velik, mnogi koriste sličnu sintaksu  dizajniranu da ne interferira s HTML sintaksom, primjerice:
 <code> <code>
 {{7*7}} {{7*7}}
Line 19: Line 21:
 </code> </code>
  
-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  i/ili plugina. Također je potrebno istražiti okolinu kako bi se otkrilo čemu sve imamo pristup te pronaćobjekte u aplikaciji te informacije koje sadrže+Jednom kad je generator predložaka poznat, potrebno je pročitati dokumentaciju generatora predložaka 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  i plugina. Također je potrebno istražiti okolinu kako bi se otkrilo koji su sve dostupni resursi objekti te koji su izloženi podaci i strukture.
    
  {{ ::ssti_dec_tree.png?nolink&600 |Primjer stabla odluke za otkrivanje jezika i generatora predložaka u pitanju}}  {{ ::ssti_dec_tree.png?nolink&600 |Primjer stabla odluke za otkrivanje jezika i generatora predložaka u pitanju}}
Line 28: Line 30:
 <code> $output = $twig->render("Dear " . $_GET['name']); </code> <code> $output = $twig->render("Dear " . $_GET['name']); </code>
  
-U primjeru se dio predloška generira dinamički putem GET parametra //name//. S obzirom na to da se sintaksa evaluira na poslužitelju, napadač može postaviti SSTI teret u taj parametar:\\+U primjeru se dio predloška generira dinamički putem GET parametra //name//. S obzirom na to da se sintaksa evaluira na poslužitelju, napadač može postaviti maliciozan SSTI unos u taj parametar:\\
 <code>http://vulnerable-website.com/?name={{bad-stuff-here}}</code> <code>http://vulnerable-website.com/?name={{bad-stuff-here}}</code>
  
Line 40: Line 42:
 **%%{{7*7}}%%**  i zatim gledamo kako će se interpretirati u predlošku.\\ **%%{{7*7}}%%**  i zatim gledamo kako će se interpretirati u predlošku.\\
 {{ ::ssti_lab2.png?nolink&600 |}} {{ ::ssti_lab2.png?nolink&600 |}}
-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.\\+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 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 **%%{{"foo"}}%%** . Krećemo s nečim jednostavnim te zasad samo pokušajmo **%%{{"foo"}}%%** .
 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. 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.
ssti.1700482343.txt.gz · Last modified: 2025/12/01 11:40 (external edit)

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki