GithubHelp home page GithubHelp logo

lab-sql-injections's Introduction

Lab-SQL-Injections

C'est quoi les injections SQL ?

Les injections SQL sont un groupe de méthodes d'exploitation de faille de sécurité d'une application communiquant avec une base de données SQL.

Ils permettent entre autres à un utilisateur malveillant d'interagir avec les requêtes envoyées par cette application.

Cette interaction survient la plupart du temps par l'entrée de morceaus de requêtes dans les divers champs de l'application. Une application vulnérable exécutera la requête compomise causant des dommages irréversibles.

L'individu malveillant pourra entre autre :

  • Extraire des données utilisateur (noms, adresses, numeros de cartes de crédit)
  • Contourner l'authentification (Se connecter sur les comptes d'autres utilisateurs voir de l'administrateur)
  • Modifier ou Supprimer des tables , voir l'entiereté de la base de donnée.

Exemple

Considérons ce site vulnérable fourni par IBM comme un exemple.

altaro_login_page

les variables Username et Password contienent les entrés de lutilisateur:
UserName = getRequestString("azerty");
Password = getRequestString("1234");
Le mot de passe est généralement hashé par mesure de sécurité.

La requête derriere est telle:

SELECT id FROM Users WHERE name = ' azerty ' AND password = ' Hashed(1234)';

Si le UserName existe et que le Password lui correspond , un id est renvoyé, le compte existe , sinon les entrées sont érronnés.


Un individu malveillant Pourrai entré dans les champs du UserName un or payload

hecker_or_payload

Et la requête envoyée a la base de donnée sera donc :

SELECT id FROM Users WHERE name = ' admin' or '1' = '1 ' AND password = ' Hashed(Password)';

L'utilisateur sera connecté sur le compte de l'admin s'il existe et si '1' = '1' , meme si le Password est erroné.

Drawing

Demo

Voici une démo d'une injection SQL avec différents types de payloads

Watch the video

Comment s'en premunir ?

imageedit_0_4430024721

Les attaques du type Injection quoiqu'étant l'une des failles de sécurité web les plus connues ont été classée troisième en 2021 par L' Open Web Application Security Project .

94 % des applications ont été testées pour une forme d'injection avec un taux d'incidence maximal de 19 %, un taux d'incidence moyen de 3 % et 274 000 occurrences.

L'une des meilleurs options permettant d'éviter les attaques par injection SQL, quelle que soit la base de données que vous utilisez, est de séparer les les variables entrées par l'utilisteur de la syntaxe de notre requête SQL, afin que les variables restent des variables et ne soient jamais interprétées comme des commandes par l'analyseur SQL.

Faire transiter les requêtes par des API saines comme :

Exemple de requête avec PDO

PDO_shot_avoid_sqli

Expliquation

L'instruction SQL que vous transmettez à prepare est analysée et compilée par le serveur de base de données. En spécifiant des paramètres (comme le ? ci dessus), vous indiquez au moteur de base de données où vous souhaitez filtrer.

Ensuite, lorsque vous appelez execute, l'instruction préparée est combinée avec les valeurs de paramètre que vous spécifiez.

L'avantage avec cette technique est que les valeurs des paramètres sont combinées avec la requête compilée( Ce qui se fait au moment ou vous appellez prepare), et non avec les chaines de charactere la constituant.

L'injection SQL fonctionnant en incitant le script à inclure des chaînes malveillantes lorsqu'il crée la requête SQL à envoyer à la base de données, en envoyant le SQL réel séparément des paramètres, tous les paramètres que vous envoyez lors de l'utilisation d'une instruction préparée seront simplement traités comme des chaînes de charactere (bien que le moteur de base de données puisse effectuer une certaine optimisation afin que les paramètres puissent également se retrouver sous forme de nombres).

**or payload sur une requêtes avec PDO

login_page_forum

Un or payload , un comment payload ou n'importe quelle autre syntaxe du type Injection SQL entrée dans les champs d'une page de connexion utilisant des requêtes via PDO sera infructueuse.

test_sqli_inputs_shot

response_sqli_test

L' OWASP fournit plusieurs techniques permettant d'éviter les injections SQL et toutes sortes d'attaques du type Injection et de sécuriser vos applications.

Notes et références:

lab-sql-injections's People

Contributors

overlrd avatar

Stargazers

 avatar  avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.