0% ont trouvé ce document utile (0 vote)
2 vues4 pages

Comprendre l'injection SQL et ses risques

L'injection SQL est une cyberattaque permettant à un hacker d'injecter du code dans une requête SQL pour accéder à des bases de données sensibles. Les conséquences incluent la divulgation d'informations confidentielles, l'élévation de privilèges et l'altération des données. Le document présente des exercices pratiques pour tester et corriger des vulnérabilités d'injection SQL dans un code PHP.

Transféré par

e.soulaimana
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
2 vues4 pages

Comprendre l'injection SQL et ses risques

L'injection SQL est une cyberattaque permettant à un hacker d'injecter du code dans une requête SQL pour accéder à des bases de données sensibles. Les conséquences incluent la divulgation d'informations confidentielles, l'élévation de privilèges et l'altération des données. Le document présente des exercices pratiques pour tester et corriger des vulnérabilités d'injection SQL dans un code PHP.

Transféré par

e.soulaimana
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

TP3

SQL injection

Qu’est-ce qu’une injection SQL ?

L’injection SQL est une cyberattaque qui consiste à injecter dans une requête SQL des
morceaux de codes non filtrés. Le hacker peut modifier la requête afin d’accéder à la base de
données. (ORACLE).

Quelles sont les conséquences d'une injection SQL ?

La divulgation d'information confidentielle, étant donné que les bases de données contiennent
en règle générale des données à caractères sensibles (empreinte des mots de passe et vecteur
de salage, email, informations bancaires,etc).

La possibilité d'une authentification fallacieuse. Car si une mauvaise commande peut être
exécutée à la place de la commande attendue, rien n'empêche une élévation de privilège mal
attentionné.

La modification des niveaux d'autorisations à l'accès aux informations. Si les droits sur une
application sont stockés dans la base de données et qu'une commande d'altération est
exécutée, il est parfaitement envisageable de les remplacer en exploitant avec succès une
vulnérabilité.

Altération de l'intégrité des données. Il est parfaitement possible d'apporter des modifications
ou même de supprimer des informations avec une attaque par injection SQL.

Dans ce tp nous allons tester, quelques exemples.

Exercice 1 :
On considère le code php de l’annexe.

Faudra donc créer une base de données avec une table etudiant ( prenon, mail, age, mdp) ;

Et utiliser le code php ci- dessous après l’avoir adapté à votre situation.

On ne s’intéressera pas à la saisie des informations, pour le moment. Les valeurs seront saisies
directement dans la base par l’intermédiaire d’une requête insert.

Vous devez, normalement, obtenir quelque chose de ce genre :


Nous allons faire des recherches dans la base, en utilisant les prénoms.

Dans le champ prénom saisissez les codes suivants et notez les résultats.

1) Utiliser un prénom qui existe dans la base pour la mise au point.


2) ' (un guillemet simple)
3) ' OR 'x' = 'x '
4) ' OR 1=1 -- (attention à l’espace à la fn)
5)rob' -- (attention à l’espace à la fn)
6) ' OR 1=1 LIMIT 1 -- (attention à l’espace à la fn)

7) ' ; DROP TABLE etudiant ; -- (attention à l’espace à la fin)

Exercice 2 :
Corrigez le code pour éviter ce genre de situation.
Exercice3 :
Trouvez les différends type d’injection sql , connus.
Annexe :

<!DOCTYPE html>
<html>
<head>
<title>test injection </title>
<meta charset="utf-8">
</head>
<body>
<h1>Formulaire HTML</h1>

<form action="[Link]" method="post">


<div >
<label for="prenom">Prénom : </label>
<input type="text" id="prenom" name="prenom" style="width:30em">
</div>
<div >
<label for="mail">Email : </label>
<input type="email" id="mail" name="mail">
</div>
<div >
<label for="age">Age : </label>
<input type="number" id="age" name="age" min="12" max="99">
</div>

<div >
<label for="pwd">Paswword : </label>
<input type="text" id="pwd" name="pwd" min="12" max="99">
</div>

<div id="submit">
<input type="submit" value="Envoyer">
</div>
</form>
<?php
$serveur = "……..";
$dbname = "…….";
$user = "……..";
$pass = "……….";

$prenom = $_POST["prenom"];
$mail = $_POST["mail"];
$age = $_POST["age"];
$pwd = $_POST["pwd"]

try{

//On se connecte à la BDD

$dbco = new PDO("mysql:host=$serveur;dbname=$dbname",$user,$pass);

$dbco->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

//On insère les données reçues si les champs sont remplis


/* if(!empty($prenom) && !empty($mail) && !empty($age) && !empty($pwd)){
$sth = $dbco->prepare("
INSERT INTO etu(prenom, mail, age,,mdp)
VALUES(:prenom, :mail, :age)");
$sth->bindParam(':prenom',$prenom);
$sth->bindParam(':mail',$mail);
$sth->bindParam(':age',$age);
$sth->execute();
}*/
echo $prenom;
//On récupère les infos de la table
$query="SELECT * FROM form WHERE prenom='$prenom'";
$sth=$dbco->query($query);
//On affiche les infos de la table
$resultat = $sth->fetchAll(PDO::FETCH_ASSOC);
$keys = array_keys($resultat);
for($i = 0; $i < count($resultat); $i++){
$n = $i + 1;
echo 'Etudiant n°' .$n. ' :<br>';
foreach($resultat[$keys[$i]] as $key => $value){
echo $key. ' : ' .$value. '<br>';
}
echo '<br>';
}
}
catch(PDOException $e){
echo 'Impossible de traiter les données. Erreur : '.$e->getMessage();
}
?>
</body>
</html>

Vous aimerez peut-être aussi