Post

SSTTI EXO

SSTTI EXO

La Server-Side Template Injection survient lorsque des données utilisateur sont injectées dans un modèle côté serveur sans validation ou filtrage approprié. Cela peut permettre à un attaquant de manipuler le modèle pour exécuter du code arbitraire.

Dans cet exercice, nous allons donc exploiter une injection de modèle côté serveur (Server-Side Template Injection, SSTI) pour obtenir une exécution de code à distance (RCE) et lire le contenu d’un fichier texte caché. L’application cible est accessible à l’adresse suivante :

URL : http://ssti.thm:8080/

Identifiants de connexion :

  • Nom d’utilisateur : admin
  • Mot de passe : admin

Image


1. Connexion et exploration initiale

Image

Après s’être connecté avec les identifiants fournis, nous arrivons sur l’interface d’administration d’une application appelée Form Tools. Le nom et le logo suggèrent qu’il s’agit d’un outil de gestion de formulaires. Nous explorons les fonctionnalités disponibles et notons les points suivants :

Pages et fonctionnalités principales

Ajout de formulaires :

Image

  • Formulaires internes : Utilisables uniquement au sein de l’application Form Tools.
  • Formulaires externes : Intégrables à partir de sites web ou d’autres sources.
  • Form Builder : Permet de générer des formulaires via un éditeur intégré.

Page Client :

Image Permet la création de clients.

Page Module :

Image Ajout de modules pour enrichir les fonctionnalités, y compris le générateur de formulaires (Form Builder).

Page Thème :

Image Options de personnalisation pour l’esthétique du site.

Page Paramètres :

  • Main : Informations sur l’application (version, architecture des dossiers, etc.). Image

  • Account : Gestion des comptes utilisateurs et personnalisation de leur interface. Image

C’est dans la section Account que nous identifions un point d’intérêt. Nous remarquons l’utilisation d’un tag {php} dans le titre de la page d’accueil des utilisateurs. Cela indique que le moteur de template interprète des instructions, ce qui ouvre potentiellement la porte à une SSTI.


2. Comprendre le moteur de template

L’objectif est d’identifier le moteur de template utilisé, car chaque moteur a sa propre syntaxe et ses vulnérabilités spécifiques. Les moteurs courants en PHP incluent :

  • Twig : Populaire pour sa flexibilité et sa sécurité (mais vulnérable si mal configuré).
  • Smarty : Un autre moteur PHP couramment utilisé.

Pour vérifier cela, nous injectons une simple charge utile : {'Hello'|upper}. Si le moteur est vulnérable et que cette syntaxe est supportée, le résultat attendu est que le texte “Hello” soit transformé en majuscules (“HELLO”).


3. Exploitation de la SSTI

Nous procédons comme suit :

  1. Création d’un compte utilisateur via l’interface admin. Image
  2. Modification du paramètre de titre de la page d’accueil utilisateur dans les paramètres pour y injecter la charge utile {'Hello'|upper}. Image
  3. Connexion avec le compte utilisateur créé : Nous observons que le titre affiche “HELLO” en majuscules. Cela confirme que l’application utilise un moteur de template compatible avec cette syntaxe. Image

Exécution de commandes système (RCE)

Maintenant que nous savons que le moteur de template interprète les expressions injectées, nous testons des charges utiles permettant d’exécuter des commandes système. En utilisant la fonction system() disponible dans PHP, nous injectons :

1
{system("ls /var/www/html/")}

Image

Cette commande liste les fichiers dans le répertoire /var/www/html/, qui est le répertoire racine du serveur web. Parmi les résultats, nous identifions un fichier caché dont le nom semble être une chaîne de caractères aléatoire : 105e15924c1e41bf53ea64afa0fa72b2.txt.

Pour lire le contenu de ce fichier, nous injectons :

1
{system("cat /var/www/html/105e15924c1e41bf53ea64afa0fa72b2.txt")}

4. Résultat final

Le contenu du fichier est affiché dans la page de l’utilisateur. Cela valide que nous avons réussi à exploiter une SSTI pour obtenir une RCE.

Image


Conclusion

Dans cet exercice, l’application n’a pas désactivé les fonctionnalités critiques du moteur de template, comme l’accès à la fonction system(). Cela ouvre une faille qui permet une RCE. Pour régler cette vulnérabilité, il est crucial de :

  • Ne pas permettre aux utilisateurs de soumettre des données directement interprétées par le moteur de template.
  • Désactiver les fonctions critiques comme eval ou system dans le contexte du moteur.
  • Utiliser des environnements sécurisés (sandbox) pour réduire l’impact potentiel d’une exploitation.
This post is licensed under CC BY 4.0 by the author.