skip420

pwnd_email

Jan 27th, 2021
320
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.18 KB | None | 0 0
  1. #python pwndb.py --target fishdom@playrix.com
  2.  
  3. import sys
  4. import requests
  5. import argparse
  6. from email.utils import getaddresses
  7. import json
  8.  
  9. from requests import ConnectionError
  10.  
  11. if sys.version_info >= (3, 0):
  12.     sys.stdout = open(sys.stdout.fileno(), mode='w', encoding='utf8', buffering=1)
  13.  
  14. G, B, R, W, M, C, end = '\033[92m', '\033[94m', '\033[91m', '\x1b[37m', '\x1b[35m', '\x1b[36m', '\033[0m'
  15. info = end + W + "[-]" + W
  16. good = end + G + "[+]" + C
  17. bad = end + R + "[" + W + "!" + R + "]"
  18.  
  19.  
  20. def main(emails, output=None):
  21.     if not output:
  22.         print(info + " Searching for leaks...")
  23.  
  24.     results = []
  25.  
  26.     for email in emails:
  27.         leaks = find_leaks(email.strip())
  28.         if leaks:
  29.             for leak in leaks:
  30.                 results.append(leak)
  31.  
  32.     if not results:
  33.         if not output:
  34.             print(bad + " No leaks found." + end)
  35.  
  36.     if not output or output == 'txt':
  37.         for result in results:
  38.             username = result.get('username', '')
  39.             domain = result.get('domain', '')
  40.             password = result.get('password', '')
  41.  
  42.             if not output:
  43.                 print(good + "\t" + username + "@" + domain + ":" + password)
  44.             if output == 'txt':
  45.                 print(username + "@" + domain + ":" + password)
  46.     if output == 'json':
  47.         print(json.dumps(results))
  48.  
  49. def find_leaks(email):
  50.     url = "http://pwndb2am4tzkvold.onion/"
  51.     username = email
  52.     domain = "%"
  53.  
  54.     if "@" in email:
  55.         username = email.split("@")[0]
  56.         domain = email.split("@")[1]
  57.         if not username:
  58.             username = '%'
  59.  
  60.     request_data = {'luser': username, 'domain': domain, 'luseropr': 1, 'domainopr': 1, 'submitform': 'em'}
  61.  
  62.     r = session.post(url, data=request_data)
  63.  
  64.     return parse_pwndb_response(r.text)
  65.  
  66.  
  67. def parse_pwndb_response(text):
  68.     if "Array" not in text:
  69.         return None
  70.  
  71.     leaks = text.split("Array")[1:]
  72.     emails = []
  73.  
  74.     for leak in leaks:
  75.         leaked_email = ''
  76.         domain = ''
  77.         password = ''
  78.         try :
  79.             leaked_email = leak.split("[luser] =>")[1].split("[")[0].strip()
  80.             domain = leak.split("[domain] =>")[1].split("[")[0].strip()
  81.             password = leak.split("[password] =>")[1].split(")")[0].strip()
  82.         except:
  83.             pass
  84.         if leaked_email:
  85.             emails.append({'username': leaked_email, 'domain': domain, 'password': password})
  86.     return emails
  87.  
  88.  
  89. if __name__ == '__main__':
  90.     parser = argparse.ArgumentParser(prog='pwndb.py')
  91.     parser.add_argument("--target", help="Target email/domain to search for leaks.")
  92.     parser.add_argument("--list", help="A list of emails in a file to search for leaks.")
  93.     parser.add_argument("--output", help="Return results as json/txt")
  94.     parser.add_argument("--proxy", default='127.0.0.1:9050', type=str, help="Set Tor proxy (default: 127.0.0.1:9050)")
  95.     args = parser.parse_args()
  96.  
  97.     # Tor proxy
  98.     proxy = args.proxy
  99.     session = requests.session()
  100.     session.proxies = {'http': 'socks5h://{}'.format(proxy), 'https': 'socks5h://{}'.format(proxy)}
  101.  
  102.     if not args.list and not args.target:
  103.         print(bad + " Missing parameters!" + end)
  104.         parser.print_help()
  105.         exit(-1)
  106.  
  107.     emails = []
  108.  
  109.     output = None
  110.     if args.output:
  111.         if args.output not in ['json', 'txt']:
  112.             print(bad + " Output should be json or txt" + end)
  113.             exit(-1)
  114.         output = args.output
  115.  
  116.     if args.target:
  117.         emails.append(args.target)
  118.  
  119.     if args.list:
  120.         try:
  121.             lines = open(args.list).readlines()
  122.             for line in lines:
  123.                 for input in line.split(','):
  124.                     addresses = getaddresses([input])
  125.                     for address in addresses:
  126.                         emails.append(str(addresses[0][1]).strip())
  127.         except Exception as e:
  128.             print(bad + " Can't read the file: " + str(args.list))
  129.             exit(-1)
  130.     try:
  131.         main(emails, output)
  132.     except ConnectionError:
  133.         print(bad + " Can't connect to service! restart tor service and try again.")
  134.     except Exception as e:
  135.         print(bad + " " + str(e))
Add Comment
Please, Sign In to add comment