Table des matières
Description du problème
Utilisation Smarty SSTI
Confirmation de vulnérabilité
Utilisation générale
Tag {literal}
Méthode statique
Le code de vulnérabilité de la question
Maison Opération et maintenance Sécurité Comment utiliser Smarty SSTi

Comment utiliser Smarty SSTi

May 15, 2023 am 11:37 AM
smarty ssti

Description du problème

La question fournit une API pour lire les en-têtes XFF. Il y a des mots Build With Smarty au bas de la page. On peut déterminer qu'elle est écrite avec le moteur Smarty.

On peut essentiellement déterminer que le. la possibilité de SSTi existe sur cette page

Smarty SSTi怎么用

Changez l'en-tête xff de 127.0.0.1 à 127.0.0{1+2} et le résultat suivant apparaîtra

ssti ne fait aucun doute

Smarty SSTi怎么用

La charge utile finale est

X-Forwarded-For : {if var_dump(file_get_contents ('/flag')) }{/if}

Smarty SSTi怎么用

Utilisation Smarty SSTI

Smarty est développé sur la base de PHP. La méthode d'utilisation du SSTI de Smarty. est très différent du SSTI du flacon commun.

Confirmation de vulnérabilité

En général, vous pouvez voir le numéro de version smarty renvoyé en saisissant {$smarty.version}. La version Smarty de cette question est 3.1.30

Smarty SSTi怎么用

Utilisation générale

Smarty prend en charge l'utilisation de la balise {php}{/php} pour exécuter les instructions php qui y sont incluses. L'idée la plus courante est de tester d'abord la balise. . Mais en ce qui concerne ce sujet, l'utilisation de la balise {php}{/php} signalera une erreur :

Smarty SSTi怎么用

Le manuel officiel de Smarty3 a la description suivante :

Smarty a abandonné la balise {php} , et il est fortement déconseillé de l’utiliser. Dans Smarty 3.1, {php} n'est disponible que dans SmartyBC.

Cette question utilise la classe Smarty, nous ne pouvons donc trouver qu'un autre moyen.

Tag {literal}

Le manuel officiel décrit cette balise comme suit :

{literal} peut faire en sorte que les caractères d'une zone de modèle soient affichés tels quels. Ceci est souvent utilisé pour protéger les feuilles de style Javascript ou CSS de la page contre une analyse incorrecte en raison des délimiteurs Smarty.

Ensuite, pour l'environnement php5, nous pouvons utiliser

<script language="php">phpinfo();</script>
Copier après la connexion

pour implémenter l'exécution de code PHP, mais l'environnement de question de cette question est PHP7, donc cette méthode n'est pas valide.

Méthode statique

Obtenir la classe Smarty via self puis appeler sa méthode statique pour lire et écrire des fichiers est adopté par de nombreux articles sur Internet.

Le code de la méthode getStreamVariable de la classe Smarty est le suivant :

public function getStreamVariable($variable)
{
       $_result = '';
       $fp = fopen($variable, 'r+');
       if ($fp) {
           while (!feof($fp) && ($current_line = fgets($fp)) !== false) {
               $_result .= $current_line;
          }
           fclose($fp);
           return $_result;
      }
       $smarty = isset($this->smarty) ? $this->smarty : $this;
       if ($smarty->error_unassigned) {
           throw new SmartyException('Undefined stream variable "' . $variable . '"');
      } else {
           return null;
      }
  }
Copier après la connexion

Vous pouvez voir que cette méthode peut lire un fichier et renvoyer son contenu, on peut donc utiliser self pour récupérer l'objet Smarty et appeler cette méthode The. les charges utiles données dans de nombreux articles sont Le formulaire est : {self::getStreamVariable("file:///etc/passwd")}. Cependant, l'utilisation de cette charge utile déclenchera l'erreur suivante :

Erreur fatale : Uncaught --> Compilateur Smarty : Erreur de syntaxe dans le modèle "string :IP actuelle :{ self: :getStreamVariable('file:///etc/passwd')}" La classe statique 'self' n'est pas définie ou n'est pas autorisée par le paramètre de sécurité <-- lancée dans /var/www/html/smarty/libs/sysplugins/ smarty_internal_templatecompilerbase.phpon line 12

On constate que la méthode d'utilisation SSTI de cette ancienne version de Smarty n'est pas applicable à la nouvelle version de Smarty. De plus, cette méthode statique a été officiellement supprimée dans la version 3.1.30 de Smarty. La méthode writeFile de la classe Smarty_Internal_Write_File mentionnée dans ces articles pour écrire le shell ne peut pas être utilisée pour la même raison.

Tag {if}

Voir cette description dans la documentation officielle :

Smarty's {if}条件判断和PHP的if 非常相似,只是增加了一些特性。每个{if}必须有一个配对的{/if}. 也可以使用{else}{elseif} Toutes les expressions et fonctions conditionnelles PHP peuvent être utilisées dans if, telles que ||, ou, &&, et, is_array (), etc. .

Puisque toutes les fonctions PHP peuvent être utilisées, pouvons-nous l'utiliser pour exécuter notre code ?

Comme mentionné au début

Le code de vulnérabilité de la question

est lu dans le fichier après getshell. Le code qui provoque le SSTI dans cette question est simplifié comme suit :

display("string:".$ip);
}

Vous pouvez voir que les chaînes sont utilisées ici à la place. de modèles intelligents, ce qui conduit à l'injection. Les balises Smarty sont directement analysées et exécutées, ce qui entraîne le SSTI.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Repo: Comment relancer ses coéquipiers
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment PHP empêche-t-il les attaques SSTI ? Comment PHP empêche-t-il les attaques SSTI ? Jun 30, 2023 am 09:36 AM

