La combinaison de tous les éléments suivants Php "Caractéristiques" à la fois.
- Register Globals
- Les Variables
- L'Inclusion de fichiers distants et le code via include("http:// ... ");
-
Vraiment Horrible Tableau/les noms de Variables ( Littérale exemple ):
foreach( $variablesarry as $variablearry ){
include( $$variablearry );
}
( J'ai littéralement passé une heure à essayer de comprendre comment cela a fonctionné avant, j'ai réalisé qu'ils wern pas la même variable )
Inclure 50 fichiers, qui comprennent chacune 50 fichiers, et des choses est effectuée de façon linéaire/de la procédure dans tous les 50 fichiers dans conditionnelle et de façon imprévisible.
Pour ceux qui ne connaissent pas les variables:
$x = "hello";
$$x = "world";
print $hello # "world" ;
Considérons maintenant $x contient une valeur à partir de votre URL ( register globals la magie ), de sorte que nulle part dans votre code est-il évident que ce qui variable votre travail avec parce que ses déterminée par l'url.
Maintenant, considérons ce qui se passe lorsque le contenu de cette variable peut être une url spécifiée par les sites web de l'utilisateur.
Oui, cela peut ne pas faire sens pour vous, mais il se crée une variable nommée cette url, c'est à dire:
$
,
sauf qu'il ne peut pas être directement accessibles, vous avez de l'utiliser via la double $ technique ci-dessus.
En outre, lorsque son possible pour l'utilisateur de spécifier une variable dans l'URL qui indique le fichier à inclure, il y a des mauvais tours comme
http://google.com
et si cette variable tourne en
et 'evilcode.php' imprime son code en clair, et Php est mal sécurisé, php va gambader tout off, télécharger evilcode.php et de l'exécuter en tant qu'utilisateur du serveur web.
Le serveur web va lui donner toutes ses autorisations, etc, permettant shell appels, le téléchargement des fichiers binaires arbitrairement et en cours d'exécution, etc etc, jusqu'à ce que finalement vous vous demandez pourquoi vous avez une boîte de l'espace disque disponible, et un dir a 8 GO de films piratés avec l'italien doublage, partagé sur IRC via un bot.
Je suis juste heureux que j'ai découvert cette atrocité avant l'exécution du script à l'attaque décidé de faire quelque chose de vraiment dangereux, comme la récolte des informations extrêmement confidentielles à partir de la plus ou moins non garantie de base de données :|
( J'ai pu connaître de la dailywtf tous les jours pendant 6 mois avec ce code, je ne plaisante pas. C'est juste une honte, j'ai découvert le dailywtf après j'ai échappé à ce code )