Advertisement
Guest User

Untitled

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