web-dev-qa-db-fra.com

Pourquoi les testeurs utilisent-ils souvent le guillemet simple (') pour tester l'injection SQL?

On a vu que les testeurs de sécurité saisissaient 'ou'; dans les points d'entrée de l'application pour tester l'injection SQL. Pourquoi ces caractères sont-ils utilisés?

17
Anandu M Das

Le personnage ' est utilisé car il s'agit du limiteur de caractères dans SQL. Avec ' vous délimitez les chaînes et vous pouvez donc tester si les chaînes sont correctement échappées dans l'application cible ou non. S'ils ne sont pas échappés directement, vous pouvez terminer toute chaîne fournie à l'application et ajouter un autre code SQL après cela.

Le personnage ; est utilisé pour terminer les instructions SQL. Si vous pouvez envoyer le caractère ; à une application et il n'est pas échappé en dehors d'une chaîne (voir ci-dessus), alors vous pouvez terminer toute instruction SQL et en créer une nouvelle qui laisse une faille de sécurité.

33
Uwe Plonus

Lire exemples Wikipedia d'injections SQL , en particulier la section "Caractères d'échappement mal filtrés".

Essentiellement, dans une injection, vous devez fournir une commande prête à l'emploi avec un paramètre. Vous créez ce paramètre de manière à ce qu'il contienne une commande intégrée, tout en respectant la syntaxe de SQL.

Puisqu'une commande est généralement SELECT FROM / UPDATE WHERE FOO='<your entry point>', vous pouvez utiliser nop'; Your own command here. La combinaison des deux donnera une séquence de deux commandes syntaxiquement valides qui seront toutes deux exécutées.

Pour éviter les injections SQL, assurez-vous que vous validez toutes les entrées non approuvées en vérifiant qu'elles appartiennent à un domaine en liste blanche des entrées acceptées (ici, généralement, échappez les caractères spéciaux), et assurez-vous également que vous déléguez composition de la commande à l'API DB que vous utilisez plutôt que de le faire vous-même: utilisez un appel différent pour fournir la commande et les paramètres afin que l'API sur laquelle vous comptez puisse effectuer des vérifications supplémentaires et vous éviter plus d'embarras!

3
Steve Dodier-Lazaro

Les testeurs essaient de trouver des bogues qu'ils peuvent obtenir le crédit pour la recherche; ils n'essaient pas de trouver le dernier problème restant.

Dans la plupart des cas, l'entrée est vérifiée avant d'être passée en SQL par une fonction bien écrite, ou un paramètre est utilisé. Par conséquent, il est probable que si même le type d'injection SQL le plus élémentaire est arrêté, tous les types d'injection SQL sont arrêtés pour le champ de formulaire donné.

Il suffit donc de mettre un dans chaque point d'entrée est un moyen rapide et facile d'obtenir de nombreux avantages pour le testeur et son employeur.

(De même, beaucoup de testeurs copient/collent un très long morceau de texte, même si aucun utilisateur ne le fera jamais, car c'est un moyen rapide de vérifier si l'application est codée pour faire face à des entrées trop longues.)

2
Ian Ringrose