web-dev-qa-db-fra.com

Trouvé 'OR 1 = 1/* sql injection dans ma base de données de newsletter

J'ai trouvé ce qui suit dans le champ "e-mail" de ma base de données d'abonnés à la newsletter: 'OR 1 = 1/*

Je sais que c'est une injection SQL, mais c'est tout. Je l'ai googlé un peu, mais je ne comprends toujours pas exactement ce que cela veut dire. Cela s'est produit début novembre et, à ma connaissance, nous n'avons eu aucune panne à cette époque. Est-ce que l'un de vous peut me dire ce que ce type essayait et faisait probablement? Y a-t-il un moyen de savoir s'il a réussi ce qu'il essayait de faire?

Je ne sais pratiquement rien à ce sujet et je suis inquiet. :(

16

'OR 1=1 est une tentative de réussir une requête, quoi qu'il arrive
Le /* est une tentative de démarrage d'un commentaire multiligne afin que le reste de la requête soit ignoré.

Un exemple serait 

SELECT userid 
FROM users 
WHERE username = ''OR 1=1/*' 
    AND password = ''
    AND domain = ''

Comme vous pouvez le voir si vous deviez renseigner le champ nom d'utilisateur sans ignorer le ', quelles que soient les informations d'identification transmises par l'utilisateur dans la requête, tous les identifiants du système susceptibles d'accorder l'accès à l'attaquant (éventuellement, administrateur si admin est votre premier utilisateur) . Vous remarquerez également que le reste de la requête serait commenté à cause du /*, y compris le ' réel.

Le fait que vous puissiez voir la valeur dans votre base de données signifie qu'elle a été échappée et que cette attaque en particulier n'a pas abouti. Cependant, vous devriez rechercher si d’autres tentatives ont été faites.

21
Joe

Il s’agissait probablement de sélectionner toutes les informations de votre tableau. Si vous utilisez ce type de requête (par exemple en PHP):

mysql_query("SELECT * FROM newsletter WHERE email = '$email'");

L'email 'OR 1 = 1/* donnera ce genre de requête:

mysql_query("SELECT * FROM newsletter WHERE email = '' OR 1=1/*");

Donc, il sélectionne toutes les lignes (car 1 = 1 est toujours vrai et le reste de la requête est 'commenté'). Mais ça n'a pas réussi

  • si les chaînes utilisées dans vos requêtes sont échappées
  • si vous n’affichez pas tous les résultats des requêtes sur une page ...
7
berty

La valeur spécifique dans votre base de données n'est pas ce sur quoi vous devriez vous concentrer. Ceci est probablement le résultat d'un attaquant fuzzing sur votre système pour savoir s'il est vulnérable à un ensemble d'attaques standard } au lieu d'une attaque ciblée exploitant une vulnérabilité connue.

Vous devez plutôt vous assurer que votre application est sécurisée contre ces types d'attaques. _ { OWASP est une bonne ressource pour cela }.

_ { Si vous utilisez des requêtes paramétrées pour accéder à la base de données }, alors vous êtes protégé contre l'injection de SQL, à moins que vous n'utilisiez également SQL dynamique dans le backend.

Si vous ne le faites pas, vous êtes vulnérable et vous devez le résoudre immédiatement.

En outre, vous devez envisager d'effectuer une sorte de validation des adresses électroniques.

5
Michael Fredrickson

Il est préférable que vous utilisiez le code de validation dans la saisie de l'utilisateur pour limiter l'utilisation de symboles et d'une partie du code dans votre formulaire de saisie. Si vous intégrez php dans du code html, votre code php doit être placé en haut pour être sûr qu'il ne soit pas ignoré en tant que commentaire si un pirate modifie la page et ajoute/* dans votre code html

1
Eyosias Sahlu