Web Security Academy

Server-side template injection - Lab : Server-side template injection using documentation

Objectif :

  • Supprimer le fichier morale.txt se situant dans le répertoire home de l'utilisateur Carlos. L'identifiant et le mot de passe d'un compte utilisateur sont connus : content-manager / C0nt3ntM4n4g3r .

Solution :

On lance le lab et on arrive sur un site de commerce avec plusieurs articles en vente affichés.

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

Ensuite, on accède au détail d'un article quelconque et bas de la page, un bouton "Edit template" est disponible. Il permet de modifier la description du produit.

On clique dessus et on aperçoit que l'on peut directement inclure du texte avec la syntaxe de la template utilisée dans le serveur :

On modifie le texte de façon à provoquer une erreur et on constate que c'est le moteur de template FreeMarker qui est utilisée par le serveur :

En cherchant sur le net, on trouve que l'on peut exécuter du code avec FreeMarker de cette manière :

<#assign ex="freemarker.template.utility.Execute"?new()> ${ ex(" [COMMAND_TO_EXECUTE] ") }

Notre payload sera donc : <#assign ex="freemarker.template.utility.Execute"?new()> ${ ex("rm /home/carlos/morale.txt") }.

On l'insère dans le texte comme dans l'image suivante :

On clique sur "Save" et le lab se valide. La commande supprimant le fichier morale.txt s'est donc bien exécutée.