Web Security Academy

SSRF - Lab : SSRF with blacklist-based input filter

Objectif :

  • Accéder à l'interface administrateur pour supprimer l'utilisateur dont le nom est Carlos.

  • Dans l'énoncé, il est précisé que cette interface est située dans même serveur que l'application.

Solution :

On lance le lab et on se trouve dans un site de commerce :

On se rend maintenant dans les détails d'un produit quelconque et en bas de la page, on peut vérifier la quantité du stock selon la ville :

Lorsqu'on clique sur "Check stock", c'est une requête POST qui est envoyée au serveur avec comme donnée une URL vers une API :

La donnée est la suivante : stockApi=http://stock.weliketoshop.net:8080/product/stock/check?productId=1&storeId=1.

On va modifier l'URL pour interroger le serveur lui-même avec localhost : http://localhost/.

La requête ne passe pas et on voit qu'un filtre est mis en place :

On essaye de remplacer localhost par "127.0.0.1" : Ce qui donne : http://127.0.0.7/. Mais la requête ne passe toujours pas.

On va utiliser une alternative à "127.0.0.1", qui est "127.1". Ce qui donne : http://127.1/. La requête passe ! L'input n'est pas filtré.

On essaye maintenant d'accéder au panel administrateur avec http://127.1/admin mais le mot "admin" semble bloqué.

On va changer certaines minuscules en majuscules : http://127.1/AdMIN. De cette maniére, le mot 'admin' n'est pas bloqué et la requête est bien transmise .Le panel administrateur est renvoyé :

On clique sur "Delete" pour supprimer le compte de Carlos et on remarque qu'une requête GET qui est envoyée au serveur :

Il suffit donc d'inscrire l'URL suivante dans les données de la requête POST précédente : http://127.1/AdMIN/delete?username=carlos.

On lance la requête et le serveur supprime le compte de l'utilisateur Carlos. On peut le vérifier en revenant sur l'interface administrateur :

Le lab est désormais validé !