-3
votes

Comment rendre ma page de connexion vulnérable à l'injection SQL?

bonjour im workin sur un projet et j'ai besoin de faire cette page de connexion PHP vulnérable SQLI .. j'ai essayé autant que je peux pour supprimer les fonctions qui échappent aux caractères spéciaux Mais quand j'essaie d'injecter xxx

rien ne se produit ... login.php: xxx


4 commentaires

Première question: pourquoi es-tu même prêt à faire ça?


@Aaronjonk pourrait être d'apprendre comment les attaques d'injection SQL fonctionnent?


rien ne se produit sonne comme une erreur fatale. Quel est le code d'état de la page? Avez-vous vérifié votre journal d'erreur?


@Aaronjonk Préparation d'un laboratoire vulnérable


3 Réponses :


1
votes

Ceci ne peut pas fonctionner car, si vous avez de nombreux enregistrements d'utilisateur, le compteur $ sera plus que 1 mais vous vérifiez Seul un seul enregistrement à sortir: xxx

peut essayer de changer la condition à quelque chose comme: xxx

alors la condition ci-dessus sera alors la condition ci-dessus Seulement filtrer les utilisateurs non existants et ne vérifie que un seul utilisateur à renvoyer.


0 commentaires

1
votes

Si vous injecte un tel SQL dans le champ Mot de passe, votre requête échouera.

avec 'ou' 1 '=' 1 ' p>

Votre requête deviendra : P>

SELECT id FROM users WHERE username = '$username' and password = '' or '1' = '1''
--     Syntax error a single quote is in excess --------------------------------^


5 commentaires

Mais cela ne fonctionnera toujours pas en raison de la compté pour être un droit?


@PraveenkumarpurushOTOTOTOTOTOTOTOTOTHAMAN, mais la limite 1 et la modification du compteur $ == 1 était déjà mentionnée dans d'autres réponses, je ne voulais pas voler autres solutions


Mais limite 1 n'est-ce pas dans la question ou le droit de l'opération?


Eh bien, il peut changer soit le code, soit l'injection (il doit modifier l'injection en raison de l'erreur de syntaxe qu'elle fournira)


@CID Cela a fonctionné sans changer le code ni l'injection, j'ai juste oublié de supprimer la citation comme vous l'avez mentionné



2
votes

mais quand j'essaie d'injecter 'ou' 1 '=' 1 '

Essayez ceci xxx

vous pouvez même utiliser / ajouter décalage pour choisir l'utilisateur que vous voulez (par ligne). < Pré> xxx

puis (en raison de la limite 1) xxx

est vrai. Le - est le début d'un commentaire en ligne dans SQL, de sorte que le reste de la requête est ignoré. Qui a des avantages évidents que nous pouvons raccourcir ou simplement la requête. Les moins de conditions meilleurs et nous voulons avoir accès à la fin de la requête pour la limite et le décalage.

Ceci illustre également la folie de la recherche du mot de passe. Si cela a été vérifié dans le code, cela ne vous connecterait pas. Mais parce que ce n'est pas le cas, ce sera des attaques de chronométrage et de ce que de côté.


6 commentaires

Cela aurait dû être la réponse acceptée, qui est plus complète que nos réponses


@CID - merci. C'est probablement la forme la plus courante que cette attaque prendrait.


Lorsque vous utilisez la clause LIMIT , vous devez également ajouter dans la clause par identifiant pour obtenir des résultats déterministes en supposant que la colonne ID existe et est une clé primaire qu'elle fait dans 9 de la 10 cas, sinon vous pouvez essayer le déprécié commander par 1 SQL Standard Syntaxe, les gens ont tendance à placer la colonne clé principale d'abord dans la table.


Je voudrais simplement parcourir à travers eux, trouver des comptes intéressants, puis modifier le mot de passe et le courrier électronique. etc... :-)


Je sais @Artisticphoenix je veux dire limite sans commander par est non déterministe, vous pouvez donc manquer de comptes intéressants lorsque MySQL donne les mêmes enregistrements en raison de (possible) au hasard. SQL Tables et Resultats sont par définition SQL sans commande sans utiliser commander par clause


Juste, mais si vous les introduisez tout à l'aide d'un décalage, je ne vois pas comment il serait manqué. Votre juste ne garantit pas que la commande cette fois sera la même prochaine fois.