Web Security Academy

Server-side template injection - Lab : injection in a sandboxed environment

Objectif :

  • Récupérer le contenu du fichier my_password.txt situé dans le répertoire home d'un utilisateur s'appelant Carlos. Les identifiants d'un compte utilisateur sont donnés : content-manager / C0nt3ntM4n4g3r. La template Freemaker est utilisée par le site. Une sandbox a été mise en place contre les injections de template.

Solution :

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

On se connecte au site avec le compte donné dans l'énoncé en cliquant sur "Login" en haut à droite.

Ensuite, on accède au détail d'un article quelconque et en bas de la page, on constate que l'on peut éditer le texte concernant la définition de l'objet en accédant directement à la template :

Depuis cette interface, on va tenter d'afficher le contenu du fichier my_password.txt situé dans le répertoire home d'un utilisateur s'appelant Carlos en combinant certains objets et méthodes autorisés.

En cherchant sur le net et avec de multiples tentatives, on trouve le payload suivant :

${product.getClass().getProtectionDomain().getCodeSource().getLocation().toURI().resolve('/home/carlos/my_password.txt').toURL().openStream().readAllBytes()?join(" ")

Il suffit de l'inclure dans le texte :

On soumet le payload au serveur et un ensemble de nombre apparaît :

On convertit ces nombres décimaux en texte ( ASCII ) et le contenu du fichier est découvert :

Il suffit de soumettre ce mot de passe au lab pour le valider.