# Server Side Inclusion/Edge Side Inclusion Injection {{#include ../banners/hacktricks-training.md}} ## Server Side Inclusion Basic Information **(Introduction taken from** [**Apache docs**](https://httpd.apache.org/docs/current/howto/ssi.html)**)** SSI (Server Side Includes) निर्देश हैं जो **HTML पृष्ठों में रखे जाते हैं, और सर्वर पर मूल्यांकित होते हैं** जब पृष्ठों को परोसा जा रहा होता है। ये आपको **एक मौजूदा HTML पृष्ठ में गतिशील रूप से उत्पन्न सामग्री** जोड़ने की अनुमति देते हैं, बिना पूरे पृष्ठ को CGI प्रोग्राम या अन्य गतिशील तकनीक के माध्यम से परोसने की आवश्यकता के।\ उदाहरण के लिए, आप एक मौजूदा HTML पृष्ठ में एक निर्देश रख सकते हैं, जैसे: `` और, जब पृष्ठ परोसा जाता है, तो यह अंश मूल्यांकित किया जाएगा और इसके मान से प्रतिस्थापित किया जाएगा: `Tuesday, 15-Jan-2013 19:28:54 EST` SSI का उपयोग कब करना है, और कब आपके पृष्ठ को पूरी तरह से किसी प्रोग्राम द्वारा उत्पन्न किया जाना है, यह आमतौर पर इस बात का मामला होता है कि पृष्ठ का कितना हिस्सा स्थिर है, और कितना हर बार पृष्ठ परोसने पर पुनः गणना करने की आवश्यकता है। SSI छोटी जानकारी के टुकड़े जोड़ने का एक शानदार तरीका है, जैसे कि वर्तमान समय - जो ऊपर दिखाया गया है। लेकिन यदि आपके पृष्ठ का अधिकांश भाग उस समय उत्पन्न हो रहा है जब इसे परोसा जा रहा है, तो आपको किसी अन्य समाधान की तलाश करनी होगी। आप SSI की उपस्थिति का अनुमान लगा सकते हैं यदि वेब एप्लिकेशन उन फ़ाइलों का उपयोग करता है जिनका एक्सटेंशनs**`.shtml`, `.shtm` या `.stm`** है, लेकिन यह केवल यही मामला नहीं है। एक सामान्य SSI अभिव्यक्ति का निम्नलिखित प्रारूप होता है: ``` ``` ### जांचें ```javascript // Document name // Date // File inclusion // Including files (same directory) // CGI Program results // Including virtual files (same directory) // Modification date of a file // Command exec // Command exec // Reverse shell // Print all variables // Setting variables ``` ## Edge Side Inclusion एक समस्या **जानकारी या गतिशील अनुप्रयोगों को कैश करना** है क्योंकि सामग्री का एक भाग अगले बार जब सामग्री को पुनः प्राप्त किया जाता है तो **भिन्न** हो सकता है। यही कारण है कि **ESI** का उपयोग किया जाता है, ESI टैग का उपयोग करके यह संकेत करने के लिए कि **गतिशील सामग्री जो उत्पन्न की जानी चाहिए** उसे कैश संस्करण भेजने से पहले उत्पन्न किया जाना चाहिए।\ यदि एक **हमलावर** कैश सामग्री के अंदर **एक ESI टैग** इंजेक्ट करने में सक्षम है, तो वह दस्तावेज़ पर **मनमाना सामग्री** इंजेक्ट करने में सक्षम हो सकता है इससे पहले कि इसे उपयोगकर्ताओं को भेजा जाए। ### ESI Detection सर्वर से प्रतिक्रिया में निम्नलिखित **हेडर** का अर्थ है कि सर्वर ESI का उपयोग कर रहा है: ``` Surrogate-Control: content="ESI/1.0" ``` यदि आप इस हेडर को नहीं ढूंढ पा रहे हैं, तो सर्वर **शायद ESI का उपयोग कर रहा है**।\ एक **अंधा शोषण दृष्टिकोण भी उपयोग किया जा सकता है** क्योंकि एक अनुरोध हमलावर के सर्वर पर पहुंचना चाहिए: ```javascript // Basic detection hello // If previous is reflected as "hello", it's vulnerable // Blind detection // XSS Exploitation Example // Cookie Stealer (bypass httpOnly flag) // Introduce private local files (Not LFI per se) // Valid for Akamai, sends debug information in the response ``` ### ESI शोषण [GoSecure ने बनाया](https://www.gosecure.net/blog/2018/04/03/beyond-xss-edge-side-include-injection/) एक तालिका ताकि हम विभिन्न ESI-सक्षम सॉफ़्टवेयर के खिलाफ संभावित हमलों को समझ सकें, जो समर्थित कार्यक्षमता पर निर्भर करता है: - **Includes**: `` निर्देश का समर्थन करता है - **Vars**: `` निर्देश का समर्थन करता है। XSS फ़िल्टर को बायपास करने के लिए उपयोगी - **Cookie**: दस्तावेज़ कुकीज़ ESI इंजन के लिए सुलभ हैं - **Upstream Headers Required**: सरोगेट एप्लिकेशन ESI बयानों को संसाधित नहीं करेंगे जब तक कि अपस्ट्रीम एप्लिकेशन हेडर प्रदान न करे - **Host Allowlist**: इस मामले में, 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 निर्देश सर्वर की प्रतिक्रिया के अंदर एक मनमाना फ़ाइल लोड करेगा ```xml ``` #### क्लाइंट XSS सुरक्षा को बायपास करें ```xml x=>alert(/Chrome%20XSS%20filter%20bypass/);> Use to bypass WAFs: ipt>alert(1)ript> error=alert(1)> ``` #### कुकी चुराना - दूरस्थ कुकी चुराना ```xml ``` - XSS के माध्यम से HTTP_ONLY कुकी को चुराना और इसे प्रतिक्रिया में परावर्तित करना: ```bash # This will reflect the cookies in the response # Reflect XSS (you can put '">' URL encoded and the URL encode eveyrhitng to send it in the HTTP request) # It's possible to put more complex JS code to steal cookies or perform actions ``` #### निजी स्थानीय फ़ाइल इसको "स्थानीय फ़ाइल समावेशन" के साथ भ्रमित न करें: ```markup ``` #### CRLF ```markup ``` #### Open Redirect निम्नलिखित प्रतिक्रिया में `Location` हेडर जोड़ेगा ```bash ``` #### हैडर जोड़ें - मजबूर अनुरोध में हैडर जोड़ें ```xml ``` - प्रतिक्रिया में हेडर जोड़ें (XSS के साथ "Content-Type: text/json" को बायपास करने के लिए उपयोगी) ```bash # Check the number of url_decode to know how many times you can URL encode the value ``` #### CRLF in Add header (**CVE-2019-2438**) ```xml ``` #### Akamai debug यह प्रतिक्रिया में शामिल डिबग जानकारी भेजेगा: ```xml ``` ### ESI + XSLT = XXE यह संभव है कि **`eXtensible Stylesheet Language Transformations (XSLT)`** सिंटैक्स का उपयोग ESI में केवल **`dca`** मान को **`xslt`** के रूप में इंगित करके किया जा सके। जो **XSLT** का दुरुपयोग करके एक XML External Entity भेद्यता (XXE) बनाने और दुरुपयोग करने की अनुमति दे सकता है: ```xml ``` XSLT फ़ाइल: ```xml ]> &xxe; ``` XSLT पृष्ठ की जांच करें: {{#ref}} xslt-server-side-injection-extensible-stylesheet-language-transformations.md {{#endref}} ### संदर्भ - [https://www.gosecure.net/blog/2018/04/03/beyond-xss-edge-side-include-injection/](https://www.gosecure.net/blog/2018/04/03/beyond-xss-edge-side-include-injection/) - [https://www.gosecure.net/blog/2019/05/02/esi-injection-part-2-abusing-specific-implementations/](https://www.gosecure.net/blog/2019/05/02/esi-injection-part-2-abusing-specific-implementations/) - [https://infosecwriteups.com/exploring-the-world-of-esi-injection-b86234e66f91](https://infosecwriteups.com/exploring-the-world-of-esi-injection-b86234e66f91) ## ब्रूट-फोर्स पहचान सूची {{#ref}} https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/ssi_esi.txt {{#endref}} {{#include ../banners/hacktricks-training.md}}