Comment utiliser PHP pour se défendre contre les attaques Server-SideTemplateInjection (SSTI) Introduction : Server-SideTemplateInjection (SSTI) est une vulnérabilité de sécurité courante des applications Web. Un attaquant peut amener le serveur à exécuter du code arbitraire en injectant du code malveillant dans le moteur de modèle. provoquant de graves risques pour la sécurité. Dans les applications PHP, SST peut être exposé lorsque les entrées de l'utilisateur ne sont pas gérées correctement

Comment utiliser PHP et Smarty pour réaliser un développement de séparation front-end et back-end Comment utiliser PHP et Smarty pour réaliser un développement de séparation front-end et back-end Jun 25, 2023 pm 01:46 PM

Dans le développement Web moderne, la séparation du front-end et du back-end est devenue une tendance très populaire, qui permet aux développeurs de mieux organiser les projets et d'améliorer l'efficacité du développement de projets. PHP et Smarty sont deux technologies très couramment utilisées, qui peuvent être utilisées pour réaliser un développement de séparation front-end et back-end. Cet article explique comment utiliser PHP et Smarty pour réaliser un développement de séparation front-end et back-end. Qu'est-ce que le développement de séparation front-end et back-end ? Dans le développement web traditionnel, le front-end est principalement responsable de la présentation de la page et de la logique d'interaction avec le back-end. Le backend est principalement responsable de l’activité

Une étude préliminaire sur Smarty, le moteur de template en PHP Une étude préliminaire sur Smarty, le moteur de template en PHP May 11, 2023 pm 05:15 PM

De nos jours, le développement de sites Web est indissociable d’un important moteur de modèles de composants. Un moteur de modèles fait référence à un outil qui combine des modèles de page et des données pour générer du code HTML avec un format spécifique. Dans divers frameworks de développement de sites Web, le moteur de modèles est un composant essentiel, car le moteur de modèles peut réduire considérablement la duplication de code et améliorer la dynamique de la page. L'un des moteurs de modèles les plus courants et les plus populaires est Smarty. Smarty est un DSL (DomainSpecif

Comment utiliser le moteur de modèles Smarty dans le développement PHP Comment utiliser le moteur de modèles Smarty dans le développement PHP Jun 27, 2023 pm 01:28 PM

En tant que développeur PHP, utiliser un moteur de modèles est un choix naturel. Smarty est un moteur de modèles populaire qui permet de séparer HTML/CSS/JavaScript du code PHP, permettant ainsi aux développeurs de mieux organiser et gérer les projets. Dans cet article, nous apprendrons comment utiliser le moteur de modèles Smarty lors du développement PHP. 1. Installer Smarty Avant, il faut installer Smarty. Dans cet article, nous utiliserons Composer pour installer

que sont thinkphp et smarty que sont thinkphp et smarty Jun 14, 2022 pm 05:56 PM

thinkphp est un framework PHP léger open source utilisé pour simplifier le développement d'applications d'entreprise et le développement d'applications WEB agiles ; grâce à ThinkPHP, les développeurs peuvent développer et déployer des applications plus facilement et plus rapidement. Smarty est un moteur de modèles PHP qui peut mieux aider les développeurs à séparer la logique du programme et l'affichage des pages (séparation de la logique métier et de la logique d'affichage), afin que les programmeurs puissent modifier le contenu logique du programme sans affecter la conception des pages du personnel front-end, et le personnel frontal peut re- La modification de la page n'affectera pas la logique du programme.

Comment utiliser PHP et le moteur de template Smarty Comment utiliser PHP et le moteur de template Smarty May 11, 2023 pm 03:33 PM

PHP est un puissant langage de script côté serveur qui peut être utilisé pour développer des applications Web. Au début du développement Web, les programmeurs utilisaient beaucoup de code HTML et JavaScript pour développer des applications Web. Cependant, cette approche est difficile à maintenir et à gérer car le code HTML et JavaScript peut devenir très complexe. Pour résoudre ce problème, le moteur de modèles Smarty a été créé. Smarty est un moteur de template développé basé sur PHP pour gérer et générer des W

Comment utiliser Smarty SSTi Comment utiliser Smarty SSTi May 15, 2023 am 11:37 AM

Description du titre : Le titre fournit une API pour lire les en-têtes XFF. Il y a le mot BuildWithSmarty en bas de la page. On peut déterminer qu'il est écrit avec le moteur Smarty. de SSTi. Remplacez l'en-tête xff de 127.0.0.1 par Le résultat suivant apparaît sur 127.0.0{1+2}. La charge utile finale est sans aucun doute X-Forwarded-For :{ifvar_dump(file_get_contents('/flag'))}{. /if}SmartySSTI utilise Smarty et est développé sur la base de PHP.

Comment utiliser Smarty avec CakePHP ? Comment utiliser Smarty avec CakePHP ? Jun 03, 2023 pm 03:10 PM

CakePHP est un framework PHP open source qui fournit des fonctionnalités et des outils riches pour accélérer le développement d'applications Web. L'une des fonctionnalités puissantes est le moteur de modèles. Par défaut, CakePHP utilise la syntaxe native de PHP pour le rendu des vues. Cependant, nous pouvons parfois souhaiter utiliser un autre moteur de modèles, tel que Smarty. Cet article explique comment utiliser Smarty dans CakePHP. 1. Qu'est-ce que Smarty ? Smarty est un framework PHP basé sur des modèles qui

See all articles