IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

salt crypt md5 fonction python


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2016
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2016
    Messages : 28
    Par défaut salt crypt md5 fonction python
    Bonjour,

    Je développe une application en python permettant de trouver des mot de passe crypté avec la méthode brutforce ( TP pour un cours de sécurité ).
    J'ai donc un fichier shadow contenant les comptes fournit pas le professeur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    root:$1$934b4a210c17493f68bf6bfe74bff77a:16749:0:99999:7:::
    fred:$1$9ebf8e708dcb3f28cb43d5d52655ab14:16561:0:99999:7:::
    mysql:!:16939:0:99999:7:::
    uuidd:*:16940:0:99999:7:::
    giselle:$1$6e5fa4d9c48ca921c0a2ce1e64c9ae6f:17078:0:99999:7:::
    libvirt-qemu:!:17105:0:99999:7:::
    Les mots de passe sont donc en deuxième position dans chaque chaîne en faisant pas mal de recherche j'ai trouvé que le mot de passe était crypté en salt crypt de md5 qui est différent du MD5 normal il me semble.

    Cependant moi je génère dans mon code des mots passe azerty par exemple et à chaque fois je crypte ce mot de passe afin de le comparer à celui dans mon fichier.

    Mais je ne vois pas quelle fonction utilisé (en python donc) pour crypté le mot de passe de la même manière que cela $1$6e5fa4d9c48ca921c0a2ce1e64c9ae6f ( avec le $1$ devant) et donc ensuite pouvoir le comparer.

    Merci par avance !

    Damien

  2. #2
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Je n'ai jamais fait ça, mais j'ai trouvé une info sur le sujet ici:

    https://wiki.python.org/moin/Md5Passwords

  3. #3
    Expert confirmé Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 041
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 041
    Par défaut
    salut,

    Citation Envoyé par damienla Voir le message
    Je développe une application en python permettant de trouver des mot de passe crypté avec la méthode brutforce ( TP pour un cours de sécurité ).
    J'ai donc un fichier shadow contenant les comptes fournit pas le professeur
    et ton professeur de sécurité il t'a jamais dit de privilégier "chiffrés" ou "hashés" au lieu de "cryptés" qui ne veut pas dire grand chose en plus d'être incorrect ?

    par ailleurs si il vous donne un fichier shadow j'imagine que soit il y a le format du fichier qui va avec le cours, soit implicitement c'est à vous de faire des recherches sur ledit format
    Google est un bon point de départ, on en vient rapidement à lire des choses du genre :
    "$id$salt$hashed", the printable form of a password hash as produced by crypt(), where "$id" is the algorithm used. (On GNU/Linux, "$1$" stands for MD5, "$2a$" is Blowfish, "$2y$" is Blowfish (correct handling of 8-bit chars), "$5$" is SHA-256 and "$6$" is SHA-512 (...)
    foncièrement ici ce n'est pas un problème lié à Python (puisqu'il n'y a aucun code en l'état), la priorité est de se renseigner sur le format du fichier shadow

    Edit: quelques liens intéressants :

  4. #4
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2016
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2016
    Messages : 28
    Par défaut
    D'accord merci pour ces infos je vais continué à me renseigner car j'ai fait la chose suivante cette nuit:

    J'ai fait tourné mon programme en hashant en MD5 et en mettant $1$ devant à chaque mot de passe trouvé pour ensuite le comparé.

    Ce matin le programme tournait toujours sans avoir trouvé je pense donc que ce n'est pas la bonne solution

    Merci à vous en tout cas !

  5. #5
    Expert confirmé Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 041
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 041
    Par défaut
    Citation Envoyé par damienla Voir le message
    J'ai fait tourné mon programme en hashant (...) pour ensuite le comparé.
    Ce matin le programme tournait toujours sans avoir trouvé je pense donc que ce n'est pas la bonne solution
    en fait si, c'est la seule solution possible puisque les hash dans le fichier sont salés (salted), le but du sel étant justement d'obliger l'attaquant à générer tous les hash possibles au lieu d'avoir recours à des rainbow tables, des tables de hashes précalculés

    en revanche les techniques moderne n'utilisent pas le CPU (ni Python accessoirement) mais plutôt le GPU des cartes graphiques beaucoup plus rapides

    le mieux que tu puisses faire pour débuter c'est d'avoir un algorithme pour générer les mots de passe un peu soigné et optimisé, choisir avec soin le nombre de caractères maximum du mdp et les caractères autorisés, et découper le job en autant de processus (import multiprocessing) qu'il y a de CPUs, de manière à rentabiliser au maximum

    on pourrait ainsi envisager un programme qui teste tout seul comme un grand tous les mots de passe, d'abord de 1, puis 2, puis 3 caractères etc. sans forcément de limite au nombre max de caractères, mais qui soit capable aussi répartir le travail entre différents processus enfants, de reprendre où il en était après qu'on l'a stoppé et qui affiche régulièrement à l'écran à quel stade il en est (toutes les minutes, toutes les heures, ou tous les X mots de passe par exemple), là pour le coup ça devient intéressant à coder, en tous cas plus qu'une forêt de boucles imbriquées qu'on relance à chaque fois

  6. #6
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2016
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2016
    Messages : 28
    Par défaut
    Ca a l'air super intéressant la méthode que tu me dis d'utiliser, à travers mes recherches j'ai également vu qu'utiliser en effet la carte graphique était bien plus performant, je pense voir ce que tu veux dire, le problème c'est que techniquement parlant même en m'aidant des docs sur internet liées au multiprecessing je n'ai aucune idée de comment le mettre en oeuvre au sein de mon script, le python est imposé, je n'en avais jamais fait auparavant je découvre donc entièrement.

    Pour info voici mon code actuel ( je sais qu'il est loin d'être parfait mais bon je suis ouvert à tout correctif ahah)
    Merci infiniment en tout cas de vous pencher sur le sujet c'est vraiment cool de votre part

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    import sys
    import time
    import hashlib
    fp = open ("C:\\Users\\damie\\Desktop\\Cours\\Sécurité Systeme et reseaux\\Mot de passe\\shadow.txt","r")
    lignes = fp.readlines()
    mdptab= []
     
    #Afficher la date et heure
    now = time.localtime(time.time())
    print ("début de l'opération : " + time.asctime(now))
     
    #Stockage dans le tableau mdptab de tous les mot de passe user trouvés dans le fichier shadow (3mots de passes)
    for ligne in lignes:
      chaine=ligne.split(":")
     
      if len(chaine[1]) > 20 :
        mdptab = mdptab+[chaine[1]]
     
     
     
     
    #Algo force brut
    import os
    Alpha = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789;@_#"
    i = 0
    #Mot de passe contenant au minimum 6 à 12 caractères
    nbcarac = 5
    while nbcarac <= 11 :
     
      nbcarac = nbcarac + 1
      print("Nb caractères : " + nbcarac )
      if nbcarac == 6 :
        for a in range(0,66):
              for b in range(0,66):
                  for c in range(0,66):
                      for d in range(0,66):
     
                        for e in range(0, 66):
                          for f in range(0, 66):
     
                            Brute = Alpha[a] + Alpha[b] + Alpha[c] + Alpha[d] + Alpha[e] + Alpha[f]
                            hash_object = hashlib.md5(Brute.encode('utf-8')).hexdigest()
                            mdp = "$1$" + hash_object
     
                            print(mdp)
                            #On compare içi le mot de passe généré puis haché en md5 à ceux stocké dans tableau
                            for i in range(0, 2):
                              if mdp == mdptab[i]:
                                now = time.localtime(time.time())
                                print("Date de la trouvaille : " + time.asctime(now))
                                print ("MDP TROUVE : " + "crypté: " + mdp +" non crypté : "+Brute )
     
     
      if nbcarac == 7:
     
        for a in range(0, 66):
          for b in range(0, 66):
            for c in range(0, 66):
              for d in range(0, 66):
                for e in range(0, 66):
                  for f in range(0, 66):
                    for g in range(0, 66):
                      Brute = Alpha[a] + Alpha[b] + Alpha[c] + Alpha[d] + Alpha[e] + Alpha[f] + Alpha[g]
                      hash_object = hashlib.md5(Brute.encode('utf-8')).hexdigest()
                      mdp = "$1$" + hash_object
     
                      for i in range(0, 2):
                        if mdp == mdptab[i]:
                          now = time.localtime(time.time())
                          print("Date de la trouvaille : " + time.asctime(now))
                          print("MDP TROUVE : " + "crypté: " + mdp + " non crypté : " + Brute)
     
      if nbcarac == 8:
     
         for a in range(0, 66):
           for b in range(0, 66):
             for c in range(0, 66):
               for d in range(0, 66):
                 for e in range(0, 66):
                   for f in range(0, 66):
                     for g in range(0, 66):
                       for h in range(0, 66):
                         Brute = Alpha[a] + Alpha[b] + Alpha[c] + Alpha[d] + Alpha[e] + Alpha[f] + Alpha[g] + Alpha[h]
                         hash_object = hashlib.md5(Brute.encode('utf-8')).hexdigest()
                         mdp = "$1$" + hash_object
     
                         for i in range(0, 2):
                           if mdp == mdptab[i]:
                             now = time.localtime(time.time())
                             print("Date de la trouvaille : " + time.asctime(now))
                             print("MDP TROUVE : " + "crypté: " + mdp + " non crypté : " + Brute)
      if nbcarac == 9:
        for a in range(0, 66):
          for b in range(0, 66):
            for c in range(0, 66):
              for d in range(0, 66):
                for e in range(0, 66):
                  for f in range(0, 66):
                    for g in range(0, 66):
                      for h in range(0, 66):
                        for i in range(0, 66):
                          Brute = Alpha[a] + Alpha[b] + Alpha[c] + Alpha[d] + Alpha[e] + Alpha[f] + Alpha[g] + Alpha[h] + Alpha[i]
                          hash_object = hashlib.md5(Brute.encode('utf-8')).hexdigest()
                          mdp = "$1$" + hash_object
     
                          for i in range(0, 2):
                            if mdp == mdptab[i]:
                              now = time.localtime(time.time())
                              print("Date de la trouvaille : " + time.asctime(now))
                              print("MDP TROUVE : " + "crypté: " + mdp + " non crypté : " + Brute)
     
      if nbcarac == 10:
     
        for a in range(0, 66):
          for b in range(0, 66):
            for c in range(0, 66):
              for d in range(0, 66):
                for e in range(0, 66):
                  for f in range(0, 66):
                    for g in range(0, 66):
                      for h in range(0, 66):
                        for i in range(0, 66):
                          for j in range(0, 66):
                            Brute = Alpha[a] + Alpha[b] + Alpha[c] + Alpha[d] + Alpha[e] + Alpha[f] + Alpha[g] + Alpha[h] + Alpha[i]+ Alpha[j]
                            hash_object = hashlib.md5(Brute.encode('utf-8')).hexdigest()
                            mdp = "$1$" + hash_object
     
                            for i in range(0, 2):
                              if mdp == mdptab[i]:
                                now = time.localtime(time.time())
                                print("Date de la trouvaille : " + time.asctime(now))
                                print("MDP TROUVE : " + "crypté: " + mdp + " non crypté : " + Brute)
     
      if nbcarac == 11:
     
        for a in range(0, 66):
          for b in range(0, 66):
            for c in range(0, 66):
              for d in range(0, 66):
                for e in range(0, 66):
                  for f in range(0, 66):
                    for g in range(0, 66):
                      for h in range(0, 66):
                        for i in range(0, 66):
                          for j in range(0, 66):
                            for k in range(0, 66):
                              Brute = Alpha[a] + Alpha[b] + Alpha[c] + Alpha[d] + Alpha[e] + Alpha[f] + Alpha[g] + Alpha[h] + Alpha[i] + Alpha[j] +Alpha[k]
                              hash_object = hashlib.md5(Brute.encode('utf-8')).hexdigest()
                              mdp = "$1$" + hash_object
     
                              for i in range(0, 2):
                                if mdp == mdptab[i]:
                                  now = time.localtime(time.time())
                                  print("Date de la trouvaille : " + time.asctime(now))
                                  print("MDP TROUVE : " + "crypté: " + mdp + " non crypté : " + Brute)
     
      if nbcarac == 12:
     
        for a in range(0, 66):
          for b in range(0, 66):
            for c in range(0, 66):
              for d in range(0, 66):
                for e in range(0, 66):
                  for f in range(0, 66):
                    for g in range(0, 66):
                      for h in range(0, 66):
                        for i in range(0, 66):
                          for j in range(0, 66):
                            for k in range(0, 66):
                              for l in range(0, 66):
                                Brute = Alpha[a] + Alpha[b] + Alpha[c] + Alpha[d] + Alpha[e] + Alpha[f] + Alpha[g] + Alpha[h] + Alpha[i] + Alpha[j] + Alpha[k]+ Alpha[l]
                                hash_object = hashlib.md5(Brute.encode('utf-8')).hexdigest()
                                mdp = "$1$" + hash_object
     
                                for i in range(0, 2):
                                  if mdp == mdptab[i]:
                                    now = time.localtime(time.time())
                                    print("Date de la trouvaille : " + time.asctime(now))
                                    print("MDP TROUVE : " + "crypté: " + mdp + " non crypté : " + Brute)

  7. #7
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2016
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2016
    Messages : 28
    Par défaut
    Ma solution n'est en effet pas optimisée après l'avoir fait tourner 14h, l'algorithme est toujours sur les 6 caractères et n'a même pas commencé à tester les 7

Discussions similaires

  1. [langage] traduction d'un fonction python en perl
    Par ay_pepito dans le forum Langage
    Réponses: 3
    Dernier message: 04/12/2007, 15h06
  2. nom de fonction python
    Par deb75 dans le forum Général Python
    Réponses: 4
    Dernier message: 31/03/2006, 21h54
  3. fonction python similaire à find en bash
    Par deb75 dans le forum Général Python
    Réponses: 1
    Dernier message: 21/12/2005, 11h48
  4. Insérer des données cryptées MD5
    Par Amnesiak dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 09/08/2005, 18h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo