logo http://www.root-me.org logo http://www.root-me.orglogo http://www.root-me.org Créer un compte | Connectez vous |  
Accueil  -> Documentation  -> Hacking
Flux Twitter

Vos Informations

IP : 38.107.179.224
Location :
Langue : en-us
Navigateur : CCBot/1.0 (+http://www.commoncrawl.org/bot.html)


Utilisateurs

6 visiteurs en ce moment

Derniers Inscrits :
 tig3r   dogo19   novice2005   pwet99   Hughe   Auranium   Belebostre 
Statistiques
statistiques -Membres : 2587
-Articles : 483
-Messages : 397
-Chat Box : 522
-Challengeurs : 1742

Chat Box
g0uZ    7 mai 2012 19:36:39
Atlantis    7 mai 2012 17:02:42
les wargames fonctionnent bien à voir.

zouzou    7 mai 2012 15:49:21
yo, ca marche wargame pour vous ?

kaizo    4 mai 2012 16:32:07
thx Atlantis @ +

sidi    3 mai 2012 20:37:41
<script>alert("sidi")</script>

sidi    3 mai 2012 20:34:38
9

sidi    3 mai 2012 20:34:31
9

shining    2 mai 2012 01:33:33
J’ai du mal ..

shining    2 mai 2012 01:22:14
Ouai ça bug ..

shining    2 mai 2012 01:18:58
Ya un problème ???

shining    2 mai 2012 01:16:23
:L

shining    2 mai 2012 01:14:33
hum

shining    2 mai 2012 01:13:37
ok

shining    2 mai 2012 01:11:03
Ok

Valix    1er mai 2012 15:55:03
Salut

Slayer    1er mai 2012 15:42:53
My friend sent me here, wheres that book to download to learn about Ip addresses and all that ??:-/

koma    1er mai 2012 12:28:45
DevilDog : oui le chall a disparu, il reapparaitra peut etre un jour ;)

Slayer    30 avril 2012 22:45:26
My friend sent me here he said there is some type of book to read on Ip’s and stuff like that ??

kaizo    30 avril 2012 15:45:49
oups désolé pour le triple post :’-)

kaizo    30 avril 2012 15:44:51
c’est possible de rebooter le ctf all the day ? il y a une parse erreur sur le fichier sudoers qui empêche de valider , merci

kaizo    30 avril 2012 15:44:46
c’est possible de rebooter le ctf all the day ? il y a une parse erreur sur le fichier sudoers qui empêche de valider , merci

kaizo    30 avril 2012 15:44:21
c’est possible de rebooter le ctf all the day, il y a une parse erreur sur le fichier sudoers qui empeche de valider , merci

DevilDog    30 avril 2012 11:14:10
C’est moi ou le challenge SHA 512 a disparu de la section cyrptanalyse ?

Z$nith    25 avril 2012 16:14:41
Thx, je suis passé par un autre WebBrowser ^^

g0uZ    25 avril 2012 15:22:29
@Z$nith : enlève tes moufles :-P Plus sérieusement : http://kb.mozillazine.org/Unable_to­... Ca vient de ton install.


Vous devez être loggué pour pouvoir poster des messages
HG

dimanche 22 octobre 2006
par g0uZ
Injection SQL   Version imprimable de cet article envoyer l'article par mail Enregistrer au format PDF
Exploitation de failles de programmation dans les scripts d’authentification Web

Cet article ne traite pas d’une nouvelle vulnérabilité, mais essaye d’expliquer les differents problémes rencontrés dans les scripts server-side (php, asp etc...) et les moyens de les résoudre. Le probléme n’est pas lié directement au serveur SQL mais plutot aux requettes SQL qui peuvent étre passées au serveur par le biais des scripts qui manquent de filtrage au niveau de l’entrée utilisateur. Sans un tel filtrage, il est possible dans certains cas d’outre passer certains mécanismes d’authentification basé sur une requette SQL pour valider un couple login/password.


Quand un tel code est utilisé dans un script de login :

    $login = Request.Form("login")
    $password = Request.Form("password")
    SELECT field FROM database WHERE Login=$login AND Password=$password

il est possible de "valider" un login sans savoir le nom d’utilisateur et le mot de passe.

Pour que ce soit possible il est nécessaire d’avoir certaines conditions :

1. La requête SQL doit ressembler à celle-ci :

 
    SELECT filed FROM DATABASE WHERE Login=$login AND Password=$Password

où les variables $login et $password résultent des champs du formulaire d’authentification que l’utilisateur remplit pour s’authentifier (page html, php, asp, cgi...)

2. Le script ne verifie pas la présence pour ces deux variables de mauvais caractères tels que : ’ ;)"#|

3. Une fois le script validé aucune vérification de mauvais caractères n’est faite sur ces deux variables.

Si ces 3 conditions sont réunies, il est possible d’outre passer le mécanisme d’authentification.

Forcer la modification de la requête SQL d’authentification Examinons la requête SQL :

SELECT filed FROM DATABASE WHERE Login=$login AND Password=$Password

où les variables $login et $password résultent des champs du formulaire d’authentification que l’utilisateur remplit pour s’authentifier.

SELECT filed FROM DATABASE WHERE Login='' AND Password=''

Quand l’utilisateur essai de s’authentifier en entrant aucun login/password dans le formulaire, les variables $login et $password prendrons comme valeur " Ceci limite la vulnérabilité des chaines qui se finissent par ’ (Pour que la vulnérabilité fonctionne, il faut une requête SQL valide, sans erreur).

