2016-06-05 1 views
3

J'ai une application Web simple dans ASP avec base de données SQL Server back end. La page de connexion a un point d'injection et je peux contourner la connexion par l'habituel `'OU 1 = 1'. Maintenant, j'étais capable d'énumérer les colonnes dans la base de données en utilisant les instructions GROUP BY et HAVING. J'ai été en mesure d'énumérer l'information dans l'erreur qui m'a été lancée.Injection de base de données SQL Server

` ' or '1' = '1' GROUP BY tblCustomers.cust_id, tblCustomers.cust_name, tblCustomers.cust_password, tblCustomers.cust_account 
HAVING 1=1 -- ` 

Je suis dans la phase d'apprentissage et je trouve que le cust_id, cust_name, cust_password, cust_account sont les colonnes et tblCustomers est le nom de la table.

Je suis également capable d'utiliser des instructions AND avec la fonction de conversion pour énumérer certaines informations. La commande que j'ai utilisée est ' or '1' = '1' and 1 =convert(int,@@version)-- et encore une fois je suis en mesure d'obtenir l'information dans les erreurs.

Maintenant, comment puis-je vider les entrées dans la base de données pour connaître au moins le nom du client et le mot de passe? J'ai essayé les requêtes de pile séparées par un point-virgule mais après l'exécution de la première requête ie 'OU 1 = 1 je me connecte et je ne peux voir aucune sortie comme aucun autre paramètre, je ne peux pas le sortir ailleurs (il n'y a pas de paramètres juste une page blanche après je me connecte). UNION SELECT ne fonctionne pas car je ne peux pas deviner la première instruction SELECT et ses sorties. Toutes les fonctions qui peuvent m'aider à vider les noms des clients et mot de passe?

J'apprécierai vraiment toute aide avec ceci. Merci.

+0

Faites la première requête de disallow login. c'est-à-dire au lieu de "ou 1 = 1" écrivez "et 1 <1", alors l'instruction suivante. Si je comprends bien où pouvez-vous injecter, la connexion échouera et vous obtiendrez votre décharge (espérons, mais dépend du portail que vous jouez avec). EDIT: BTW pourquoi entrez-vous le combo utilisateur/pwd correct si vous voulez que la requête échoue? + vous pouvez un peu comprendre la requête de connexion, il devrait être très simple (nom d'utilisateur et mot de passe, peut-être?) –

+0

Merci Mark. J'ai essayé votre suggestion. et 1 <1; SELECT * from tblCustomers 'cette fois, la connexion échoue et cela me ramène à l'invite de connexion. C'est juste une application web d'apprentissage donc il n'y a absolument rien de plus une fois que l'on est capable de se connecter. – Tim

+0

J'ajoute ceci comme une réponse alors, merci si vous acceptez;) –

Répondre

0

Faire la 1ère requête interdire la connexion. c'est-à-dire au lieu de "ou 1 = 1" écrivez "et 1 < 1", alors l'instruction suivante. Si je comprends bien où pouvez-vous injecter, la connexion échouera et vous obtiendrez votre décharge (espérons, mais dépend du portail que vous jouez avec). EDIT: BTW pourquoi entrez-vous le combo utilisateur/pwd correct si vous voulez que la requête échoue? + vous pouvez en quelque sorte comprendre la requête de connexion, il devrait être très simple (nom d'utilisateur & mot de passe, peut-être?)