Comment utiliser 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
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
La charge utile finale est
X-Forwarded-For : {if var_dump(file_get_contents ('/flag')) }{/if}
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
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 :
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>
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; } }
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!

Outils d'IA chauds

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

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

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

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

Sujets chauds

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

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é

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

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

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.

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

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.

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