Une requête SQL normale issue d’une authentification d’un utilisateur normal ressemble à ceci :

    SELECT FIELD FROM DATABASE WHERE Login='Jon' AND Password='1234'

ou le login est jon et le mot de passe est 1234

Si vous essayez maintenant en mettant le caractère ’ à la place du login, le serveur SQL va retourner " SQL bad syntax error" puisque que la requête est incompléte

SELECT FIELD FROM DATABASE WHERE login="' AND Password="

Nous devons faire attention à fermer correctement la requette SQL (rajouter ’ pour faire une requête complète) pour créer une requête valide.

Par exmeple :

Si nous remplaçons la valeur de $login par ’or"=’ et la valeur de $password par ’or"=’ nous aurons la requête SQL suivante :

    SELECT FIELD FROM DATABASE WHERE Login='' OR ''='' AND Password= '' OR ''=''
NOTE : 'or"=" retourne toujours VRAI

Que ce passe t’il quand on soumet une telle requête SQL qui retourne toujours VRAI ? La requête SQL va vérifier dans la base de donnée si nous avons rentré le bon login et le bon mot de passe. La requête SQL va retourner VRAI car la vérification du "or" logique va toujours retourner VRAI ! Ce qui fait croire au script d’authentification que nous avons rentré le bon login et le mot de passe correspondant. De plus, le script d’authentification, si aucune vérification supplémentaire n’est opérée, nous donnera l’accès sous l’identité du premier utilisateur inscrit dans la base de données, le plus souvent, l’administrateur.

Forcer partiellement la modification de la requête SQL d’authentification Comme nous l’avons vu ci-dessus, il y a plusieurs moyens de contourner l’authentification si les conditions son réunies. Il est aussi possible de modifier partiellement la requête SQL ce qui nous permettrait une attaque plus ciblée (login avec un utilisateur connu au lieu de se logger avec le premier utilisateur de la base de données...).

Il est possible de gagner les droits d’accès d’un utilisateur si l’on connait son nom d’utilisateur.

Par exemple :

Si l’on envoie toujours par le biais du formulaire la valeur jonn à $login et ’or"=" à $password, alors nous serons capable de nous logger sous l’identité de jonn et nous profiterons de ses droits.

Forcer le serveur SQL à ignorer une partie de la requête SQL Il est possible de force le serveur à ignorer une partie de la requette SQL en incluant dans la requête SQL envoyée /* et /* ( balises commentaire)

Par exemple :

Si l’on envoie toujours par le biais du formulaire la valeur ’/* à $login et */ OR "=’ à $password la requête SQL sera alors :

SELECT field FROM database WHERE Login = ’’/*’ AND Password = ’*/ OR ’’ = ’’

Une fois parsée par le serveur SQL, la requête SQL deviendra :

      SELECT FROM DATABASE WHERE Login = '' OR '' = ''

Cette requête renvoie toujours VRAI !

Voici un autre exemple, dans certains scripts, l’adresse email est utilisée et vérifiée comme Login. Il est possible de créer un login valide, qui passera sans problème la requête SQL et la vérification du format d’adresse email du script.

Si l’on envoie la valeur ’/*mi@mail.com à la variable $login et */ or "=’ à la variable $password, le script va parser la variable $login et vérifier si c’est bien du format EMAIL *@*.*, et le serveur SQL va parser la requête en enlevant ce qu’il y a entre les commentaire /* */ nous permettant de passer l’authentification comme nous l’avons vu plus haut.

Solution : Il existe plusieurs solutions pour résoudre ce problème. Une solution serait d’utiliser du JavaScript pour valider les caractères rentrés par l’utilisateur, mais cela peut être aussi contourné en construisant son propre formulaire d’envoi de données au script d’authentification.

Exemple de JavaScript :

<SCRIPT LANGUAGE="JavaScript">
function checkstring(text){
         pat=/^[A-Za-z0-9]{6,10}$/;
         result=text.match(pat);
         return TRUE;
}
function Send(){
         if (checkstring(txtName) && checkstring(txtPassword)){
             login.submit();
         }
}
</SCRIPT>

Voici un autre exemple en PHP :

Avant (aucune vérification pour les charactéres) :

  if ($luser!="" && $lpassword!="") {
  $login_rs = @mysql_query("SELECT * FROM cro_user WHERE
  user_login='$luser' AND user_password='$lpassword' AND user_status!='0'
  LIMIT 0,1"
,$db);
  if (@mysql_num_rows($login_rs)==0) {
         echo "LOGGED ON";
         }
  }

Pour outre passer ce mécanisme vous pouvez entre comme login et mot de passe cette valeur : ’|

Voici comment corriger ce probléme :

Aprés (toutes les vérifications sont faites) :

  $luser = trim(htmlspecialchars(addslashes($luser)));
  $lpassword = trim(htmlspecialchars(addslashes($lpassword)));
 
  if ($luser!="" && $lpassword!="") {
  $login_rs = @mysql_query("SELECT * FROM cro_user WHERE
  user_login='$luser' AND user_password='$lpassword' AND user_status!='0'
  LIMIT 0,1"
,$db);
  if (@mysql_num_rows($login_rs)==0) {
         echo "LOGGED ON";
         }
  }


-Post Scriptum :

Document original par Memonix : http://www.securiteam.com/securityn... paru le 13/08/2001 Traduit le 13/08/2001 par Cabezon Aurélien http://www.iSecureLabs.com




BG BD
HGHG

  Documentation publiés dans cette rubrique

0 | 10

BG BD