Exemple #1
0
	def __init__(self, argv, db_file=None):
		self.scanners = self.get_modules_file(os.path.join(getrealdir(__file__), "scanners"))

		num_threads = None
		request_types = None
		display_progress = True
		modules_path = None
		proxy = None
		cookies = None
		user_agent = None
		extra_headers = None

		try:
			opts, args = getopt.getopt(argv, 'hn:r:vm:p:U:c:E:')
		except getopt.GetoptError as err:
			print(str(err))
			sys.exit(1)

		for o, v in opts:
			if o == '-h':
				self.usage()
				sys.exit(0)
			elif o == '-m':
				modules_path = v
				self.scanners.extend(self.get_modules_file(modules_path))
				sys.path.append(modules_path)

		if len(args) < 2:
			if not db_file or len(args) == 0:
				self.usage()
				sys.exit(1)
			args.append(db_file)


		self.scanner = args[0]
		self.db_file = args[1] if not db_file else db_file

		db = Database(self.db_file)
		crawl_info = db.get_crawl_info()
		try:
			proxy = json.loads(crawl_info['proxy'])
			cookies = json.loads(crawl_info['cookies'])
			extra_headers = json.loads(crawl_info['extra_headers'])
			if not extra_headers:
				extra_headers = {}
			user_agent = crawl_info['user_agent']
		except KeyError:
			print("Unable to read proxy, cookies and user_agent from db.. maybe db created vith an old version . . .")
			pass

		for o, v in opts:
			if o == '-n':
				num_threads = int(v)
			elif o == '-v':
				display_progress = False
			elif o == '-r':
				request_types = v
			elif o == '-p':
				if v == "0":
					proxy = None
				else:
					try:
						proxy = parse_proxy_string(v)
					except Exception as e:
						print(e)
						sys.exit(1)
			elif o == '-c':
				try:
					cookies = parse_cookie_string(v)
				except:
					print("Unable to decode cookies")
					sys.exit(1)
			elif o == '-U':
				user_agent = v
			elif o == '-E':
				if not extra_headers:
					extra_headers = {}
				(hn, hv) = v.split("=", 1)
				extra_headers[hn] = hv


		scanner_argv = args[2:]

		if not self.scanner in self.scanners:
			print("Available scanners are:\n  %s" % "\n  ".join(sorted(self.scanners)))
			sys.exit(1)

		if not os.path.exists(self.db_file):
			print("No such file %s" % self.db_file)
			sys.exit(1)

		try:
			mod = importlib.import_module("core.scan.scanners.%s" % self.scanner)
		except Exception as e:
			if modules_path:
				try:
					mod = importlib.import_module(self.scanner)
				except Exception as e1:
					raise e1
			else:
				raise e

		try:
			run = getattr(mod, self.scanner.title())
			run(self.db_file, num_threads, request_types, display_progress, scanner_argv, proxy, cookies, user_agent, extra_headers)
		except Exception as e:
			print("Error : %s" % e)
			return

		print("Scan finished")