Web Security Academy

Server-side template injection - Lab : injection with information disclosure via user-supplied objects

Objectif :

  • Récupérer la clef secrète liée au framework utilisé par le serveur. Les identifiants d'un compte utilisateur sont donnés : content-manager / C0nt3ntM4n4g3r.

Solution :

On lance le lab et on se retrouve dans un site de commerce avec des articles affichés :

On se connecte ensuite avec le compte donné dans l'énoncé en cliquant sur "Login".

En accédant au détail d'un produit, on constate en bas de la page que l'on peut modifier sa description :

En cliquant sur "Edit template", on observe ensuite que l'on peut directement modifier la template :

On va d'abord chercher à provoquer une erreur pour découvrir quel framework est utilisé. On va écrire {{product.price.sss+'7}}. Le serveur nous retourne l'erreur suivante :

On découvre que c'est le framework Django qui est utilisé.

En cherchant sur le net, on trouve qu'une clef secrète peut être stockée dans la variable "settings.SECRET_KEY". On va essayer de l'afficher en utilisant la syntaxe de la template : {{settings.SECRET_KEY}}.

Ce qui donne dans le site :

On soumet le nouveau texte et la clef secrète apparaît :

Il suffit d'envoyer cette valeur au lab pour le valider.