# Description # Cette attaque est constitué d'un script qui ne valide pas correctement les entrées de l'utilisateur dans le paramètre de la page. Un utilisateur distant peut fournir une URL spécialement conçue pour passer du code arbitraire à une instruction eval (), qui se traduit par l'exécution de code. Note 1: Cette attaque va exécuter le code avec la même autorisation, comme le service Web cible, y compris les commandes du système d'exploitation. Note 2: injection Eval est très répandue dans les procédures de gestion / distribution qui pourraient vouloir invoquer un grand nombre de fonctions, ou de définir un grand nombre de variables. # Exemples # ## Exemple 1 ## Dans cet exemple, un attaquant peut contrôler tout ou partie d'une chaîne d'entrée qui est introduite dans un eval () appel de fonction $Myvar = "varname"; $X = $ _GET['arg']; eval ("\$myvar = \$x;"); L'argument de "eval" seront traitées comme du code PHP, des commandes supplémentaires peuvent être ajoutées. Par exemple, si "arg" est réglé sur "10; system(\" /bin/echo uh-oh\");", un code supplémentaire crée un processus qui exécute un programme sur le serveur, dans ce cas "/bin/echo ". ## Exemple 2 ## Ce qui suit est un exemple d' injection SQL https://www.owasp.org/index.php/SQL_Injection, Considérons une page web qui comporte deux champs pour permettre aux utilisateurs d'entrer un nom d'utilisateur et un mot de passe. Le code derrière la page va générer une requête SQL pour vérifier le mot de passe dans la liste des noms d'utilisateurs: SELECT UserList.Username FROM UserList WHERE UserList.Username = 'Nom d'utilisateur' AND UserList.Password = 'Mot de passe' Si cette requête retourne exactement une ligne, l'accès est accordé. Toutefois, si un utilisateur malintentionné entre un nom d'utilisateur valide et injecte un peu de code valide ("'OR 1 = 1") dans le champ Mot de passe, et bien la requête résultante ressemblera à ceci: SELECT UserList.Username FROM UserList WHERE UserList.Username = 'Nom d'utilisateur' ET UserList.Password = 'Mot de passe' OR '1 '= '1' Dans l'exemple ci-dessus, "Mot de passe" est supposé être blanc ou une chaîne de caractères inoffensifs. "1 = 1" sera toujours vrai et de nombreuses lignes sera retourné, ce qui permet l'accès.La virgule inversée finale sera ignoré par l'analyseur SQL. La technique peut être affinée pour permettre à plusieurs instructions de s'exécuter, ou même pour charger et exécuter des programmes externes. ## Exemple 3 ## Ceci est un exemple d'un fichier qui a été injecté. Pensez à ce programme PHP (ce qui inclut un fichier spécifié par demande):
Le développeur pense que seul le fichier blue.php ou red.php peut être chargé.Mais comme tout le monde peut facilement insérer des valeurs arbitraires dans la variable COLOR, il est possible d'injecter du code à partir de fichiers: *
<%
Server.Execute( "userlog.txt" )
%>
<%
Else
%>
<%
End If
%>
# Références #
* http://secunia.com/cve_reference/CVE-2006-2005/?show_result=1
* http://en.wikipedia.org/wiki/Code_injection