Comment examiner un formulaire de connexion par injection SQL vulnérable en PHP

Résumé

Nous avons examiné un formulaire de connexion écrit en PHP et vulnérable à l'injection SQL. Nous avons comparé différentes versions du code et créé une charge utile d'injection SQL pour chaque cas.

Obtenir les notes du certificat OSCP

Premier examen de code

Comment consulter le formulaire de connexion PHP pour l'injection SQL - Codage sécurisé

Le code est un code php pour le formulaire de connexion. Comme nous pouvons le voir, le nom d'utilisateur de connexion et le mot de passe de connexion sont stockés dans deux variables. La valeur de chaque variable est prise en entrée par l'utilisateur via une requête HTTP POST.

Le problème ici est que tout ce que l'utilisateur saisit dans le formulaire de connexion, il est directement utilisé dans la requête SQL de la ligne suivante, puis exécuté dans le backend, permettant ainsi une saisie malveillante.

Exploitation

La capture d'écran suivante illustre comment nous avons injecté une charge utile SQL dans le formulaire de connexion

Comment consulter le formulaire de connexion PHP pour l'injection SQL - Codage sécurisé

Nous pouvons essayer différentes variantes de charge utile telles que

racine' ou 1=1##

' ou 1=1 — #

' ou 1–

Tant que les variables des champs de connexion ne sont pas utilisées avec des guillemets simples. Nous verrons des exemples de code où les variables sont citées. Dans ces cas, la charge utile de l’injection SQL serait différente.

La capture d'écran ci-dessous montre une exploitation réussie du formulaire de connexion.

Comment consulter le formulaire de connexion PHP pour l'injection SQL - Codage sécurisé

Deuxième examen de code

Dans la capture d'écran suivante, nous avons examiné un autre formulaire de connexion PHP vulnérable à SQL Injection. La différence est que les variables de connexion sont utilisées avec des guillemets simples dans la variable de requête.

Ainsi, notre charge utile SQL serait différente. Notre charge utile dans ce cas devrait commencer et se terminer par un guillemet pour fermer ceux utilisés dans la variable de requête.

Un exemple serait :

Comment consulter le formulaire de connexion PHP pour l'injection SQL - Codage sécurisé

ou ”='

'racine ou ”='

Examen du troisième code

Nous avons modifié le même code pour utiliser des parenthèses avec des guillemets simples dans la requête SQL.

Dans ce cas, notre charge utile SQL devra également commencer par un guillemet simple et des parenthèses.

') ou vrai–

Examen du Quatrième Code

Et si le code contenait les deux variables de connexion avec des parenthèses et des guillemets doubles.

Nos charges utiles SQL dans ce cas doivent fermer les parenthèses et les guillemets doubles

» ou vrai–

") ou vrai–

')) ou vrai–

Présentation vidéo complète

A propos de l'Auteur

Je crée des notes de cybersécurité, des notes de marketing numérique et des cours en ligne. Je fournis également des conseils en marketing numérique, y compris, mais sans s'y limiter, le référencement, les publicités Google et Meta et l'administration CRM.

Voir les Articles