Comment faire une injection SQL

Qu'est-ce que l'injection SQL (SQLi) ?

L'injection SQL est l'un des mécanismes d'attaque Web les plus courants utilisés par les attaquants pour voler des enregistrements et des enregistrements sensibles d'une plate-forme d'entreprise ou de médias sociaux. Alors que SQL Injection peut perdre toutes les informations d'une application qui utilise une base de données SQL, il est le plus souvent utilisé pour attaquer les sites Web. L'injection SQL est une technique d'injection de code que les pirates peuvent utiliser pour insérer des instructions SQL malveillantes dans des requêtes d'entrée à exécuter via la base de données SQL sous-jacente. Cette méthode est rendue possible en raison d'un codage incorrect des packages Web inclinés. L'injection SQL augmente en raison du fait que l'accès aux champs de saisie mis à la disposition de l'utilisateur saisit tous les mauvais types d'instructions SQL à parcourir et insère directement les requêtes dans la base de données.

Différents types d'injections

  • Modifiez la requête SQL et récupérez des informations supplémentaires de la base de données, nous pouvons dire cela en récupérant les données cachées des tables.
  • Interférez avec la logique métier et modifiez la requête pour changer la logique de l'application.
  • Obtenez des données de différentes tables dans la base de données et attaquez-les, c'est ce qu'on appelle les attaques UNION.
  • Examen de la base de données, dans laquelle vous pouvez extraire des informations sur la version et la structure de la base de données.

Obtenir des données cachées

Tapons cette URL dans votre navigateur et récupérons les catégories de bonus dans le tableau :

https://insecure-website.com/products?category=Bonus

Cela amène l'application à créer une question SQL pour récupérer des informations sur la marchandise concernée à partir de la base de données comme ceci :

CHOISIR * DE marchandise catégorie = 'Bonus' ET libéré = 1

Cette requête SQL demande à la base de données de renvoyer :

  • toutes les infos (*)
  • Depuis le bureau des produits
  • Où la catégorie est Bonus
  • Et libéré est 1

Le logiciel ne met en place aucune défense contre les attaques par injection SQL, donc un attaquant peut monter un assaut comme :

https://insecure-website.com/products?category=Bonus’ – –

Le résultat de la requête ci-dessus est :

SELECT * FROM produits WHERE catégorie = 'Bonus'–' AND publié = 1

L'élément clé ici est que la série à double tiret - est un indicateur de remarque en SQL, et signifie que le reste de la question est interprété comme un commentaire. Cela supprime avec succès le reste de la requête, de sorte qu'elle n'inclut plus ET lancé = 1. De cette façon, tous les produits sont affichés, tels que les produits inédits.

Une autre méthode d'injection SQL :

https://insecure-website.com/products?category=Bonus’+OR+1=1–

Le résultat:

SELECT * FROM produits WHERE catégorie = 'Bonus' OR 1=1–' AND publié = 1

En utilisant la requête ci-dessus, vous pouvez facilement attaquer la base de données.

Modifier la logique d'application

Ignorez le compte de connexion à l'aide de la requête ci-dessous :

CHOISIR * DE utilisateurs nom d'utilisateur = 'john' ET mot de passe = 'johnwilliam'

Journal de l'attaquant avec le nom d'utilisateur sans aucun mot de passe, dans la requête SQL, utilisez - - mot de passe à double tiret et commentez-le dans la clause where. Par exemple, envoyez une requête à l'administrateur du nom d'utilisateur et un champ de mot de passe vide. La requête est :

SELECT * FROM utilisateurs WHERE username = 'administrator' – – ' AND password =

Il existe également de nombreuses méthodes d'injection SQL.

Comment faire une injection SQL dans la page de connexion

Un code PHP simple pour l'injection SQL dans la page de connexion est donné ci-dessous :

$uname = $_POST [ 'uname' ] ;

$mot de passe = $_POST [ ‘ mot de passe ‘ ] ;

$query = ' sélectionnez le nom d'utilisateur, passez des utilisateurs où nom d'utilisateur = ' $uname ' et mot de passe = ' $passwrd

$résultat = mysql_query ( $query ) ;

$lignes = mysql_fetch_array ( $résultat ) ;

Si ( $lignes )

{

echo ‘Vous êtes connecté avec succès’ ;
créer_session( ) ;

}

autre {

echo ' Meilleure chance la prochaine fois ' ;
}