def test_color_print(self): ColorPrint.red("red") self.assertIn("91m", sys.stdout.getvalue()) ColorPrint.green("green") self.assertIn("92m", sys.stdout.getvalue()) ColorPrint.light_purple("light_purple") self.assertIn("94m", sys.stdout.getvalue()) ColorPrint.purple("purple") self.assertIn("95m", sys.stdout.getvalue()) ColorPrint.yellow("yellow") self.assertIn("93m", sys.stdout.getvalue())
def send_to_anubisdb(self, target): if len(target) == 1: print("Sending to AnubisDB") data = {'subdomains': self.domains} # Sends found subdomains to Anubis (max 10,000/post) res = requests.post("https://jonlu.ca/anubis/subdomains/" + target[0], json=data) if res.status_code != 200: ColorPrint.red( "Error sending results to AnubisDB - Status Code: " + str(res.status_code)) else: print("Cannot send multiple domains to AnubisDB")
def search_censys(self, target): print("Searching Censys") try: from anubis.API import CENSYS_ID, CENSYS_SECRET except ImportError: ColorPrint.red( "To run a Censys scan, you must add your API keys to anubis/API.py") return if not CENSYS_SECRET or not CENSYS_ID: ColorPrint.red( "To run a Censys scan, you must add your API keys to anubis/API.py") return # Print certificate information for domains c = censys.certificates.CensysCertificates(CENSYS_ID, CENSYS_SECRET) for cert in c.search("." + target): print(cert)
def dnssecc_subdomain_enum(self, target): # Must run as root if os.getuid() == 0: print("Starting DNSSEC Enum") nm = nmap.PortScanner() arguments = '-sSU -p 53 --script dns-nsec-enum --script-args dns-nsec-enum.domains=' + target nm.scan(hosts=target, arguments=arguments) for host in nm.all_hosts(): try: print(nm[host]['udp'][53]['script']['dns-nsec-enum']) except: pass else: ColorPrint.red( "To run a DNSSEC subdomain enumeration, Anubis must be run as root" )
def search_shodan(self): print("Searching Shodan.io for additional information") try: from anubis.API import SHODAN_KEY except ImportError: ColorPrint.red("Unable to import API keys - make sure API.py exists!") return api = shodan.Shodan(SHODAN_KEY) for i in range(len(self.options["TARGET"])): try: results = api.host(socket.gethostbyname(self.options["TARGET"][i])) print('Server Location: ' + str(results['city']) + ", " + str(results['country_code']) + ' - ' + str(results['postal_code'])) print("ISP or Hosting Company: %s" % str(results['isp'])) if results['os'] is not None: print("Possible OS: %s" % str(results['os'])) except Exception as e: self.handle_exception(e, "Error retrieving additional info")
def handle_exception(self, e, message=""): if self.options["--verbose"]: print(e) if message: ColorPrint.red(message)