(.*?)', re.S)
660 | link_regex = re.compile('(.*?) ', re.S)
661 | links = []
662 | try:
663 | results_tbl = tbl_regex.findall(resp)[0]
664 | except IndexError:
665 | results_tbl = ''
666 | links_list = link_regex.findall(results_tbl)
667 | links = list(set(links_list))
668 | for link in links:
669 | subdomain = link.strip()
670 | if not subdomain.endswith(self.domain):
671 | continue
672 | if subdomain and subdomain not in self.subdomains and subdomain != self.domain:
673 | self.subdomains.append(subdomain.strip())
674 | return links
675 |
676 |
677 | class Virustotal(enumratorBaseThreaded):
678 | def __init__(self, domain, subdomains=None, q=None, silent=False, verbose=True):
679 | subdomains = subdomains or []
680 | base_url = 'https://www.virustotal.com/ui/domains/{domain}/subdomains'
681 | self.engine_name = "Virustotal"
682 | self.q = q
683 | super(Virustotal, self).__init__(base_url, self.engine_name, domain, subdomains, q=q, silent=silent, verbose=verbose)
684 | self.url = self.base_url.format(domain=self.domain)
685 | return
686 |
687 | # the main send_req need to be rewritten
688 | def send_req(self, url):
689 | try:
690 | resp = self.session.get(url, headers=self.headers, timeout=self.timeout)
691 | except Exception as e:
692 | self.print_(e)
693 | resp = None
694 |
695 | return self.get_response(resp)
696 |
697 | # once the send_req is rewritten we don't need to call this function, the stock one should be ok
698 | def enumerate(self):
699 | while self.url != '':
700 | resp = self.send_req(self.url)
701 | resp = json.loads(resp)
702 | if 'error' in resp:
703 | self.print_(R + "[!] Error: Virustotal probably now is blocking our requests" + W)
704 | break
705 | if 'links' in resp and 'next' in resp['links']:
706 | self.url = resp['links']['next']
707 | else:
708 | self.url = ''
709 | self.extract_domains(resp)
710 | return self.subdomains
711 |
712 | def extract_domains(self, resp):
713 | #resp is already parsed as json
714 | try:
715 | for i in resp['data']:
716 | if i['type'] == 'domain':
717 | subdomain = i['id']
718 | if not subdomain.endswith(self.domain):
719 | continue
720 | if subdomain not in self.subdomains and subdomain != self.domain:
721 | if self.verbose:
722 | self.print_("%s%s: %s%s" % (R, self.engine_name, W, subdomain))
723 | self.subdomains.append(subdomain.strip())
724 | except Exception:
725 | pass
726 |
727 |
728 | class ThreatCrowd(enumratorBaseThreaded):
729 | def __init__(self, domain, subdomains=None, q=None, silent=False, verbose=True):
730 | subdomains = subdomains or []
731 | base_url = 'https://www.threatcrowd.org/searchApi/v2/domain/report/?domain={domain}'
732 | self.engine_name = "ThreatCrowd"
733 | self.q = q
734 | super(ThreatCrowd, self).__init__(base_url, self.engine_name, domain, subdomains, q=q, silent=silent, verbose=verbose)
735 | return
736 |
737 | def req(self, url):
738 | try:
739 | resp = self.session.get(url, headers=self.headers, timeout=self.timeout)
740 | except Exception:
741 | resp = None
742 |
743 | return self.get_response(resp)
744 |
745 | def enumerate(self):
746 | url = self.base_url.format(domain=self.domain)
747 | resp = self.req(url)
748 | self.extract_domains(resp)
749 | return self.subdomains
750 |
751 | def extract_domains(self, resp):
752 | try:
753 | links = json.loads(resp)['subdomains']
754 | for link in links:
755 | subdomain = link.strip()
756 | if not subdomain.endswith(self.domain):
757 | continue
758 | if subdomain not in self.subdomains and subdomain != self.domain:
759 | if self.verbose:
760 | self.print_("%s%s: %s%s" % (R, self.engine_name, W, subdomain))
761 | self.subdomains.append(subdomain.strip())
762 | except Exception as e:
763 | pass
764 |
765 |
766 | class CrtSearch(enumratorBaseThreaded):
767 | def __init__(self, domain, subdomains=None, q=None, silent=False, verbose=True):
768 | subdomains = subdomains or []
769 | base_url = 'https://crt.sh/?q=%25.{domain}'
770 | self.engine_name = "SSL Certificates"
771 | self.q = q
772 | super(CrtSearch, self).__init__(base_url, self.engine_name, domain, subdomains, q=q, silent=silent, verbose=verbose)
773 | return
774 |
775 | def req(self, url):
776 | try:
777 | resp = self.session.get(url, headers=self.headers, timeout=self.timeout)
778 | except Exception:
779 | resp = None
780 |
781 | return self.get_response(resp)
782 |
783 | def enumerate(self):
784 | url = self.base_url.format(domain=self.domain)
785 | resp = self.req(url)
786 | if resp:
787 | self.extract_domains(resp)
788 | return self.subdomains
789 |
790 | def extract_domains(self, resp):
791 | link_regx = re.compile(' | (.*?) | ')
792 | try:
793 | links = link_regx.findall(resp)
794 | for link in links:
795 | link = link.strip()
796 | subdomains = []
797 | if '
' in link:
798 | subdomains = link.split('
')
799 | else:
800 | subdomains.append(link)
801 |
802 | for subdomain in subdomains:
803 | if not subdomain.endswith(self.domain) or '*' in subdomain:
804 | continue
805 |
806 | if '@' in subdomain:
807 | subdomain = subdomain[subdomain.find('@')+1:]
808 |
809 | if subdomain not in self.subdomains and subdomain != self.domain:
810 | if self.verbose:
811 | self.print_("%s%s: %s%s" % (R, self.engine_name, W, subdomain))
812 | self.subdomains.append(subdomain.strip())
813 | except Exception as e:
814 | print(e)
815 | pass
816 |
817 | class PassiveDNS(enumratorBaseThreaded):
818 | def __init__(self, domain, subdomains=None, q=None, silent=False, verbose=True):
819 | subdomains = subdomains or []
820 | base_url = 'https://api.sublist3r.com/search.php?domain={domain}'
821 | self.engine_name = "PassiveDNS"
822 | self.q = q
823 | super(PassiveDNS, self).__init__(base_url, self.engine_name, domain, subdomains, q=q, silent=silent, verbose=verbose)
824 | return
825 |
826 | def req(self, url):
827 | try:
828 | resp = self.session.get(url, headers=self.headers, timeout=self.timeout)
829 | except Exception as e:
830 | resp = None
831 |
832 | return self.get_response(resp)
833 |
834 | def enumerate(self):
835 | url = self.base_url.format(domain=self.domain)
836 | resp = self.req(url)
837 | if not resp:
838 | return self.subdomains
839 |
840 | self.extract_domains(resp)
841 | return self.subdomains
842 |
843 | def extract_domains(self, resp):
844 | try:
845 | subdomains = json.loads(resp)
846 | for subdomain in subdomains:
847 | if subdomain not in self.subdomains and subdomain != self.domain:
848 | if self.verbose:
849 | self.print_("%s%s: %s%s" % (R, self.engine_name, W, subdomain))
850 | self.subdomains.append(subdomain.strip())
851 | except Exception as e:
852 | pass
853 |
854 |
855 | class portscan():
856 | def __init__(self, subdomains, ports):
857 | self.subdomains = subdomains
858 | self.ports = ports
859 | self.lock = None
860 |
861 | def port_scan(self, host, ports):
862 | openports = []
863 | self.lock.acquire()
864 | for port in ports:
865 | try:
866 | s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
867 | s.settimeout(2)
868 | result = s.connect_ex((host, int(port)))
869 | if result == 0:
870 | openports.append(port)
871 | s.close()
872 | except Exception:
873 | pass
874 | self.lock.release()
875 | if len(openports) > 0:
876 | print("%s%s%s - %sFound open ports:%s %s%s%s" % (G, host, W, R, W, Y, ', '.join(openports), W))
877 |
878 | def run(self):
879 | self.lock = threading.BoundedSemaphore(value=20)
880 | for subdomain in self.subdomains:
881 | t = threading.Thread(target=self.port_scan, args=(subdomain, self.ports))
882 | t.start()
883 |
884 |
885 | def main(domain, threads, savefile, ports, silent, verbose, enable_bruteforce, engines):
886 | bruteforce_list = set()
887 | search_list = set()
888 |
889 | if is_windows:
890 | subdomains_queue = list()
891 | else:
892 | subdomains_queue = multiprocessing.Manager().list()
893 |
894 | # Check Bruteforce Status
895 | if enable_bruteforce or enable_bruteforce is None:
896 | enable_bruteforce = True
897 |
898 | # Validate domain
899 | domain_check = re.compile("^(http|https)?[a-zA-Z0-9]+([\-\.]{1}[a-zA-Z0-9]+)*\.[a-zA-Z]{2,}$")
900 | if not domain_check.match(domain):
901 | if not silent:
902 | print(R + "Error: Please enter a valid domain" + W)
903 | return []
904 |
905 | if not domain.startswith('http://') or not domain.startswith('https://'):
906 | domain = 'http://' + domain
907 |
908 | parsed_domain = urlparse.urlparse(domain)
909 |
910 | if not silent:
911 | print(B + "[-] Enumerating subdomains now for %s" % parsed_domain.netloc + W)
912 |
913 | if verbose and not silent:
914 | print(Y + "[-] verbosity is enabled, will show the subdomains results in realtime" + W)
915 |
916 | supported_engines = {'baidu': BaiduEnum,
917 | 'yahoo': YahooEnum,
918 | 'google': GoogleEnum,
919 | 'bing': BingEnum,
920 | 'ask': AskEnum,
921 | 'netcraft': NetcraftEnum,
922 | 'dnsdumpster': DNSdumpster,
923 | 'virustotal': Virustotal,
924 | 'threatcrowd': ThreatCrowd,
925 | 'ssl': CrtSearch,
926 | 'passivedns': PassiveDNS
927 | }
928 |
929 | chosenEnums = []
930 |
931 | if engines is None:
932 | chosenEnums = [
933 | BaiduEnum, YahooEnum, GoogleEnum, BingEnum, AskEnum,
934 | NetcraftEnum, DNSdumpster, Virustotal, ThreatCrowd,
935 | CrtSearch, PassiveDNS
936 | ]
937 | else:
938 | engines = engines.split(',')
939 | for engine in engines:
940 | if engine.lower() in supported_engines:
941 | chosenEnums.append(supported_engines[engine.lower()])
942 |
943 | # Start the engines enumeration
944 | enums = [enum(domain, [], q=subdomains_queue, silent=silent, verbose=verbose) for enum in chosenEnums]
945 | for enum in enums:
946 | enum.start()
947 | for enum in enums:
948 | enum.join()
949 |
950 | subdomains = set(subdomains_queue)
951 | for subdomain in subdomains:
952 | search_list.add(subdomain)
953 |
954 | if enable_bruteforce:
955 | if not silent:
956 | print(G + "[-] Starting bruteforce module now using subbrute.." + W)
957 | record_type = False
958 | path_to_file = os.path.dirname(os.path.realpath(__file__))
959 | subs = os.path.join(path_to_file, 'subbrute', 'names.txt')
960 | resolvers = os.path.join(path_to_file, 'subbrute', 'resolvers.txt')
961 | process_count = threads
962 | output = False
963 | json_output = False
964 | bruteforce_list = subbrute.print_target(parsed_domain.netloc, record_type, subs, resolvers, process_count, output, json_output, search_list, verbose)
965 |
966 | subdomains = search_list.union(bruteforce_list)
967 |
968 | if subdomains:
969 | subdomains = sorted(subdomains, key=subdomain_sorting_key)
970 |
971 | if savefile:
972 | write_file(savefile, subdomains)
973 |
974 | if not silent:
975 | print(Y + "[-] Total Unique Subdomains Found: %s" % len(subdomains) + W)
976 |
977 | if ports:
978 | if not silent:
979 | print(G + "[-] Start port scan now for the following ports: %s%s" % (Y, ports) + W)
980 | ports = ports.split(',')
981 | pscan = portscan(subdomains, ports)
982 | pscan.run()
983 |
984 | elif not silent:
985 | for subdomain in subdomains:
986 | print(G + subdomain + W)
987 | return subdomains
988 |
989 |
990 | def interactive():
991 | args = parse_args()
992 | domain = args.domain
993 | threads = args.threads
994 | savefile = args.output
995 | ports = args.ports
996 | enable_bruteforce = args.bruteforce
997 | verbose = args.verbose
998 | engines = args.engines
999 | if verbose or verbose is None:
1000 | verbose = True
1001 | if args.no_color:
1002 | no_color()
1003 | banner()
1004 | res = main(domain, threads, savefile, ports, silent=False, verbose=verbose, enable_bruteforce=enable_bruteforce, engines=engines)
1005 |
1006 | if __name__ == "__main__":
1007 | interactive()
1008 |
--------------------------------------------------------------------------------
/Useragent.json:
--------------------------------------------------------------------------------
1 | {"browsers": {"chrome": ["Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.1 Safari/537.36", "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.0 Safari/537.36", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.0 Safari/537.36", "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2226.0 Safari/537.36", "Mozilla/5.0 (Windows NT 6.4; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2225.0 Safari/537.36", "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2225.0 Safari/537.36", "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2224.3 Safari/537.36", "Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.93 Safari/537.36", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.124 Safari/537.36", "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2049.0 Safari/537.36", "Mozilla/5.0 (Windows NT 4.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2049.0 Safari/537.36", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.67 Safari/537.36", "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.67 Safari/537.36", "Mozilla/5.0 (X11; OpenBSD i386) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1944.0 Safari/537.36", "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.3319.102 Safari/537.36", "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.2309.372 Safari/537.36", "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.2117.157 Safari/537.36", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.47 Safari/537.36", "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1866.237 Safari/537.36", "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.137 Safari/4E423F", "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.116 Safari/537.36 Mozilla/5.0 (iPad; U; CPU OS 3_2 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B334b Safari/531.21.10", "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.517 Safari/537.36", "Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1667.0 Safari/537.36", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1664.3 Safari/537.36", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1664.3 Safari/537.36", "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.16 Safari/537.36", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1623.0 Safari/537.36", "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.17 Safari/537.36", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.62 Safari/537.36", "Mozilla/5.0 (X11; CrOS i686 4319.74.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.57 Safari/537.36", "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.2 Safari/537.36", "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1468.0 Safari/537.36", "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1467.0 Safari/537.36", "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1464.0 Safari/537.36", "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1500.55 Safari/537.36", "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.93 Safari/537.36", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.93 Safari/537.36", "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.93 Safari/537.36", "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.93 Safari/537.36", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.93 Safari/537.36", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.93 Safari/537.36", "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.90 Safari/537.36", "Mozilla/5.0 (X11; NetBSD) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.116 Safari/537.36", "Mozilla/5.0 (X11; CrOS i686 3912.101.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.116 Safari/537.36", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.60 Safari/537.17", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1309.0 Safari/537.17", "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.15 (KHTML, like Gecko) Chrome/24.0.1295.0 Safari/537.15", "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.14 (KHTML, like Gecko) Chrome/24.0.1292.0 Safari/537.14"], "opera": ["Opera/9.80 (X11; Linux i686; Ubuntu/14.10) Presto/2.12.388 Version/12.16", "Opera/9.80 (Windows NT 6.0) Presto/2.12.388 Version/12.14", "Mozilla/5.0 (Windows NT 6.0; rv:2.0) Gecko/20100101 Firefox/4.0 Opera 12.14", "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0) Opera 12.14", "Opera/12.80 (Windows NT 5.1; U; en) Presto/2.10.289 Version/12.02", "Opera/9.80 (Windows NT 6.1; U; es-ES) Presto/2.9.181 Version/12.00", "Opera/9.80 (Windows NT 5.1; U; zh-sg) Presto/2.9.181 Version/12.00", "Opera/12.0(Windows NT 5.2;U;en)Presto/22.9.168 Version/12.00", "Opera/12.0(Windows NT 5.1;U;en)Presto/22.9.168 Version/12.00", "Mozilla/5.0 (Windows NT 5.1) Gecko/20100101 Firefox/14.0 Opera/12.0", "Opera/9.80 (Windows NT 6.1; WOW64; U; pt) Presto/2.10.229 Version/11.62", "Opera/9.80 (Windows NT 6.0; U; pl) Presto/2.10.229 Version/11.62", "Opera/9.80 (Macintosh; Intel Mac OS X 10.6.8; U; fr) Presto/2.9.168 Version/11.52", "Opera/9.80 (Macintosh; Intel Mac OS X 10.6.8; U; de) Presto/2.9.168 Version/11.52", "Opera/9.80 (Windows NT 5.1; U; en) Presto/2.9.168 Version/11.51", "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; de) Opera 11.51", "Opera/9.80 (X11; Linux x86_64; U; fr) Presto/2.9.168 Version/11.50", "Opera/9.80 (X11; Linux i686; U; hu) Presto/2.9.168 Version/11.50", "Opera/9.80 (X11; Linux i686; U; ru) Presto/2.8.131 Version/11.11", "Opera/9.80 (X11; Linux i686; U; es-ES) Presto/2.8.131 Version/11.11", "Mozilla/5.0 (Windows NT 5.1; U; en; rv:1.8.1) Gecko/20061208 Firefox/5.0 Opera 11.11", "Opera/9.80 (X11; Linux x86_64; U; bg) Presto/2.8.131 Version/11.10", "Opera/9.80 (Windows NT 6.0; U; en) Presto/2.8.99 Version/11.10", "Opera/9.80 (Windows NT 5.1; U; zh-tw) Presto/2.8.131 Version/11.10", "Opera/9.80 (Windows NT 6.1; Opera Tablet/15165; U; en) Presto/2.8.149 Version/11.1", "Opera/9.80 (X11; Linux x86_64; U; Ubuntu/10.10 (maverick); pl) Presto/2.7.62 Version/11.01", "Opera/9.80 (X11; Linux i686; U; ja) Presto/2.7.62 Version/11.01", "Opera/9.80 (X11; Linux i686; U; fr) Presto/2.7.62 Version/11.01", "Opera/9.80 (Windows NT 6.1; U; zh-tw) Presto/2.7.62 Version/11.01", "Opera/9.80 (Windows NT 6.1; U; zh-cn) Presto/2.7.62 Version/11.01", "Opera/9.80 (Windows NT 6.1; U; sv) Presto/2.7.62 Version/11.01", "Opera/9.80 (Windows NT 6.1; U; en-US) Presto/2.7.62 Version/11.01", "Opera/9.80 (Windows NT 6.1; U; cs) Presto/2.7.62 Version/11.01", "Opera/9.80 (Windows NT 6.0; U; pl) Presto/2.7.62 Version/11.01", "Opera/9.80 (Windows NT 5.2; U; ru) Presto/2.7.62 Version/11.01", "Opera/9.80 (Windows NT 5.1; U;) Presto/2.7.62 Version/11.01", "Opera/9.80 (Windows NT 5.1; U; cs) Presto/2.7.62 Version/11.01", "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.13) Gecko/20101213 Opera/9.80 (Windows NT 6.1; U; zh-tw) Presto/2.7.62 Version/11.01", "Mozilla/5.0 (Windows NT 6.1; U; nl; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6 Opera 11.01", "Mozilla/5.0 (Windows NT 6.1; U; de; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6 Opera 11.01", "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; de) Opera 11.01", "Opera/9.80 (X11; Linux x86_64; U; pl) Presto/2.7.62 Version/11.00", "Opera/9.80 (X11; Linux i686; U; it) Presto/2.7.62 Version/11.00", "Opera/9.80 (Windows NT 6.1; U; zh-cn) Presto/2.6.37 Version/11.00", "Opera/9.80 (Windows NT 6.1; U; pl) Presto/2.7.62 Version/11.00", "Opera/9.80 (Windows NT 6.1; U; ko) Presto/2.7.62 Version/11.00", "Opera/9.80 (Windows NT 6.1; U; fi) Presto/2.7.62 Version/11.00", "Opera/9.80 (Windows NT 6.1; U; en-GB) Presto/2.7.62 Version/11.00", "Opera/9.80 (Windows NT 6.1 x64; U; en) Presto/2.7.62 Version/11.00", "Opera/9.80 (Windows NT 6.0; U; en) Presto/2.7.39 Version/11.00"], "firefox": ["Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.1", "Mozilla/5.0 (Windows NT 6.3; rv:36.0) Gecko/20100101 Firefox/36.0", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10; rv:33.0) Gecko/20100101 Firefox/33.0", "Mozilla/5.0 (X11; Linux i586; rv:31.0) Gecko/20100101 Firefox/31.0", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:31.0) Gecko/20130401 Firefox/31.0", "Mozilla/5.0 (Windows NT 5.1; rv:31.0) Gecko/20100101 Firefox/31.0", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:29.0) Gecko/20120101 Firefox/29.0", "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/29.0", "Mozilla/5.0 (X11; OpenBSD amd64; rv:28.0) Gecko/20100101 Firefox/28.0", "Mozilla/5.0 (X11; Linux x86_64; rv:28.0) Gecko/20100101 Firefox/28.0", "Mozilla/5.0 (Windows NT 6.1; rv:27.3) Gecko/20130101 Firefox/27.3", "Mozilla/5.0 (Windows NT 6.2; Win64; x64; rv:27.0) Gecko/20121011 Firefox/27.0", "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/25.0", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:25.0) Gecko/20100101 Firefox/25.0", "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0", "Mozilla/5.0 (Windows NT 6.0; WOW64; rv:24.0) Gecko/20100101 Firefox/24.0", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:24.0) Gecko/20100101 Firefox/24.0", "Mozilla/5.0 (Windows NT 6.2; rv:22.0) Gecko/20130405 Firefox/23.0", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20130406 Firefox/23.0", "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:23.0) Gecko/20131011 Firefox/23.0", "Mozilla/5.0 (Windows NT 6.2; rv:22.0) Gecko/20130405 Firefox/22.0", "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:22.0) Gecko/20130328 Firefox/22.0", "Mozilla/5.0 (Windows NT 6.1; rv:22.0) Gecko/20130405 Firefox/22.0", "Mozilla/5.0 (Microsoft Windows NT 6.2.9200.0); rv:22.0) Gecko/20130405 Firefox/22.0", "Mozilla/5.0 (Windows NT 6.2; Win64; x64; rv:16.0.1) Gecko/20121011 Firefox/21.0.1", "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:16.0.1) Gecko/20121011 Firefox/21.0.1", "Mozilla/5.0 (Windows NT 6.2; Win64; x64; rv:21.0.0) Gecko/20121011 Firefox/21.0.0", "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:21.0) Gecko/20130331 Firefox/21.0", "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:21.0) Gecko/20100101 Firefox/21.0", "Mozilla/5.0 (X11; Linux i686; rv:21.0) Gecko/20100101 Firefox/21.0", "Mozilla/5.0 (Windows NT 6.2; WOW64; rv:21.0) Gecko/20130514 Firefox/21.0", "Mozilla/5.0 (Windows NT 6.2; rv:21.0) Gecko/20130326 Firefox/21.0", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:21.0) Gecko/20130401 Firefox/21.0", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:21.0) Gecko/20130331 Firefox/21.0", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:21.0) Gecko/20130330 Firefox/21.0", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:21.0) Gecko/20100101 Firefox/21.0", "Mozilla/5.0 (Windows NT 6.1; rv:21.0) Gecko/20130401 Firefox/21.0", "Mozilla/5.0 (Windows NT 6.1; rv:21.0) Gecko/20130328 Firefox/21.0", "Mozilla/5.0 (Windows NT 6.1; rv:21.0) Gecko/20100101 Firefox/21.0", "Mozilla/5.0 (Windows NT 5.1; rv:21.0) Gecko/20130401 Firefox/21.0", "Mozilla/5.0 (Windows NT 5.1; rv:21.0) Gecko/20130331 Firefox/21.0", "Mozilla/5.0 (Windows NT 5.1; rv:21.0) Gecko/20100101 Firefox/21.0", "Mozilla/5.0 (Windows NT 5.0; rv:21.0) Gecko/20100101 Firefox/21.0", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:21.0) Gecko/20100101 Firefox/21.0", "Mozilla/5.0 (Windows NT 6.2; Win64; x64;) Gecko/20100101 Firefox/20.0", "Mozilla/5.0 (Windows x86; rv:19.0) Gecko/20100101 Firefox/19.0", "Mozilla/5.0 (Windows NT 6.1; rv:6.0) Gecko/20100101 Firefox/19.0", "Mozilla/5.0 (Windows NT 6.1; rv:14.0) Gecko/20100101 Firefox/18.0.1", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:18.0) Gecko/20100101 Firefox/18.0", "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:17.0) Gecko/20100101 Firefox/17.0.6"], "internetexplorer": ["Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; AS; rv:11.0) like Gecko", "Mozilla/5.0 (compatible, MSIE 11, Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko", "Mozilla/5.0 (compatible; MSIE 10.6; Windows NT 6.1; Trident/5.0; InfoPath.2; SLCC1; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET CLR 2.0.50727) 3gpp-gba UNTRUSTED/1.0", "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 7.0; InfoPath.3; .NET CLR 3.1.40767; Trident/6.0; en-IN)", "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)", "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0)", "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/5.0)", "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/4.0; InfoPath.2; SV1; .NET CLR 2.0.50727; WOW64)", "Mozilla/5.0 (compatible; MSIE 10.0; Macintosh; Intel Mac OS X 10_7_3; Trident/6.0)", "Mozilla/4.0 (Compatible; MSIE 8.0; Windows NT 5.2; Trident/6.0)", "Mozilla/4.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/5.0)", "Mozilla/1.22 (compatible; MSIE 10.0; Windows 3.1)", "Mozilla/5.0 (Windows; U; MSIE 9.0; WIndows NT 9.0; en-US))", "Mozilla/5.0 (Windows; U; MSIE 9.0; Windows NT 9.0; en-US)", "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 7.1; Trident/5.0)", "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; Media Center PC 6.0; InfoPath.3; MS-RTC LM 8; Zune 4.7)", "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; Media Center PC 6.0; InfoPath.3; MS-RTC LM 8; Zune 4.7", "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; Zune 4.0; InfoPath.3; MS-RTC LM 8; .NET4.0C; .NET4.0E)", "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; chromeframe/12.0.742.112)", "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 2.0.50727; Media Center PC 6.0)", "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 2.0.50727; Media Center PC 6.0)", "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; Zune 4.0; Tablet PC 2.0; InfoPath.3; .NET4.0C; .NET4.0E)", "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0", "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0; yie8)", "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2; .NET CLR 1.1.4322; .NET4.0C; Tablet PC 2.0)", "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0; FunWebProducts)", "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0; chromeframe/13.0.782.215)", "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0; chromeframe/11.0.696.57)", "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0) chromeframe/10.0.648.205", "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/4.0; GTB7.4; InfoPath.1; SV1; .NET CLR 2.8.52393; WOW64; en-US)", "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident/5.0; chromeframe/11.0.696.57)", "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident/4.0; GTB7.4; InfoPath.3; SV1; .NET CLR 3.1.76908; WOW64; en-US)", "Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; GTB7.4; InfoPath.2; SV1; .NET CLR 3.3.69573; WOW64; en-US)", "Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 1.0.3705; .NET CLR 1.1.4322)", "Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; InfoPath.1; SV1; .NET CLR 3.8.36217; WOW64; en-US)", "Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; .NET CLR 2.7.58687; SLCC2; Media Center PC 5.0; Zune 3.4; Tablet PC 3.6; InfoPath.3)", "Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 5.2; Trident/4.0; Media Center PC 4.0; SLCC1; .NET CLR 3.0.04320)", "Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; SLCC1; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET CLR 1.1.4322)", "Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; InfoPath.2; SLCC1; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET CLR 2.0.50727)", "Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727)", "Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 5.1; SLCC1; .NET CLR 1.1.4322)", "Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 5.0; Trident/4.0; InfoPath.1; SV1; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET CLR 3.0.04506.30)", "Mozilla/5.0 (compatible; MSIE 7.0; Windows NT 5.0; Trident/4.0; FBSMTWB; .NET CLR 2.0.34861; .NET CLR 3.0.3746.3218; .NET CLR 3.5.33652; msn OptimizedIE8;ENUS)", "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.2; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0)", "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; Media Center PC 6.0; InfoPath.2; MS-RTC LM 8)", "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; Media Center PC 6.0; InfoPath.2; MS-RTC LM 8", "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; Media Center PC 6.0; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C)", "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; InfoPath.3; .NET4.0C; .NET4.0E; .NET CLR 3.5.30729; .NET CLR 3.0.30729; MS-RTC LM 8)", "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; InfoPath.2)", "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; Zune 3.0)"], "safari": ["Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.75.14 (KHTML, like Gecko) Version/7.0.3 Safari/7046A194A", "Mozilla/5.0 (iPad; CPU OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A5355d Safari/8536.25", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/537.13+ (KHTML, like Gecko) Version/5.1.7 Safari/534.57.2", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/534.55.3 (KHTML, like Gecko) Version/5.1.3 Safari/534.53.10", "Mozilla/5.0 (iPad; CPU OS 5_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko ) Version/5.1 Mobile/9B176 Safari/7534.48.3", "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; de-at) AppleWebKit/533.21.1 (KHTML, like Gecko) Version/5.0.5 Safari/533.21.1", "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_7; da-dk) AppleWebKit/533.21.1 (KHTML, like Gecko) Version/5.0.5 Safari/533.21.1", "Mozilla/5.0 (Windows; U; Windows NT 6.1; tr-TR) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27", "Mozilla/5.0 (Windows; U; Windows NT 6.1; ko-KR) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27", "Mozilla/5.0 (Windows; U; Windows NT 6.1; fr-FR) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27", "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27", "Mozilla/5.0 (Windows; U; Windows NT 6.1; cs-CZ) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27", "Mozilla/5.0 (Windows; U; Windows NT 6.0; ja-JP) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27", "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27", "Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10_5_8; zh-cn) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27", "Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10_5_8; ja-jp) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27", "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_7; ja-jp) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27", "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_6; zh-cn) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27", "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_6; sv-se) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27", "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_6; ko-kr) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27", "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_6; ja-jp) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27", "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_6; it-it) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27", "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_6; fr-fr) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27", "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_6; es-es) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27", "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_6; en-us) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27", "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_6; en-gb) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27", "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_6; de-de) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27", "Mozilla/5.0 (Windows; U; Windows NT 6.1; sv-SE) AppleWebKit/533.19.4 (KHTML, like Gecko) Version/5.0.3 Safari/533.19.4", "Mozilla/5.0 (Windows; U; Windows NT 6.1; ja-JP) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.3 Safari/533.19.4", "Mozilla/5.0 (Windows; U; Windows NT 6.1; de-DE) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.3 Safari/533.19.4", "Mozilla/5.0 (Windows; U; Windows NT 6.0; hu-HU) AppleWebKit/533.19.4 (KHTML, like Gecko) Version/5.0.3 Safari/533.19.4", "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.3 Safari/533.19.4", "Mozilla/5.0 (Windows; U; Windows NT 6.0; de-DE) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.3 Safari/533.19.4", "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru-RU) AppleWebKit/533.19.4 (KHTML, like Gecko) Version/5.0.3 Safari/533.19.4", "Mozilla/5.0 (Windows; U; Windows NT 5.1; ja-JP) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.3 Safari/533.19.4", "Mozilla/5.0 (Windows; U; Windows NT 5.1; it-IT) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.3 Safari/533.19.4", "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.3 Safari/533.19.4", "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_7; en-us) AppleWebKit/534.16+ (KHTML, like Gecko) Version/5.0.3 Safari/533.19.4", "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_6; fr-ch) AppleWebKit/533.19.4 (KHTML, like Gecko) Version/5.0.3 Safari/533.19.4", "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_5; de-de) AppleWebKit/534.15+ (KHTML, like Gecko) Version/5.0.3 Safari/533.19.4", "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_5; ar) AppleWebKit/533.19.4 (KHTML, like Gecko) Version/5.0.3 Safari/533.19.4", "Mozilla/5.0 (Android 2.2; Windows; U; Windows NT 6.1; en-US) AppleWebKit/533.19.4 (KHTML, like Gecko) Version/5.0.3 Safari/533.19.4", "Mozilla/5.0 (Windows; U; Windows NT 6.1; zh-HK) AppleWebKit/533.18.1 (KHTML, like Gecko) Version/5.0.2 Safari/533.18.5", "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/533.19.4 (KHTML, like Gecko) Version/5.0.2 Safari/533.18.5", "Mozilla/5.0 (Windows; U; Windows NT 6.0; tr-TR) AppleWebKit/533.18.1 (KHTML, like Gecko) Version/5.0.2 Safari/533.18.5", "Mozilla/5.0 (Windows; U; Windows NT 6.0; nb-NO) AppleWebKit/533.18.1 (KHTML, like Gecko) Version/5.0.2 Safari/533.18.5", "Mozilla/5.0 (Windows; U; Windows NT 6.0; fr-FR) AppleWebKit/533.18.1 (KHTML, like Gecko) Version/5.0.2 Safari/533.18.5", "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-TW) AppleWebKit/533.19.4 (KHTML, like Gecko) Version/5.0.2 Safari/533.18.5", "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru-RU) AppleWebKit/533.18.1 (KHTML, like Gecko) Version/5.0.2 Safari/533.18.5", "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_8; zh-cn) AppleWebKit/533.18.1 (KHTML, like Gecko) Version/5.0.2 Safari/533.18.5"]}, "randomize": {"344": "chrome", "819": "firefox", "346": "chrome", "347": "chrome", "340": "chrome", "341": "chrome", "342": "chrome", "343": "chrome", "810": "internetexplorer", "811": "internetexplorer", "812": "internetexplorer", "813": "firefox", "348": "chrome", "349": "chrome", "816": "firefox", "817": "firefox", "737": "chrome", "719": "chrome", "718": "chrome", "717": "chrome", "716": "chrome", "715": "chrome", "714": "chrome", "713": "chrome", "712": "chrome", "711": "chrome", "710": "chrome", "421": "chrome", "129": "chrome", "420": "chrome", "423": "chrome", "422": "chrome", "425": "chrome", "619": "chrome", "424": "chrome", "427": "chrome", "298": "chrome", "299": "chrome", "296": "chrome", "297": "chrome", "294": "chrome", "295": "chrome", "292": "chrome", "293": "chrome", "290": "chrome", "291": "chrome", "591": "chrome", "590": "chrome", "593": "chrome", "592": "chrome", "595": "chrome", "594": "chrome", "597": "chrome", "596": "chrome", "195": "chrome", "194": "chrome", "197": "chrome", "196": "chrome", "191": "chrome", "190": "chrome", "193": "chrome", "192": "chrome", "270": "chrome", "271": "chrome", "272": "chrome", "273": "chrome", "274": "chrome", "275": "chrome", "276": "chrome", "277": "chrome", "278": "chrome", "279": "chrome", "569": "chrome", "497": "chrome", "524": "chrome", "525": "chrome", "526": "chrome", "527": "chrome", "520": "chrome", "521": "chrome", "522": "chrome", "523": "chrome", "528": "chrome", "529": "chrome", "449": "chrome", "448": "chrome", "345": "chrome", "443": "chrome", "442": "chrome", "441": "chrome", "440": "chrome", "447": "chrome", "446": "chrome", "445": "chrome", "444": "chrome", "47": "chrome", "108": "chrome", "109": "chrome", "102": "chrome", "103": "chrome", "100": "chrome", "101": "chrome", "106": "chrome", "107": "chrome", "104": "chrome", "105": "chrome", "902": "firefox", "903": "firefox", "39": "chrome", "38": "chrome", "906": "firefox", "907": "firefox", "904": "firefox", "905": "firefox", "33": "chrome", "32": "chrome", "31": "chrome", "30": "chrome", "37": "chrome", "36": "chrome", "35": "chrome", "34": "chrome", "641": "chrome", "640": "chrome", "643": "chrome", "642": "chrome", "645": "chrome", "644": "chrome", "438": "chrome", "439": "chrome", "436": "chrome", "437": "chrome", "434": "chrome", "435": "chrome", "432": "chrome", "433": "chrome", "430": "chrome", "431": "chrome", "826": "firefox", "339": "chrome", "338": "chrome", "335": "chrome", "334": "chrome", "337": "chrome", "336": "chrome", "331": "chrome", "330": "chrome", "333": "chrome", "332": "chrome", "559": "chrome", "745": "chrome", "854": "firefox", "818": "firefox", "856": "firefox", "857": "firefox", "850": "firefox", "851": "firefox", "852": "firefox", "0": "chrome", "858": "firefox", "859": "firefox", "748": "chrome", "6": "chrome", "43": "chrome", "99": "chrome", "98": "chrome", "91": "chrome", "90": "chrome", "93": "chrome", "92": "chrome", "95": "chrome", "94": "chrome", "97": "chrome", "96": "chrome", "814": "firefox", "815": "firefox", "153": "chrome", "740": "chrome", "741": "chrome", "742": "chrome", "743": "chrome", "744": "chrome", "558": "chrome", "746": "chrome", "747": "chrome", "555": "chrome", "554": "chrome", "557": "chrome", "556": "chrome", "551": "chrome", "550": "chrome", "553": "chrome", "552": "chrome", "238": "chrome", "239": "chrome", "234": "chrome", "235": "chrome", "236": "chrome", "237": "chrome", "230": "chrome", "231": "chrome", "232": "chrome", "233": "chrome", "1": "chrome", "155": "chrome", "146": "chrome", "147": "chrome", "618": "chrome", "145": "chrome", "142": "chrome", "143": "chrome", "140": "chrome", "141": "chrome", "612": "chrome", "613": "chrome", "610": "chrome", "611": "chrome", "616": "chrome", "617": "chrome", "148": "chrome", "149": "chrome", "46": "chrome", "154": "chrome", "948": "safari", "949": "safari", "946": "safari", "947": "safari", "944": "safari", "945": "safari", "942": "safari", "943": "safari", "940": "safari", "941": "safari", "689": "chrome", "688": "chrome", "685": "chrome", "684": "chrome", "687": "chrome", "686": "chrome", "681": "chrome", "680": "chrome", "683": "chrome", "682": "chrome", "458": "chrome", "459": "chrome", "133": "chrome", "132": "chrome", "131": "chrome", "130": "chrome", "137": "chrome", "136": "chrome", "135": "chrome", "134": "chrome", "494": "chrome", "495": "chrome", "139": "chrome", "138": "chrome", "490": "chrome", "491": "chrome", "492": "chrome", "493": "chrome", "24": "chrome", "25": "chrome", "26": "chrome", "27": "chrome", "20": "chrome", "21": "chrome", "22": "chrome", "23": "chrome", "28": "chrome", "29": "chrome", "820": "firefox", "407": "chrome", "406": "chrome", "405": "chrome", "404": "chrome", "403": "chrome", "402": "chrome", "401": "chrome", "400": "chrome", "933": "firefox", "932": "firefox", "931": "firefox", "930": "firefox", "937": "safari", "452": "chrome", "409": "chrome", "408": "chrome", "453": "chrome", "414": "chrome", "183": "chrome", "415": "chrome", "379": "chrome", "378": "chrome", "228": "chrome", "829": "firefox", "828": "firefox", "371": "chrome", "370": "chrome", "373": "chrome", "372": "chrome", "375": "chrome", "374": "chrome", "377": "chrome", "376": "chrome", "708": "chrome", "709": "chrome", "704": "chrome", "705": "chrome", "706": "chrome", "707": "chrome", "700": "chrome", "144": "chrome", "702": "chrome", "703": "chrome", "393": "chrome", "392": "chrome", "88": "chrome", "89": "chrome", "397": "chrome", "396": "chrome", "395": "chrome", "394": "chrome", "82": "chrome", "83": "chrome", "80": "chrome", "81": "chrome", "86": "chrome", "87": "chrome", "84": "chrome", "85": "chrome", "797": "internetexplorer", "796": "internetexplorer", "795": "internetexplorer", "794": "internetexplorer", "793": "internetexplorer", "792": "internetexplorer", "791": "internetexplorer", "790": "internetexplorer", "749": "chrome", "799": "internetexplorer", "798": "internetexplorer", "7": "chrome", "170": "chrome", "586": "chrome", "587": "chrome", "584": "chrome", "585": "chrome", "582": "chrome", "583": "chrome", "580": "chrome", "581": "chrome", "588": "chrome", "589": "chrome", "245": "chrome", "244": "chrome", "247": "chrome", "246": "chrome", "241": "chrome", "614": "chrome", "243": "chrome", "242": "chrome", "615": "chrome", "249": "chrome", "248": "chrome", "418": "chrome", "419": "chrome", "519": "chrome", "518": "chrome", "511": "chrome", "510": "chrome", "513": "chrome", "512": "chrome", "515": "chrome", "514": "chrome", "517": "chrome", "516": "chrome", "623": "chrome", "622": "chrome", "621": "chrome", "620": "chrome", "627": "chrome", "626": "chrome", "625": "chrome", "624": "chrome", "450": "chrome", "451": "chrome", "629": "chrome", "628": "chrome", "454": "chrome", "455": "chrome", "456": "chrome", "457": "chrome", "179": "chrome", "178": "chrome", "177": "chrome", "199": "chrome", "175": "chrome", "174": "chrome", "173": "chrome", "172": "chrome", "171": "chrome", "198": "chrome", "977": "opera", "182": "chrome", "975": "opera", "974": "opera", "973": "opera", "972": "opera", "971": "opera", "970": "opera", "180": "chrome", "979": "opera", "978": "opera", "656": "chrome", "599": "chrome", "654": "chrome", "181": "chrome", "186": "chrome", "187": "chrome", "184": "chrome", "185": "chrome", "652": "chrome", "188": "chrome", "189": "chrome", "658": "chrome", "653": "chrome", "650": "chrome", "651": "chrome", "11": "chrome", "10": "chrome", "13": "chrome", "12": "chrome", "15": "chrome", "14": "chrome", "17": "chrome", "16": "chrome", "19": "chrome", "18": "chrome", "863": "firefox", "862": "firefox", "865": "firefox", "864": "firefox", "867": "firefox", "866": "firefox", "354": "chrome", "659": "chrome", "44": "chrome", "883": "firefox", "882": "firefox", "881": "firefox", "880": "firefox", "887": "firefox", "886": "firefox", "885": "firefox", "884": "firefox", "889": "firefox", "888": "firefox", "116": "chrome", "45": "chrome", "657": "chrome", "355": "chrome", "322": "chrome", "323": "chrome", "320": "chrome", "321": "chrome", "326": "chrome", "327": "chrome", "324": "chrome", "325": "chrome", "328": "chrome", "329": "chrome", "562": "chrome", "201": "chrome", "200": "chrome", "203": "chrome", "202": "chrome", "205": "chrome", "204": "chrome", "207": "chrome", "206": "chrome", "209": "chrome", "208": "chrome", "779": "internetexplorer", "778": "internetexplorer", "77": "chrome", "76": "chrome", "75": "chrome", "74": "chrome", "73": "chrome", "72": "chrome", "71": "chrome", "70": "chrome", "655": "chrome", "567": "chrome", "79": "chrome", "78": "chrome", "359": "chrome", "358": "chrome", "669": "chrome", "668": "chrome", "667": "chrome", "666": "chrome", "665": "chrome", "664": "chrome", "663": "chrome", "662": "chrome", "661": "chrome", "660": "chrome", "215": "chrome", "692": "chrome", "693": "chrome", "690": "chrome", "691": "chrome", "696": "chrome", "697": "chrome", "694": "chrome", "695": "chrome", "698": "chrome", "699": "chrome", "542": "chrome", "543": "chrome", "540": "chrome", "541": "chrome", "546": "chrome", "547": "chrome", "544": "chrome", "545": "chrome", "8": "chrome", "548": "chrome", "549": "chrome", "598": "chrome", "869": "firefox", "868": "firefox", "120": "chrome", "121": "chrome", "122": "chrome", "123": "chrome", "124": "chrome", "125": "chrome", "126": "chrome", "127": "chrome", "128": "chrome", "2": "chrome", "219": "chrome", "176": "chrome", "214": "chrome", "563": "chrome", "928": "firefox", "929": "firefox", "416": "chrome", "417": "chrome", "410": "chrome", "411": "chrome", "412": "chrome", "413": "chrome", "920": "firefox", "498": "chrome", "922": "firefox", "923": "firefox", "924": "firefox", "925": "firefox", "926": "firefox", "927": "firefox", "319": "chrome", "318": "chrome", "313": "chrome", "312": "chrome", "311": "chrome", "310": "chrome", "317": "chrome", "316": "chrome", "315": "chrome", "314": "chrome", "921": "firefox", "496": "chrome", "832": "firefox", "833": "firefox", "830": "firefox", "831": "firefox", "836": "firefox", "837": "firefox", "834": "firefox", "835": "firefox", "838": "firefox", "839": "firefox", "3": "chrome", "368": "chrome", "369": "chrome", "366": "chrome", "367": "chrome", "364": "chrome", "365": "chrome", "362": "chrome", "363": "chrome", "360": "chrome", "361": "chrome", "218": "chrome", "380": "chrome", "861": "firefox", "382": "chrome", "383": "chrome", "384": "chrome", "385": "chrome", "386": "chrome", "387": "chrome", "388": "chrome", "389": "chrome", "784": "internetexplorer", "785": "internetexplorer", "786": "internetexplorer", "787": "internetexplorer", "780": "internetexplorer", "781": "internetexplorer", "782": "internetexplorer", "381": "chrome", "788": "internetexplorer", "789": "internetexplorer", "860": "firefox", "151": "chrome", "579": "chrome", "578": "chrome", "150": "chrome", "573": "chrome", "572": "chrome", "571": "chrome", "570": "chrome", "577": "chrome", "576": "chrome", "575": "chrome", "574": "chrome", "60": "chrome", "61": "chrome", "62": "chrome", "259": "chrome", "64": "chrome", "65": "chrome", "66": "chrome", "67": "chrome", "68": "chrome", "253": "chrome", "250": "chrome", "251": "chrome", "256": "chrome", "257": "chrome", "254": "chrome", "255": "chrome", "499": "chrome", "157": "chrome", "156": "chrome", "939": "safari", "731": "chrome", "730": "chrome", "733": "chrome", "938": "safari", "735": "chrome", "734": "chrome", "508": "chrome", "736": "chrome", "506": "chrome", "738": "chrome", "504": "chrome", "505": "chrome", "502": "chrome", "503": "chrome", "500": "chrome", "501": "chrome", "630": "chrome", "631": "chrome", "632": "chrome", "633": "chrome", "469": "chrome", "468": "chrome", "636": "chrome", "637": "chrome", "465": "chrome", "464": "chrome", "467": "chrome", "466": "chrome", "461": "chrome", "900": "firefox", "463": "chrome", "462": "chrome", "901": "firefox", "168": "chrome", "169": "chrome", "164": "chrome", "165": "chrome", "166": "chrome", "167": "chrome", "160": "chrome", "161": "chrome", "162": "chrome", "163": "chrome", "964": "safari", "965": "safari", "966": "safari", "967": "safari", "960": "safari", "961": "safari", "962": "safari", "963": "safari", "783": "internetexplorer", "968": "safari", "969": "opera", "936": "firefox", "935": "firefox", "934": "firefox", "908": "firefox", "909": "firefox", "722": "chrome", "426": "chrome", "878": "firefox", "879": "firefox", "876": "firefox", "877": "firefox", "874": "firefox", "875": "firefox", "872": "firefox", "873": "firefox", "870": "firefox", "871": "firefox", "9": "chrome", "890": "firefox", "891": "firefox", "892": "firefox", "893": "firefox", "894": "firefox", "647": "chrome", "896": "firefox", "897": "firefox", "898": "firefox", "899": "firefox", "646": "chrome", "649": "chrome", "648": "chrome", "357": "chrome", "356": "chrome", "809": "internetexplorer", "808": "internetexplorer", "353": "chrome", "352": "chrome", "351": "chrome", "350": "chrome", "803": "internetexplorer", "802": "internetexplorer", "801": "internetexplorer", "800": "internetexplorer", "807": "internetexplorer", "806": "internetexplorer", "805": "internetexplorer", "804": "internetexplorer", "216": "chrome", "217": "chrome", "768": "chrome", "769": "chrome", "212": "chrome", "213": "chrome", "210": "chrome", "211": "chrome", "762": "chrome", "763": "chrome", "760": "chrome", "761": "chrome", "766": "chrome", "767": "chrome", "764": "chrome", "765": "chrome", "40": "chrome", "41": "chrome", "289": "chrome", "288": "chrome", "4": "chrome", "281": "chrome", "280": "chrome", "283": "chrome", "282": "chrome", "285": "chrome", "284": "chrome", "287": "chrome", "286": "chrome", "678": "chrome", "679": "chrome", "674": "chrome", "675": "chrome", "676": "chrome", "677": "chrome", "670": "chrome", "671": "chrome", "672": "chrome", "673": "chrome", "263": "chrome", "262": "chrome", "261": "chrome", "260": "chrome", "267": "chrome", "266": "chrome", "265": "chrome", "264": "chrome", "269": "chrome", "268": "chrome", "59": "chrome", "58": "chrome", "55": "chrome", "54": "chrome", "57": "chrome", "56": "chrome", "51": "chrome", "258": "chrome", "53": "chrome", "52": "chrome", "537": "chrome", "536": "chrome", "535": "chrome", "63": "chrome", "533": "chrome", "532": "chrome", "531": "chrome", "530": "chrome", "152": "chrome", "539": "chrome", "538": "chrome", "775": "internetexplorer", "774": "internetexplorer", "982": "opera", "983": "opera", "980": "opera", "981": "opera", "777": "internetexplorer", "984": "opera", "50": "chrome", "115": "chrome", "252": "chrome", "117": "chrome", "776": "internetexplorer", "111": "chrome", "110": "chrome", "113": "chrome", "69": "chrome", "771": "chrome", "119": "chrome", "118": "chrome", "770": "chrome", "773": "internetexplorer", "772": "internetexplorer", "429": "chrome", "428": "chrome", "534": "chrome", "919": "firefox", "918": "firefox", "915": "firefox", "914": "firefox", "917": "firefox", "916": "firefox", "911": "firefox", "910": "firefox", "913": "firefox", "912": "firefox", "308": "chrome", "309": "chrome", "855": "firefox", "300": "chrome", "301": "chrome", "302": "chrome", "303": "chrome", "304": "chrome", "305": "chrome", "306": "chrome", "307": "chrome", "895": "firefox", "825": "firefox", "824": "firefox", "827": "firefox", "847": "firefox", "846": "firefox", "845": "firefox", "844": "firefox", "843": "firefox", "842": "firefox", "841": "firefox", "840": "firefox", "821": "firefox", "853": "firefox", "849": "firefox", "848": "firefox", "823": "firefox", "822": "firefox", "240": "chrome", "390": "chrome", "732": "chrome", "753": "chrome", "752": "chrome", "751": "chrome", "750": "chrome", "757": "chrome", "756": "chrome", "755": "chrome", "754": "chrome", "560": "chrome", "561": "chrome", "759": "chrome", "758": "chrome", "564": "chrome", "565": "chrome", "566": "chrome", "701": "chrome", "739": "chrome", "229": "chrome", "507": "chrome", "227": "chrome", "226": "chrome", "225": "chrome", "224": "chrome", "223": "chrome", "222": "chrome", "221": "chrome", "220": "chrome", "114": "chrome", "391": "chrome", "726": "chrome", "727": "chrome", "724": "chrome", "725": "chrome", "568": "chrome", "723": "chrome", "720": "chrome", "721": "chrome", "728": "chrome", "729": "chrome", "605": "chrome", "604": "chrome", "607": "chrome", "606": "chrome", "601": "chrome", "600": "chrome", "603": "chrome", "602": "chrome", "159": "chrome", "158": "chrome", "112": "chrome", "609": "chrome", "608": "chrome", "976": "opera", "634": "chrome", "399": "chrome", "635": "chrome", "959": "safari", "958": "safari", "398": "chrome", "48": "chrome", "49": "chrome", "951": "safari", "950": "safari", "953": "safari", "952": "safari", "42": "chrome", "954": "safari", "957": "safari", "956": "safari", "638": "chrome", "5": "chrome", "639": "chrome", "460": "chrome", "489": "chrome", "488": "chrome", "487": "chrome", "486": "chrome", "485": "chrome", "484": "chrome", "483": "chrome", "482": "chrome", "481": "chrome", "480": "chrome", "509": "chrome", "955": "safari", "472": "chrome", "473": "chrome", "470": "chrome", "471": "chrome", "476": "chrome", "477": "chrome", "474": "chrome", "475": "chrome", "478": "chrome", "479": "chrome"}}
--------------------------------------------------------------------------------
/Xray/pppXray.py:
--------------------------------------------------------------------------------
1 | import os
2 | import hashlib
3 | import Hx_config
4 |
5 |
6 | def logo():
7 | logo='''
8 | _ __ _ __ _ __
9 | | '_ \| '_ \| '_ \
10 | | |_) | |_) | |_) |
11 | | .__/| .__/| .__/
12 | | | | | | |
13 | |_| |_| |_|
14 | __ __
15 | \ \ / /
16 | \ V / _ __ __ _ _ _
17 | / \| '__/ _` | | | |
18 | / /^\ \ | | (_| | |_| |
19 | \/ \/_| \__,_|\__, |
20 | __/ |
21 | |___/
22 | v1.03
23 | author:springbird
24 | '''
25 | return logo
26 |
27 |
28 | def xrayScan(targeturl,outputfilename="test"):
29 | try:
30 | scanCommand="{} webscan {} --url \"{}\" --html-output {}\{}.html".format(Hx_config.Xray_Path, '--plugins {}'.format(Hx_config.plugins) if Hx_config.plugins else '', targeturl, Hx_config.Xray_temp_report_path, outputfilename)
31 | print(scanCommand)
32 | os.system(scanCommand)
33 | except Exception as e:
34 | print(e)
35 | pass
36 | return
37 |
38 |
39 | def pppGet(req_queue):
40 | while not req_queue.empty():
41 | try:
42 | target=req_queue.get()
43 | print("Now Xray Scan {}".format(target))
44 | outputfilename = hashlib.md5(target.encode("utf-8"))
45 | xrayScan(target.strip(), outputfilename.hexdigest())
46 | except Exception as e:
47 | print(e)
48 | pass
49 | print("Xray Scan End~")
50 | return
51 |
52 |
53 | def main():
54 | print(logo())
55 | xrayScan("http://127.0.0.1/")
56 | # pppGet()
57 | return
58 |
59 | if __name__ == '__main__':
60 | main()
--------------------------------------------------------------------------------
/base.py:
--------------------------------------------------------------------------------
1 | import aiohttp
2 | import asyncio
3 | import hashlib
4 | import os
5 | import re
6 | import shutil
7 |
8 | import Hx_config
9 | from ARL.ArlScan import Scan
10 | from CScan import CScan
11 | from JSmessage.jsfinder import JSFinder
12 | from OneForAll import oneforallMain
13 | from ServerJiang.jiangMain import SendNotice
14 | from Subfinder import subfinderMain
15 | from Sublist3r import Sublist3rMain
16 | from subDomainsBrute import subDomainsBruteMain
17 |
18 | '''
19 | init() 扫描初始化函数
20 | 功能:
21 | 初始化保存文件目录
22 | '''
23 |
24 |
25 | def init():
26 | try:
27 | if not os.path.exists(Hx_config.Save_path) or not os.path.exists(Hx_config.ARL_save_path) or not os.path.exists(
28 | Hx_config.Crawlergo_save_path):
29 | os.makedirs(Hx_config.Save_path)
30 | os.makedirs(Hx_config.Xray_report_path)
31 | os.makedirs(Hx_config.Xray_temp_report_path)
32 | os.makedirs(Hx_config.CScan_report_path)
33 | os.makedirs(Hx_config.Sub_report_path)
34 | os.makedirs(Hx_config.Temp_path)
35 | os.makedirs(Hx_config.JS_report_path)
36 | os.makedirs(Hx_config.ARL_save_path)
37 | os.makedirs(Hx_config.Crawlergo_save_path)
38 |
39 | except Exception as e:
40 | print(e)
41 | exit(0)
42 | print(f"{Hx_config.red}初始化完成{Hx_config.end}")
43 | return
44 |
45 |
46 | '''
47 | cleanTempXrayReport()函数
48 | 功能:删除xray临时报告目录下的全部文件
49 | '''
50 |
51 |
52 | def cleanTempXrayReport():
53 | shutil.rmtree("{}".format(Hx_config.Xray_temp_report_path))
54 | os.mkdir("{}".format(Hx_config.Xray_temp_report_path))
55 | return
56 |
57 |
58 | '''
59 | 函数 checkXrayVersion()
60 | 功能:
61 | 检测xray为社区版还是专业版
62 | 专业版返回 true
63 | 社区版返回 false
64 | '''
65 |
66 |
67 | def checkXrayVersion(content):
68 | if "snapshot" in content:
69 | return False
70 | return True
71 |
72 |
73 | '''
74 | 函数 advancedMergeReport(resultList)
75 | 功能:
76 | xray 专业版报告合并函数
77 | '''
78 |
79 |
80 | def advancedMergeReport(resultList):
81 | context = ""
82 | requestMd5Set = set()
83 | with open("{}\\advancedModelFile.html".format(Hx_config.Root_Path), 'r', encoding='utf-8') as f:
84 | context += f.read()
85 | for result in resultList:
86 | tempResultDict = eval(result)
87 | tempDetailRequest = tempResultDict["detail"]["request"]
88 | tempRequestMd5 = hashlib.md5(tempDetailRequest.encode('utf-8')).hexdigest()
89 | if tempRequestMd5 not in requestMd5Set:
90 | requestMd5Set.add(tempRequestMd5)
91 |
92 | result = "".format(result)
93 | context += result
94 | return context
95 |
96 |
97 | '''
98 | 函数 communityMergeReport(resultList)
99 | 功能:
100 | xray 社区版报告合并函数
101 | '''
102 |
103 |
104 | def communityMergeReport(resultList):
105 | context = ""
106 | requestMd5Set = set()
107 | with open("{}\\communityModelFile.html".format(Hx_config.Root_Path), 'r', encoding='utf-8') as f:
108 | context += f.read()
109 | for result in resultList:
110 | tempResultDict = eval(result)
111 | tempDetailRequest = tempResultDict["detail"]["snapshot"][0][0]
112 | tempRequestMd5 = hashlib.md5(tempDetailRequest.encode('utf-8')).hexdigest()
113 | if tempRequestMd5 not in requestMd5Set:
114 | requestMd5Set.add(tempRequestMd5)
115 |
116 | result = "".format(result)
117 | context += result
118 | return context
119 |
120 |
121 | '''
122 | mergeReport()函数
123 | 功能:合并报告
124 | 传入参数:目标保存文件名 filename
125 | 其中需要使用集合这种数据结构去除重复漏洞,其判断依据为:xray Request md5值
126 | '''
127 |
128 |
129 | def mergeReport(filename):
130 | reportList = os.listdir(Hx_config.Xray_temp_report_path)
131 | print(reportList)
132 | if len(reportList) == 0:
133 | return
134 |
135 | resultList = []
136 |
137 | pattern = re.compile(r'')
138 |
139 | for report in reportList:
140 | tempReport = "{}\\{}".format(Hx_config.Xray_temp_report_path, report)
141 | with open(tempReport, 'r', encoding='utf-8') as f:
142 | temp = f.read()
143 | result = pattern.findall(temp)
144 | resultList += result
145 | tempResult = eval(resultList[0])
146 | if 'snapshot' in tempResult["detail"]:
147 | context = communityMergeReport(resultList)
148 | else:
149 | context = advancedMergeReport(resultList)
150 | with open("{}\\{}.html".format(Hx_config.Xray_report_path, filename), 'w', encoding='utf-8') as f:
151 | f.write(context)
152 | cleanTempXrayReport()
153 |
154 | return
155 |
156 |
157 | '''
158 | transferJSFinder(url,filename)函数
159 | 参数:
160 | url 待扫描的URL
161 | filename 实际上为待扫描URL的MD5值,作为输出文件名的一部分
162 |
163 | 作用:
164 | 调用并魔改JSFinder代码
165 | 输出:
166 | 从JS中获取到的URL和subdomain
167 | 输出文件名为:
168 | output_url_filename="url_"+outputfilename
169 | output_subdomain_filename="subdomain"+outputfilename
170 | '''
171 |
172 |
173 | def transferJSFinder(url, filename):
174 | try:
175 | urls = JSFinder.find_by_url(url)
176 | JSFinder.giveresult(urls, url, filename)
177 | except Exception as e:
178 | print(f"{Hx_config.red}JSFinder ERROR!{Hx_config.end}")
179 | print(e)
180 | pass
181 |
182 |
183 | '''
184 | transferCScan(url,filename) 函数
185 | '''
186 |
187 |
188 | def transferCScan(url, filename):
189 | try:
190 | CScan.CScanConsole(url, filename)
191 | except Exception as e:
192 | print(f"{Hx_config.red}C段扫描出错!{Hx_config.end}")
193 | print(e)
194 | pass
195 |
196 |
197 | '''
198 | subScan(target) 函数
199 | 参数:
200 | target 待扫描的URL
201 | filename 扫描目标 target 的对应md5之后的十六进制
202 | 作用:
203 | 对输入的target进行子域名的收集,并将结果存储到队列sub_queue里
204 | 输出:
205 | 结果保存在队列sub_queue里面,传递给队列去重函数
206 | 子域名收集整合模块:
207 | OneForAll
208 | Knock
209 | subDomainsBrute
210 | Subfinder
211 | Sublist3r
212 | ...(可根据自己需要自行添加
213 | '''
214 |
215 |
216 | def subScan(target, filename):
217 | '''
218 | 调用四个子域名搜集模块,并将结果保存在 sub_queue 里面
219 | 使用 queueDeduplication 进行子域名 -> 网址的转换 ,同时检测存活
220 | :param target:
221 | :param filename:
222 | :return:
223 | '''
224 |
225 | Sub_report_path = Hx_config.Sub_report_path + filename + ".txt" # save_sub.txt
226 | if os.path.exists(Sub_report_path):
227 | print(f"{Hx_config.red}savesub/{filename}.txt文件存在, 跳过资产扫描{Hx_config.end}")
228 | queueDeduplication(filename)
229 | return # 存在subtxt文件则直接跳过以下扫描。
230 |
231 | try:
232 | oneforallMain.OneForAllScan(target)
233 | pass
234 | except Exception as e:
235 | print(f'{Hx_config.red}OneForAllScan error :{Hx_config.end}', e)
236 | try:
237 | subDomainsBruteMain.subDomainsBruteScan(target, filename)
238 | pass
239 | except Exception as e:
240 | print(f'{Hx_config.red}subDomainsBruteScan error :{Hx_config.end}', e)
241 | try:
242 | Sublist3rMain.Sublist3rScan(target)
243 | pass
244 | except Exception as e:
245 | print(f'{Hx_config.red}Sublist3rScan error :{Hx_config.end}', e)
246 | pass
247 | try:
248 | subfinderMain.subfinderScan(target, filename)
249 | pass
250 | except Exception as e:
251 | print(f'{Hx_config.red}subfinderScan error:{Hx_config.end}', e)
252 | pass
253 | try:
254 | queueDeduplication(filename)
255 | pass
256 | except Exception as e:
257 | print(f'{Hx_config.red}queueDeduplication error:{Hx_config.end}', e)
258 | pass
259 |
260 |
261 | '''
262 | urlCheck(url, f) 函数
263 | 参数:
264 | url 需要检测存活性的URL
265 | f 打开的文件流
266 | 作用:
267 | url存活性检测
268 | 输出:
269 | 返回是否的布尔值
270 | '''
271 |
272 |
273 | async def urlCheck(target, f):
274 | print(f"{Hx_config.blue}now url live check: {target}{Hx_config.end}")
275 | async with aiohttp.ClientSession() as session:
276 | try:
277 | async with session.get(target, headers=Hx_config.GetHeaders()) as resp:
278 | if resp.status < 400:
279 | Hx_config.target_queue.put(target) # 存活的url
280 | print(f"{Hx_config.green}now save :{target}{Hx_config.end}")
281 | f.write(f"{target}\n")
282 |
283 | except Exception as e:
284 | return
285 | return
286 |
287 |
288 | def urlCheck_threads(__list, f):
289 | loop = asyncio.get_event_loop()
290 | __tasks = [
291 | loop.create_task(urlCheck(url, f))
292 | for url in __list
293 | ]
294 | loop.run_until_complete(asyncio.wait(__tasks))
295 |
296 |
297 | '''
298 | queueDeduplication(filename) 队列去重函数
299 | 参数:
300 | filename 扫描目标 target 的对应md5之后的十六进制
301 | 作用:
302 | 对子域名队列sub_queue里面的元素进行去重、验活处理
303 | 输出:
304 | 结果保存在target_queue队列里面,存储到saveSub文件夹下对应filename.txt中并且成为待扫描的目标
305 | '''
306 |
307 |
308 | def queueDeduplication(filename):
309 | Sub_report_path = Hx_config.Sub_report_path + filename + ".txt" # save_sub.txt
310 | sub_set = set()
311 | while not Hx_config.sub_queue.empty():
312 | target = Hx_config.sub_queue.get()
313 | sub_set.add(target)
314 | length = len(sub_set)
315 | if os.path.exists(Sub_report_path):
316 | with open(Sub_report_path, 'r+') as f:
317 | lines = f.readlines()
318 | if len(lines) > 1: # 文件有内容
319 | for line in lines:
320 | if line.strip() not in ['\n\r', '\n', '']:
321 | Hx_config.target_queue.put(line.strip()) # 存活的url
322 | print(f"{Hx_config.yellow}queueDeduplication End~{Hx_config.end}")
323 | print(
324 | f"{Hx_config.green}信息收集子域名搜集完毕,数量:{Hx_config.target_queue.qsize()},保存文件名:{filename}{Hx_config.end}")
325 | SendNotice(f"信息收集子域名搜集完毕,数量:{length},保存文件名:{filename}") # server酱
326 | return
327 |
328 | with open(Sub_report_path, 'a+') as f:
329 | if len(sub_set) != 0:
330 | urlCheck_threads(list(sub_set), f) # 启动验活多线程
331 |
332 | print(f"{Hx_config.yellow}queueDeduplication End~{Hx_config.end}")
333 | SendNotice("信息收集子域名搜集完毕,数量:{},保存文件名:{}".format(length, filename))
334 | return
335 |
336 |
337 | '''
338 | 对没有添加http的url添加http
339 | '''
340 |
341 |
342 | def addHttpHeader(target):
343 | pattern = re.compile(r'^http')
344 | if not pattern.match(target.strip()):
345 | target = "https://" + target.strip()
346 | else:
347 | target = target.strip()
348 | return target
349 |
350 |
351 | '''
352 | checkBlackList(url)
353 | 检测目标URL是否在黑名单列表中
354 | '''
355 |
356 |
357 | def checkBlackList(url):
358 | for i in Hx_config.blacklist:
359 | if i in url:
360 | return False
361 | return True
362 |
363 |
364 | '''
365 | ARL扫描
366 | '''
367 |
368 |
369 | def ArlScan(name='', target=''):
370 | print(f"{Hx_config.yellow}This is ArlScan ~{Hx_config.end}")
371 | Scan(name, target).add_task()
372 |
373 |
374 | '''
375 | 将队列变成列表
376 | '''
377 |
378 |
379 | def from_queue_to_list(_queue):
380 | result = []
381 | while not _queue.empty():
382 | _ = Hx_config.target_queue.get() # 队列被掏空
383 | result.append(_.strip())
384 | for item in result: # 再次将队列填满,便于crawlergo动态爬虫使用
385 | Hx_config.target_queue.put(item)
386 |
387 | return result
388 |
389 |
390 | '''
391 | 将http去除
392 | oneforall的保存文件不带http。如果不进行过滤则无法打开文件
393 | '''
394 |
395 |
396 | def url_http_delete(url):
397 | if 'https://' in url:
398 | url = url[8:]
399 | if 'http://' in url:
400 | url = url[7:]
401 |
402 | return url
403 |
404 |
405 | '''
406 | 终极搜索文件方法,解决扫描的时候oneforall找文件的问题
407 | '''
408 |
409 |
410 | def get_filename(abs_path, name):
411 | for i in os.walk(abs_path):
412 | for j in i[2]:
413 | if j[0:-4] in name:
414 | return j
415 |
416 | return False
417 |
418 |
419 | '''
420 | 保存文件
421 | '''
422 |
423 |
424 | def save(__list, filepath='abs\\xxx.txt', host=''):
425 | with open(filepath, 'a+') as f:
426 | for i in __list:
427 | if i == host or i == host + '/':
428 | continue
429 | f.write(i.strip() + '\n')
430 |
431 |
432 | def main():
433 | a = set()
434 | a.add(1)
435 | a.add(2)
436 | print(list(a))
437 | return
438 |
439 |
440 | if __name__ == '__main__':
441 | main()
442 |
--------------------------------------------------------------------------------
/crawlergo/crawlergoMain.py:
--------------------------------------------------------------------------------
1 | import fnmatch
2 | import os
3 | import subprocess
4 |
5 | import simplejson
6 | import Hx_config
7 |
8 | ua = Hx_config.GetHeaders()
9 |
10 | # def GetHeaders():
11 | # headers = {'User-Agent': ua.random}
12 | # return headers
13 |
14 | '''
15 | 使用集合去除重复的URL
16 | 将去重后的URL存储进入queue队列
17 | '''
18 |
19 |
20 | def removeDuplicates(req_list):
21 | req_pool = set()
22 | try:
23 | for url in req_list:
24 | req_pool.add(url['url'].strip())
25 | except Exception as e:
26 | print(e)
27 | pass
28 | return req_pool
29 |
30 |
31 | '''
32 | 使用crawlergo进行目标页面URL的爬取
33 | '''
34 |
35 |
36 | def crawlergoGet(target):
37 | print(f"{Hx_config.yellow}Now crawlergoGet : {target}{Hx_config.end}")
38 | try:
39 | if jump_duplication(target) == 'pass':
40 | return 'pass'
41 | cmd = [Hx_config.crawlergo_Path, "-c", Hx_config.Chrome_Path, "-t", "10", "-f",
42 | "smart", "-o", "json", target]
43 | rsp = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
44 | output, error = rsp.communicate()
45 | # "--[Mission Complete]--" 是任务结束的分隔字符串
46 | result = simplejson.loads(output.decode().split("--[Mission Complete]--")[1])
47 | # print(result)
48 | req_list = result["req_list"]
49 |
50 | except Exception as e:
51 | print(e)
52 | req_list = []
53 | pass
54 | print(f"{Hx_config.yellow}target {target} crawlergo end~{Hx_config.end}")
55 | print(f"{Hx_config.green}crawlergo get url number {len(req_list)}{Hx_config.end}")
56 | return removeDuplicates(req_list)
57 |
58 |
59 | # 跳过已经完成爬取的host
60 | def jump_duplication(url):
61 | host = get_host(url)
62 | filenames = []
63 | for i in range(0, len(host)):
64 | _ = '.'.join(host[i::])
65 | filenames.append(_ + '.txt')
66 |
67 | del filenames[-2::]
68 |
69 | files = []
70 | complete_urls = []
71 | for root, dir, files in os.walk(r'save/saveCrawlergo'):
72 | pass
73 | for file in files:
74 | for filename in filenames:
75 | if fnmatch.fnmatch(filename, file):
76 | f = open(f'save//saveCrawlergo//{filename}', 'r')
77 | complete_urls = f.readlines()
78 | break
79 |
80 | for complete_url in complete_urls:
81 | if get_host(complete_url) == host:
82 | print(f"{Hx_config.yellow}target {url} exist, crawlergo pass~{Hx_config.end}")
83 | return 'pass'
84 |
85 |
86 | # 提取url里的host
87 | def get_host(url):
88 | host = url.split('.')
89 | end = host[-1]
90 | head = host[0]
91 | if ':' in end:
92 | end = end.split(':')[0]
93 | elif '/' in end:
94 | end = end.split('/')[0]
95 | if 'https://' in head or 'http://' in head:
96 | head = head.split('//')[-1]
97 | host[-1] = end
98 | host[0] = head
99 |
100 | return host
101 |
102 |
103 | def main():
104 | return
105 |
106 |
107 | if __name__ == '__main__':
108 | main()
109 |
--------------------------------------------------------------------------------
/dict/dns_servers.txt:
--------------------------------------------------------------------------------
1 | 119.29.29.29
2 | 182.254.116.116
3 | # 223.5.5.5
4 | # 223.6.6.6
5 | 114.114.115.115
6 | 114.114.114.114
7 |
--------------------------------------------------------------------------------
/dict/next_sub.txt:
--------------------------------------------------------------------------------
1 | test
2 | test2
3 | t
4 | dev
5 | 1
6 | 2
7 | 3
8 | s1
9 | s2
10 | s3
11 | admin
12 | adm
13 | a
14 | ht
15 | adminht
16 | webht
17 | web
18 | gm
19 | sys
20 | system
21 | manage
22 | manager
23 | mgr
24 | b
25 | c
26 | passport
27 | bata
28 | wei
29 | weixin
30 | wechat
31 | wx
32 | wiki
33 | upload
34 | ftp
35 | pic
36 | jira
37 | zabbix
38 | nagios
39 | bug
40 | bugzilla
41 | sql
42 | mysql
43 | db
44 | stmp
45 | pop
46 | imap
47 | mail
48 | zimbra
49 | exchange
50 | forum
51 | bbs
52 | list
53 | count
54 | counter
55 | img
56 | img01
57 | img02
58 | img03
59 | img04
60 | api
61 | cache
62 | js
63 | css
64 | app
65 | apps
66 | wap
67 | m
68 | sms
69 | zip
70 | monitor
71 | proxy
72 | update
73 | upgrade
74 | stat
75 | stats
76 | data
77 | portal
78 | blog
79 | autodiscover
80 | en
81 | search
82 | so
83 | oa
84 | database
85 | home
86 | sso
87 | help
88 | vip
89 | s
90 | w
91 | down
92 | download
93 | downloads
94 | dl
95 | svn
96 | git
97 | log
98 | staff
99 | vpn
100 | sslvpn
101 | ssh
102 | scanner
103 | sandbox
104 | ldap
105 | lab
106 | go
107 | demo
108 | console
109 | cms
110 | auth
111 | crm
112 | erp
113 | res
114 | static
115 | old
116 | new
117 | beta
118 | image
119 | service
120 | login
121 | 3g
122 | docs
123 | it
124 | e
125 | live
126 | library
127 | files
128 | i
129 | d
130 | cp
131 | connect
132 | gateway
133 | lib
134 | preview
135 | backup
136 | share
137 | status
138 | assets
139 | user
140 | vote
141 | bugs
142 | cas
143 | feedback
144 | id
145 | edm
146 | survey
147 | union
148 | ceshi
149 | dev1
150 | updates
151 | phpmyadmin
152 | pma
153 | edit
154 | master
155 | xml
156 | control
157 | profile
158 | zhidao
159 | tool
160 | toolbox
161 | boss
162 | activity
163 | www
164 |
--------------------------------------------------------------------------------
/dict/next_sub_full.txt:
--------------------------------------------------------------------------------
1 | test
2 | test2
3 | t
4 | dev
5 | 1
6 | 2
7 | 3
8 | s1
9 | s2
10 | s3
11 | admin
12 | adm
13 | a
14 | ht
15 | adminht
16 | webht
17 | web
18 | gm
19 | sys
20 | system
21 | manage
22 | manager
23 | mgr
24 | b
25 | c
26 | passport
27 | bata
28 | wei
29 | weixin
30 | wechat
31 | wx
32 | wiki
33 | upload
34 | ftp
35 | pic
36 | jira
37 | zabbix
38 | nagios
39 | bug
40 | bugzilla
41 | sql
42 | mysql
43 | db
44 | stmp
45 | pop
46 | imap
47 | mail
48 | zimbra
49 | exchange
50 | forum
51 | bbs
52 | list
53 | count
54 | counter
55 | img
56 | img01
57 | img02
58 | img03
59 | img04
60 | api
61 | cache
62 | js
63 | css
64 | app
65 | apps
66 | wap
67 | m
68 | sms
69 | zip
70 | monitor
71 | proxy
72 | update
73 | upgrade
74 | stat
75 | stats
76 | data
77 | portal
78 | blog
79 | autodiscover
80 | en
81 | search
82 | so
83 | oa
84 | database
85 | home
86 | sso
87 | help
88 | vip
89 | s
90 | w
91 | down
92 | download
93 | downloads
94 | dl
95 | svn
96 | git
97 | log
98 | staff
99 | vpn
100 | sslvpn
101 | ssh
102 | scanner
103 | sandbox
104 | ldap
105 | lab
106 | go
107 | demo
108 | console
109 | cms
110 | auth
111 | crm
112 | erp
113 | res
114 | static
115 | old
116 | new
117 | beta
118 | image
119 | service
120 | login
121 | 3g
122 | docs
123 | it
124 | e
125 | live
126 | library
127 | files
128 | i
129 | d
130 | cp
131 | connect
132 | gateway
133 | lib
134 | preview
135 | backup
136 | share
137 | status
138 | assets
139 | user
140 | vote
141 | bugs
142 | cas
143 | feedback
144 | id
145 | edm
146 | survey
147 | union
148 | ceshi
149 | dev1
150 | updates
151 | phpmyadmin
152 | pma
153 | edit
154 | master
155 | xml
156 | control
157 | profile
158 | zhidao
159 | tool
160 | toolbox
161 | boss
162 | activity
163 | www
164 | smtp
165 | webmail
166 | mx
167 | pop3
168 | ns1
169 | ns2
170 | webdisk
171 | www2
172 | news
173 | cpanel
174 | whm
175 | shop
176 | sip
177 | ns
178 | mobile
179 | www1
180 | email
181 | support
182 | mail2
183 | media
184 | lyncdiscover
185 | secure
186 | video
187 | my
188 | staging
189 | images
190 | dns
191 | info
192 | ns3
193 | mail1
194 | intranet
195 | cdn
196 | lists
197 | dns1
198 | www3
199 | dns2
200 | mobilemail
201 | store
202 | remote
203 | cn
204 | owa
205 | cs
206 | stage
207 | online
208 | jobs
209 | calendar
210 | community
211 | forums
212 | services
213 | dialin
214 | chat
215 | meet
216 | blogs
217 | hr
218 | office
219 | ww
220 | ftp2
221 | legacy
222 | b2b
223 | ns4
224 | v
225 | pda
226 | events
227 | av
228 | edu
229 | ads
230 | health
231 | es
232 | english
233 | ad
234 | extranet
235 | helpdesk
236 | training
237 | photo
238 | finance
239 | tv
240 | fr
241 | sc
242 | job
243 | cloud
244 | im
245 | careers
246 | game
247 | archive
248 | get
249 | gis
250 | access
251 | member
252 | mx1
253 | newsletter
254 | de
255 | qa
256 | direct
257 | alumni
258 | mx2
259 | hk
260 | sp
261 | gw
262 | relay
263 | jp
264 | content
265 | file
266 | citrix
267 | vpn2
268 | soft
269 | ssl
270 | server
271 | club
272 | ws
273 | host
274 | book
275 | www4
276 | sh
277 | tools
278 | mail3
279 | ms
280 | mailhost
281 | ca
282 | ntp
283 | ask
284 | sites
285 | sz
286 | spam
287 | wwww
288 | tw
289 | videos
290 | send
291 | music
292 | project
293 | uk
294 | start
295 | mall
296 | ns5
297 | outlook
298 | reports
299 | us
300 | partner
301 | mssql
302 | bj
303 | sharepoint
304 | link
305 | metrics
306 | partners
307 | smtp2
308 | webproxy
309 | mdm
310 | marketing
311 | ts
312 | security
313 | map
314 | ir
315 | fs
316 | origin
317 | travel
318 | feeds
319 | meeting
320 | u
321 | photos
322 | hq
323 | tj
324 | research
325 | pt
326 | members
327 | ru
328 | bm
329 | business
330 | eq
331 | cc
332 | w3
333 | student
334 | auto
335 | dx
336 | p
337 | rs
338 | dns3
339 | vc
340 | gmail
341 | uc
342 | press
343 | web1
344 | localhost
345 | ent
346 | tuan
347 | dj
348 | web2
349 | ss
350 | cnc
351 | vpn1
352 | pay
353 | time
354 | sx
355 | hd
356 | games
357 | lt
358 | projects
359 | g
360 | sales
361 | stream
362 | gb
363 | forms
364 | www5
365 | wt
366 | abc
367 | weather
368 | zb
369 | smtp1
370 | maps
371 | x
372 | register
373 | design
374 | radio
375 | software
376 | china
377 | math
378 | open
379 | view
380 | fax
381 | event
382 | pm
383 | test1
384 | alpha
385 | irc
386 | sg
387 | cq
388 | ftp1
389 | idc
390 | labs
391 | da
392 | directory
393 | developer
394 | reg
395 | catalog
396 | rss
397 | wh
398 | sd
399 | tg
400 | bb
401 | digital
402 | hb
403 | house
404 | site
405 | conference
406 | rt
407 | temp
408 | fw
409 | tz
410 | tech
411 | education
412 | biz
413 | f
414 | gallery
415 | gh
416 | car
417 | dc
418 | agent
419 | mis
420 | eng
421 | flash
422 | cx
423 | pub
424 | ticket
425 | doc
426 | card
427 | account
428 | code
429 | promo
430 | net
431 | kb
432 | jk
433 | social
434 | sports
435 | ems
436 | tp
437 | public
438 | mm
439 | pms
440 | mrtg
441 | as
442 | jw
443 | corp
444 | tr
445 | investor
446 | dm
447 | sts
448 | th
449 | bi
450 | 123
451 | st
452 | br
453 | wp
454 | art
455 | shopping
456 | global
457 | money
458 | prod
459 | students
460 | cj
461 | iphone
462 | vps
463 | ag
464 | food
465 | sb
466 | ly
467 | local
468 | sj
469 | server1
470 | testing
471 | brand
472 | sy
473 | buy
474 | life
475 | groups
476 | nl
477 | tour
478 | lms
479 | pro
480 | bc
481 | rtx
482 | hao
483 | exam
484 | fb
485 | in
486 | ams
487 | msoid
488 | idp
489 | vod
490 | cm
491 | dk
492 | hs
493 | usa
494 | ww2
495 | jwc
496 | lp
497 | rsc
498 | jd
499 | cf
500 | rms
501 | ec
502 | jabber
503 | streaming
504 | webdev
505 | dms
506 | investors
507 | bookstore
508 | kr
509 | cd
510 | corporate
511 | mail4
512 | fz
513 | order
514 | transfer
515 | hotel
516 | work
517 | bt
518 | au
519 | pages
520 | sm
521 | client
522 | r
523 | y
524 | audio
525 | cz
526 | ci
527 | se
528 | potala
529 | ch
530 | webservices
531 | dy
532 | cvs
533 | ra
534 | apple
535 | barracuda
536 | ip
537 | ja
538 | mkt
539 | archives
540 | www0
541 | intra
542 | gate
543 | youth
544 | internal
545 | mailgw
546 | customer
547 | linux
548 | registration
549 | movie
550 | mailgate
551 | q
552 | xx
553 | mx3
554 | mars
555 | phone
556 | desktop
557 | ds
558 | zz
559 | love
560 | show
561 | nc
562 | redmine
563 | ce
564 | pl
565 | wireless
566 | inside
567 | fx
568 | mp
569 | hz
570 | listserv
571 | analytics
572 | ks
573 | redirect
574 | accounts
575 | report
576 | hermes
577 | ae
578 | mobi
579 | ps
580 | edge
581 | resources
582 | img1
583 | law
584 | pr
585 | international
586 | ml
587 | trac
588 | rd
589 | market
590 | mailer
591 | cert
592 | hg
593 | cl
594 | img2
595 | development
596 | gs
597 | google
598 | space
599 | www6
600 | gd
601 | post
602 | voip
603 | ac
604 | push
605 | m2
606 | sq
607 | fc
608 | ar
609 | asp
610 | dr
611 | seo
612 | mobil
613 | sync
614 | kf
615 | be
616 | about
617 | mail01
618 | sns
619 | board
620 | pc
621 | links
622 | jj
623 | history
624 | mailman
625 | campus
626 | mms
627 | storage
628 | ns0
629 | cdn2
630 | cacti
631 | hy
632 | enterprise
633 | noc
634 | ic
635 | cgi
636 | track
637 | world
638 | act
639 | wl
640 | product
641 | ls
642 | sf
643 | affiliates
644 | android
645 | payment
646 | n
647 | gz
648 | web3
649 | learning
650 | signup
651 | z
652 | tao
653 | top
654 | wifi
655 | yy
656 | password
657 | cw
658 | wm
659 | ess
660 | ex
661 | resource
662 | print
663 | gc
664 | w2
665 | canada
666 | cr
667 | mc
668 | 0
669 | me
670 | keys
671 | sentry
672 | smtp3
673 | journal
674 | mt
675 | team
676 | orion
677 | edi
678 | test3
679 | tc
680 | main
681 | zs
682 | faq
683 | click
684 | hub
685 | tu
686 | golf
687 | phoenix
688 | bd
689 | build
690 | free
691 | ee
692 | int
693 | cdn1
694 | v2
695 | sa
696 | pos
697 | fi
698 | router
699 | rc
700 | mirror
701 | tracker
702 | ct
703 | special
704 | cal
705 | ns6
706 | atlas
707 | ids
708 | affiliate
709 | nj
710 | tt
711 | nz
712 | db1
713 | bg
714 | mercury
715 | family
716 | courses
717 | ipv6
718 | jupiter
719 | no
720 | venus
721 | nb
722 | beijing
723 | summer
724 | ma
725 | yp
726 | ocs
727 | star
728 | traveler
729 | multimedia
730 | fm
731 | study
732 | lb
733 | up
734 | shanghai
735 | bk
736 | www7
737 | join
738 | tfs
739 | feed
740 | h
741 | ns01
742 | php
743 | stock
744 | km
745 | books
746 | eu
747 | md
748 | 2013
749 | whois
750 | sw
751 | mailserver
752 | mb
753 | tms
754 | monitoring
755 | ys
756 | ga
757 | radius
758 | group
759 | mtest
760 | j
761 | www8
762 | wb
763 | m1
764 | billing
765 | aaa
766 | pf
767 | products
768 | faculty
769 | em
770 | opac
771 | cis
772 | xmpp
773 | nanjing
774 | taobao
775 | zp
776 | teacher
777 | co
778 | contact
779 | nt
780 | ky
781 | qq
782 | mp3
783 | gps
784 | hn
785 | users
786 | gl
787 | domain
788 | newsroom
789 | dh
790 | csc
791 | repo
792 | zw
793 | ismart
794 | pp
795 | gg
796 | wms
797 | ims
798 | www9
799 | 2014
800 | solutions
801 | at
802 | bak
803 | sl
804 | cwc
805 | firewall
806 | wordpress
807 | school
808 | nms
809 | developers
810 | pki
811 | pe
812 | v2-ag
813 | devel
814 | hp
815 | titan
816 | pluto
817 | kids
818 | sport
819 | mail5
820 | server2
821 | nas
822 | xh
823 | ap
824 | red
825 | mas
826 | translate
827 | dealer
828 | ipad
829 | demo2
830 | 2012
831 | dns4
832 | hh
833 | green
834 | dz
835 | hybrid
836 | discover
837 | adserver
838 | japan
839 | mi
840 | xf
841 | zeus
842 | am
843 | people
844 | aa
845 | win
846 | sk
847 | db2
848 | jenkins
849 | xb
850 | oss
851 | sdc
852 | wc
853 | its
854 | dw
855 | yun
856 | acs
857 | asia
858 | daj
859 | webadmin
860 | crl
861 | ebook
862 | mag
863 | csg
864 | blue
865 | bank
866 | one
867 | o
868 | horizon
869 | orders
870 | apis
871 | k
872 | l
873 | 4
874 | 5
875 | 6
876 | 7
877 | 8
878 | 9
879 | ab
880 | af
881 | ah
882 | ai
883 | aj
884 | ak
885 | al
886 | an
887 | ao
888 | aq
889 | aw
890 | ax
891 | ay
892 | az
893 | ba
894 | bf
895 | bh
896 | bl
897 | bn
898 | bo
899 | bp
900 | bq
901 | bs
902 | bu
903 | bv
904 | bw
905 | bx
906 | by
907 | bz
908 | cb
909 | cg
910 | ck
911 | cu
912 | cv
913 | cy
914 | dd
915 | df
916 | dg
917 | di
918 | dn
919 | do
920 | dp
921 | dq
922 | dt
923 | du
924 | dv
925 | ea
926 | eb
927 | ed
928 | ef
929 | eg
930 | eh
931 | ei
932 | ej
933 | ek
934 | el
935 | eo
936 | ep
937 | er
938 | et
939 | ev
940 | ew
941 | ey
942 | ez
943 | fa
944 | fd
945 | fe
946 | ff
947 | fg
948 | fh
949 | fj
950 | fk
951 | fl
952 | fn
953 | fo
954 | fp
955 | fq
956 | ft
957 | fu
958 | fv
959 | fy
960 | ge
961 | gf
962 | gi
963 | gj
964 | gk
965 | gn
966 | gp
967 | gq
968 | gr
969 | gt
970 | gu
971 | gv
972 | gx
973 | gy
974 | ha
975 | hc
976 | he
977 | hf
978 | hi
979 | hj
980 | hl
981 | hm
982 | ho
983 | hu
984 | hv
985 | hw
986 | hx
987 | ia
988 | ib
989 | ie
990 | if
991 | ig
992 | ih
993 | ii
994 | ij
995 | ik
996 | il
997 | io
998 | iq
999 | is
1000 | iu
1001 | iv
1002 | iw
1003 | ix
1004 | iy
1005 | iz
1006 | jb
1007 | jc
1008 | je
1009 | jf
1010 | jg
1011 | jh
1012 | ji
1013 | jl
1014 | jm
1015 | jn
1016 | jo
1017 | jq
1018 | jr
1019 | jt
1020 | ju
1021 | jv
1022 | jx
1023 | jy
1024 | jz
1025 | ka
1026 | kc
1027 | kd
1028 | ke
1029 | kg
1030 | kh
1031 | ki
1032 | kj
1033 | kk
1034 | kl
1035 | kn
1036 | ko
1037 | kp
1038 | kq
1039 | kt
1040 | ku
1041 | kv
1042 | kw
1043 | kx
1044 | kz
1045 | la
1046 | lc
1047 | ld
1048 | le
1049 | lf
1050 | lg
1051 | lh
1052 | li
1053 | lj
1054 | lk
1055 | ll
1056 | lm
1057 | ln
1058 | lo
1059 | lq
1060 | lr
1061 | lu
1062 | lv
1063 | lw
1064 | lx
1065 | lz
1066 | mf
1067 | mg
1068 | mh
1069 | mj
1070 | mk
1071 | mn
1072 | mo
1073 | mq
1074 | mr
1075 | mu
1076 | mv
1077 | mw
1078 | mz
1079 | na
1080 | nd
1081 | ne
1082 | nf
1083 | ng
1084 | nh
1085 | ni
1086 | nk
1087 | nm
1088 | nn
1089 | np
1090 | nq
1091 | nr
1092 | nu
1093 | nv
1094 | nw
1095 | nx
1096 | ny
1097 | ob
1098 | oc
1099 | od
1100 | oe
1101 | of
1102 | og
1103 | oh
1104 | oi
1105 | oj
1106 | ok
1107 | ol
1108 | om
1109 | on
1110 | oo
1111 | op
1112 | oq
1113 | or
1114 | os
1115 | ot
1116 | ou
1117 | ov
1118 | ow
1119 | ox
1120 | oy
1121 | oz
1122 | pa
1123 | pb
1124 | pd
1125 | pg
1126 | ph
1127 | pi
1128 | pj
1129 | pk
1130 | pn
1131 | po
1132 | pq
1133 | pu
1134 | pv
1135 | pw
1136 | px
1137 | py
1138 | pz
1139 | qb
1140 | qc
1141 | qd
1142 | qe
1143 | qf
1144 | qg
1145 | qh
1146 | qi
1147 | qj
1148 | qk
1149 | ql
1150 | qm
1151 | qn
1152 | qo
1153 | qp
1154 | qr
1155 | qs
1156 | qt
1157 | qu
1158 | qv
1159 | qw
1160 | qx
1161 | qy
1162 | qz
1163 | rb
1164 | re
1165 | rf
1166 | rg
1167 | rh
1168 | ri
1169 | rj
1170 | rk
1171 | rl
1172 | rm
1173 | rn
1174 | ro
1175 | rp
1176 | rq
1177 | rr
1178 | rv
1179 | rw
1180 | rx
1181 | ry
1182 | rz
1183 | si
1184 | sn
1185 | sr
1186 | su
1187 | sv
1188 | ta
1189 | tb
1190 | td
1191 | te
1192 | tf
1193 | ti
1194 | tk
1195 | tl
1196 | tm
1197 | tn
1198 | to
1199 | tq
1200 | tx
1201 | ty
1202 | ua
1203 | ub
1204 | ud
1205 | ue
1206 | uf
1207 | ug
1208 | uh
1209 | ui
1210 | uj
1211 | ul
1212 | um
1213 | un
1214 | uo
1215 | uq
1216 | ur
1217 | ut
1218 | uu
1219 | uv
1220 | uw
1221 | ux
1222 | uy
1223 | uz
1224 | va
1225 | vb
1226 | vd
1227 | ve
1228 | vf
1229 | vg
1230 | vh
1231 | vi
1232 | vj
1233 | vk
1234 | vl
1235 | vm
1236 | vn
1237 | vo
1238 | vp
1239 | vq
1240 | vr
1241 | vs
1242 | vt
1243 | vu
1244 | vv
1245 | vw
1246 | vx
1247 | vy
1248 | vz
1249 | wa
1250 | wd
1251 | we
1252 | wf
1253 | wg
1254 | wi
1255 | wj
1256 | wk
1257 | wn
1258 | wo
1259 | wq
1260 | wr
1261 | wu
1262 | wv
1263 | wy
1264 | wz
1265 | xa
1266 | xc
1267 | xd
1268 | xe
1269 | xg
1270 | xi
1271 | xj
1272 | xk
1273 | xl
1274 | xm
1275 | xn
1276 | xo
1277 | xp
1278 | xq
1279 | xr
1280 | xs
1281 | xt
1282 | xu
1283 | xv
1284 | xw
1285 | xy
1286 | xz
1287 | ya
1288 | yb
1289 | yc
1290 | yd
1291 | ye
1292 | yf
1293 | yg
1294 | yh
1295 | yi
1296 | yj
1297 | yk
1298 | yl
1299 | ym
1300 | yn
1301 | yo
1302 | yq
1303 | yr
1304 | yt
1305 | yu
1306 | yv
1307 | yw
1308 | yx
1309 | yz
1310 | za
1311 | zc
1312 | zd
1313 | ze
1314 | zf
1315 | zg
1316 | zh
1317 | zi
1318 | zj
1319 | zk
1320 | zl
1321 | zm
1322 | zn
1323 | zo
1324 | zq
1325 | zr
1326 | zt
1327 | zu
1328 | zv
1329 | zx
1330 | zy
--------------------------------------------------------------------------------
/dict/subnames_all_5_letters.txt:
--------------------------------------------------------------------------------
1 | {alphnum}
2 | {alphnum}{alphnum}
3 | {alphnum}{alphnum}{alphnum}
4 | {alphnum}{alphnum}{alphnum}{alphnum}
5 | {alphnum}{alphnum}{alphnum}{alphnum}{alphnum}
--------------------------------------------------------------------------------
/images/1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Cl0udG0d/HXnineTails/f894ca643841ea1221a30c657bf2e1c4b87eca25/images/1.png
--------------------------------------------------------------------------------
/images/2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Cl0udG0d/HXnineTails/f894ca643841ea1221a30c657bf2e1c4b87eca25/images/2.png
--------------------------------------------------------------------------------
/images/3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Cl0udG0d/HXnineTails/f894ca643841ea1221a30c657bf2e1c4b87eca25/images/3.png
--------------------------------------------------------------------------------
/images/Architecture.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Cl0udG0d/HXnineTails/f894ca643841ea1221a30c657bf2e1c4b87eca25/images/Architecture.png
--------------------------------------------------------------------------------
/images/Praise.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Cl0udG0d/HXnineTails/f894ca643841ea1221a30c657bf2e1c4b87eca25/images/Praise.png
--------------------------------------------------------------------------------
/images/image-20210817235656344.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Cl0udG0d/HXnineTails/f894ca643841ea1221a30c657bf2e1c4b87eca25/images/image-20210817235656344.png
--------------------------------------------------------------------------------
/images/image-20210817235844858.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Cl0udG0d/HXnineTails/f894ca643841ea1221a30c657bf2e1c4b87eca25/images/image-20210817235844858.png
--------------------------------------------------------------------------------
/images/image-20210818003323362.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Cl0udG0d/HXnineTails/f894ca643841ea1221a30c657bf2e1c4b87eca25/images/image-20210818003323362.png
--------------------------------------------------------------------------------
/images/image-20210818003406757.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Cl0udG0d/HXnineTails/f894ca643841ea1221a30c657bf2e1c4b87eca25/images/image-20210818003406757.png
--------------------------------------------------------------------------------
/images/image-20210818003639711.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Cl0udG0d/HXnineTails/f894ca643841ea1221a30c657bf2e1c4b87eca25/images/image-20210818003639711.png
--------------------------------------------------------------------------------
/images/image-20210818010542320.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Cl0udG0d/HXnineTails/f894ca643841ea1221a30c657bf2e1c4b87eca25/images/image-20210818010542320.png
--------------------------------------------------------------------------------
/pipei.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Cl0udG0d/HXnineTails/f894ca643841ea1221a30c657bf2e1c4b87eca25/pipei.py
--------------------------------------------------------------------------------
/requirements.txt:
--------------------------------------------------------------------------------
1 | -i https://mirrors.aliyun.com/pypi/simple/
2 | aiohttp==3.7.4
3 | aiocontextvars==0.2.2
4 | beautifulsoup4==4.9.3
5 | bs4==0.0.1
6 | certifi==2020.11.8
7 | chardet==3.0.4
8 | click==8.0.1
9 | colorama==0.4.4
10 | contextvars==2.4
11 | dnspython==2.0.0
12 | exrex==0.10.5
13 | fire==0.3.1
14 | future==0.18.2
15 | idna==2.10
16 | immutables==0.14
17 | loguru==0.5.3
18 | requests==2.25.0
19 | simplejson==3.17.2
20 | six==1.15.0
21 | soupsieve==2.0.1
22 | SQLAlchemy==1.3.20
23 | tenacity==6.2.0
24 | termcolor==1.1.0
25 | tqdm==4.54.0
26 | treelib==1.6.1
27 | urllib3==1.26.2
28 | win32-setctime==1.0.3
29 | win_unicode_console==0.5
30 | colorama==0.4.4
31 | aiodns==2.0.0
--------------------------------------------------------------------------------
/scan.py:
--------------------------------------------------------------------------------
1 | import click
2 | import getopt
3 | import hashlib
4 | import os
5 | import sys
6 | from concurrent.futures import ThreadPoolExecutor, wait, ALL_COMPLETED
7 |
8 | import Hx_config
9 | import base
10 | from ServerJiang.jiangMain import SendNotice
11 | from Xray import pppXray
12 | from crawlergo import crawlergoMain
13 | from waf import WAF
14 |
15 | '''
16 | 漏洞扫描控制主函数
17 | 参数:
18 | url
19 | 格式如:https://www.baidu.com
20 |
21 | 扫描联动工具:
22 | JS发现:
23 | JSfinder
24 | xray扫描:
25 | crawlergo动态爬虫 -> Xray高级版
26 | C段:
27 | 自写C段扫描函数
28 | '''
29 |
30 |
31 | def threadPoolDetailScan(temp_url, current_filename):
32 | pppXray.xrayScan(temp_url, current_filename)
33 | base.transferJSFinder(temp_url, current_filename)
34 | base.transferCScan(temp_url, current_filename)
35 | return
36 |
37 |
38 | def threadPoolScan(req_pool, filename, target):
39 | print("req_pool num is {}".format(len(req_pool)))
40 | thread = ThreadPoolExecutor(max_workers=Hx_config.ThreadNum)
41 | i = 0
42 | all_task = []
43 | while len(req_pool) != 0:
44 | # 将 req_pool 里的URL依次弹出并扫描
45 | temp_url = req_pool.pop()
46 | current_filename = hashlib.md5(temp_url.encode("utf-8")).hexdigest()
47 | # 调用 xray 进行扫描并保存
48 | # pppXray.xrayScan(temp_url, current_filename)
49 | i += 1
50 | one_t = thread.submit(pppXray.xrayScan, temp_url, current_filename)
51 | all_task.append(one_t)
52 | if i == 5 or len(req_pool) == 0:
53 | i = 0
54 | wait(all_task, return_when=ALL_COMPLETED)
55 | all_task = []
56 | base.mergeReport(filename)
57 | SendNotice("{} 花溪九尾扫描完毕".format(target))
58 |
59 |
60 | '''
61 | init() 扫描初始化函数
62 | 功能:
63 | 初始化保存文件目录
64 | 初始化扫描各参数
65 | attone=, attsrc=, attdetail=, readppp=, thread=,clean ,plugins=
66 |
67 | '''
68 |
69 |
70 | @click.command()
71 | @click.option('-a', '--attone', help='对单个URL,只进行crawlergo动态爬虫+xray扫描 例如 百度官网 python3 scan.py -a https://www.baidu.com',
72 | type=str)
73 | @click.option('-s', '--attsrc', help='对SRC资产,进行信息搜集+crawlergo+xray , 例如 百度SRC python3 scan.py -s baidu.com', type=str)
74 | @click.option('-d', '--attdetail',
75 | help='对SRC资产,进行信息搜集+crawlergo+xray+C段信息搜集+js敏感信息搜集 , 例如 百度SRC 输入 python3 scan.py -d baidu.com', type=str)
76 | @click.option('-t', '--thread', default=5, help='线程数量,默认线程为5 如 python3 scan.py -t 10 -a http://testphp.vulnweb.com/ ',
77 | type=int)
78 | @click.option('-r', '--readppp', help='读取待扫描txt文件,每行一个URL 对取出的每个URL进行 -a 扫描,如 python3 scan.py -t 10 -r target.txt',
79 | type=str)
80 | @click.option('-c', '--clean', help='对保存的漏洞相关报告进行清理,即清理save文件夹下的文件', is_flag=True)
81 | @click.option('-p', '--plugins', help='自定义xray插件 plugins')
82 | def init(attone, attsrc, attdetail, thread, readppp, clean, plugins):
83 | """
84 | 花溪九尾 懒狗必备\n
85 | https://github.com/Cl0udG0d/HXnineTails
86 | """
87 | base.init()
88 | Hx_config.ThreadNum = int(thread)
89 | if plugins:
90 | Hx_config.plugins = plugins
91 | if clean:
92 | Hx_config.delModel()
93 | sys.exit()
94 | if attone:
95 | oneFoxScan(attone)
96 | if attsrc:
97 | foxScan(attsrc)
98 | if attdetail:
99 | foxScanDetail(attdetail)
100 | if readppp:
101 | pppFoxScan(readppp)
102 | return
103 |
104 |
105 | def pppFoxScan(filename):
106 | print(f"{Hx_config.yellow}Start pppFoxScan,filename is {filename}{Hx_config.end}")
107 | try:
108 | with open(filename, 'r') as f:
109 | lines = f.readlines()
110 | for line in lines:
111 | target = line.strip()
112 | target = base.addHttpHeader(target)
113 | Hx_config.ppp_queue.put(target)
114 | except Exception as e:
115 | print(e)
116 | pass
117 | while not Hx_config.ppp_queue.empty():
118 | current_target = Hx_config.ppp_queue.get()
119 | # 对搜集到的目标挨个进行扫描
120 | currentfilename = hashlib.md5(current_target.encode("utf-8")).hexdigest()
121 | if base.checkBlackList(current_target):
122 | req_pool = crawlergoMain.crawlergoGet(current_target)
123 | if req_pool == 'pass':
124 | continue
125 | req_pool.add(current_target)
126 | # 对目标网址使用 crawlergoGet 页面URL动态爬取,保存在 req_pool 集合里
127 | threadPoolScan(req_pool, currentfilename, current_target)
128 | else:
129 | print("扫描网址在黑名单内,退出")
130 | print(f"{Hx_config.yellow}pppFoxScan End~{Hx_config.end}")
131 | return
132 |
133 |
134 | '''
135 | oneFoxScan(target)函数
136 | 针对某一目标网址进行扫描而非对某一资产下的网址进行扫描,输入案例: www.baidu.com
137 | 扫描流程: 输入URL正确性检查+crawlergo+xray
138 | '''
139 |
140 |
141 | def oneFoxScan(target):
142 | if base.checkBlackList(target):
143 | target = base.addHttpHeader(target)
144 | filename = hashlib.md5(target.encode("utf-8")).hexdigest()
145 | print(f"{Hx_config.yellow}Start foxScan {target}\nfilename : {filename}\n{Hx_config.end}")
146 | req_pool = crawlergoMain.crawlergoGet(target)
147 | # 对目标网址使用 crawlergoGet 页面URL动态爬取,保存在 req_pool 集合里
148 | req_pool.add(target)
149 | threadPoolScan(req_pool, filename, target)
150 | else:
151 | print("扫描网址在黑名单内,退出")
152 | print(f"{Hx_config.yellow}InPuT T4rGet {target} Sc3n EnD#{Hx_config.end}")
153 | return
154 |
155 |
156 | '''
157 | 花溪九尾主函数
158 | foxScan(target) 函数
159 | 参数:
160 | target 待扫描的URL 示例:baidu.com
161 | 作用:
162 | 对输入的目标进行子域名收集 -> 存储去重 -> crawlergo动态爬虫 -> Xray高级版漏洞扫描
163 | ↓
164 | ARL资产管理+漏洞扫描
165 | 输出:
166 | 对应阶段性结果都会保存在save 文件夹下对应的目录里面
167 | '''
168 |
169 |
170 | def foxScan(target):
171 | filename = hashlib.md5(target.encode("utf-8")).hexdigest()
172 | print(f"{Hx_config.yellow}{Hx_config.green}Start attsrc foxScan {target}\nfilename : {filename}\n{Hx_config.end}")
173 | base.subScan(target, filename)
174 | # 将队列列表化并进行子域名搜集
175 | _ = base.from_queue_to_list(Hx_config.target_queue)
176 | base.ArlScan(name=target, target=_) # 启动ARL扫描,第一个参数target表示文件名
177 | print(f"{Hx_config.yellow}InPuT T4rGet {target} Sc3n Start!{Hx_config.end}")
178 | while not Hx_config.target_queue.empty():
179 | current_target = base.addHttpHeader(Hx_config.target_queue.get())
180 | try:
181 | if base.checkBlackList(current_target):
182 | # 对搜集到的目标挨个进行扫描
183 | req_pool = crawlergoMain.crawlergoGet(current_target) # 返回crawlergoGet结果列表,是多个url路径
184 | req_pool.add(current_target) # 添加自己本身到该列表里
185 | req_pool = WAF(req_pool).run_detect()
186 | base.save(req_pool, filepath=f"{Hx_config.Crawlergo_save_path}{target}.txt", host=current_target)
187 | tempFilename = hashlib.md5(current_target.encode("utf-8")).hexdigest()
188 | # 对目标网址使用 crawlergoGet 页面URL动态爬取,保存在 req_pool 集合里
189 | threadPoolScan(req_pool, tempFilename, target)
190 | except:
191 | pass
192 | print(f"{Hx_config.yellow}InPuT T4rGet {target} Sc3n EnD#{Hx_config.end}")
193 | return
194 |
195 |
196 | '''
197 | foxScanDetail(target)
198 | 对于输入SRC进行详细的信息搜集+扫描
199 | 耗时很长+为防止遗漏搜集了部分重复信息(不建议使用
200 | 作用:
201 | -> JS敏感信息提取
202 | 对输入的目标进行子域名收集 -> 存储去重 -> crawlergo动态爬虫 -> Xray高级版漏洞扫描
203 | -> C段信息收集
204 | 输出:
205 | 对应阶段性结果都会保存在save 文件夹下对应的目录里面
206 | '''
207 |
208 |
209 | def foxScanDetail(target):
210 | thread = ThreadPoolExecutor(Hx_config.ThreadNum)
211 | filename = hashlib.md5(target.encode("utf-8")).hexdigest()
212 | print(f"{Hx_config.yellow}Start attsrc foxScan {target}\nfilename : {filename}\n{Hx_config.end}")
213 | base.subScan(target, filename)
214 | # 进行子域名搜集
215 | while not Hx_config.target_queue.empty():
216 | current_target = Hx_config.target_queue.get()
217 | # 对搜集到的目标挨个进行扫描
218 | if base.checkBlackList(current_target):
219 | req_pool = crawlergoMain.crawlergoGet(current_target)
220 | req_pool.add(current_target)
221 | i = 0
222 | all_task = []
223 | while len(req_pool) != 0:
224 | # 将 req_pool 里的URL依次弹出并扫描
225 | temp_url = req_pool.pop()
226 | current_filename = hashlib.md5(temp_url.encode("utf-8")).hexdigest()
227 | i += 1
228 | one_t = thread.submit(threadPoolDetailScan, temp_url, current_filename)
229 | all_task.append(one_t)
230 | if i == 5 or len(req_pool) == 0:
231 | i = 0
232 | wait(all_task, return_when=ALL_COMPLETED)
233 | all_task = []
234 | else:
235 | print("扫描网址在黑名单内,退出")
236 | print(f"{Hx_config.yellow}InPuT T4rGet {target} Sc3n EnD#{Hx_config.end}")
237 | return
238 |
239 |
240 | '''
241 | 单元测试代码
242 | 支持三个攻击参数:
243 | 1,-a --attone 对单个URL,只进行crawlergo动态爬虫+xray扫描 例如 百度官网 输入 https://www.baidu.com
244 | 2,-s --attsrc 对SRC资产,进行信息搜集+ARL+crawlergo+xray , 例如 百度SRC 输入 baidu.com
245 | 3,-d --attdetail 对SRC资产,进行信息搜集+crawlergo+xray+C段信息搜集+js敏感信息搜集 , 例如 百度SRC 输入 baidu.com
246 | '''
247 |
248 |
249 | def main():
250 | try:
251 | Hx_config.logo()
252 | init.main(standalone_mode=False)
253 | except Exception as e:
254 | print(e)
255 | pass
256 |
257 |
258 | # def main(argv):
259 | # config.logo()
260 | # base.init()
261 | # try:
262 | # opts, args = getopt.getopt(argv, "ha:s:d:r:t:c",
263 | # ["help", "attone=", "attsrc=", "attdetail=", "readppp=", "thread=", "clean"])
264 | # except getopt.GetoptError:
265 | # config.scanHelp()
266 | # sys.exit(2)
267 | # for opt, arg in opts:
268 | # target = arg.strip('/') # 因为url后缀带有\会造成oneforall保存错误
269 | # filename = arg
270 | # if opt in ("-h", "--help"):
271 | # config.scanHelp()
272 | # sys.exit()
273 | # elif opt in ("-t", "--thread"):
274 | # config.ThreadNum = int(arg)
275 | # elif opt in ("-a", "--attone"):
276 | # oneFoxScan(target)
277 | # elif opt in ("-s", "--attsrc"):
278 | # foxScan(target)
279 | # elif opt in ("-d", "--attdetail"):
280 | # foxScanDetail(target)
281 | # elif opt in ("-r", "--readppp"):
282 | # pppFoxScan(filename)
283 | # elif opt in ("-c", "--clean"):
284 | # config.delModel()
285 | # sys.exit()
286 | # else:
287 | # config.scanHelp()
288 | # sys.exit()
289 | # return
290 |
291 |
292 | if __name__ == '__main__':
293 | main()
294 |
--------------------------------------------------------------------------------
/subDomainsBrute/subDomainsBruteMain.py:
--------------------------------------------------------------------------------
1 | import os
2 |
3 | import Hx_config
4 | import base
5 |
6 | '''
7 | subDomainsBruteScan(target) 函数
8 | 参数:
9 | target 需要收集子域名的目标 例如:baidu.com
10 | 作用:
11 | 使用subDomainsBrute进行子域名收集 并且将结果存储到 sub_queue 队列中
12 | 输出:
13 | 无
14 | '''
15 |
16 |
17 | def subDomainsBruteScan(target, filename):
18 | print(f"{Hx_config.yellow}{target} subDomainsBruteScan Scan Start ~{Hx_config.end}")
19 | subDomainsBrute_py = '{}subDomainsBrute.py'.format(Hx_config.subDomainsBrute_Path)
20 | saveFilePath = '{}{}.txt'.format(Hx_config.Temp_path, base.url_http_delete(filename))
21 | scanCommand = "{} {} -t 10 --output {} {}".format(Hx_config.PYTHON, subDomainsBrute_py, saveFilePath,
22 | base.url_http_delete(target))
23 | print(f"{Hx_config.blue}{scanCommand}{Hx_config.end}")
24 | os.system(scanCommand)
25 | if os.path.exists(saveFilePath):
26 | f = open(saveFilePath)
27 | lines = f.readlines()
28 | for line in lines:
29 | temp_url = line.split()[0].rstrip('\n')
30 | # print(temp_url)
31 | Hx_config.sub_queue.put(temp_url)
32 | f.close()
33 | print(f"{Hx_config.yellow}{target} subDomainsBruteScan Scan End ~{Hx_config.end}")
34 | print(f"{Hx_config.green}subdomainsbrute 结束 !当前的url个数为{Hx_config.sub_queue.qsize()}{Hx_config.end}")
35 | return
36 |
37 |
38 | def main():
39 | # filename=hash('baidu.com')
40 | subDomainsBruteScan('wkj.work', "aa")
41 | return
42 |
43 |
44 | if __name__ == '__main__':
45 | main()
46 |
--------------------------------------------------------------------------------
/test.py:
--------------------------------------------------------------------------------
1 | import json
2 | import random
3 | def GetHeaders():
4 | try:
5 | with open('Useragent.json', 'r') as f:
6 | data = json.load(f)
7 | data_browsers =data['browsers']
8 | data_randomize = list(data['randomize'].values())
9 | browser = random.choice(data_randomize)
10 | headers = {'User-Agent': random.choice(data_browsers[browser])}
11 |
12 | return headers
13 | except Exception as e:
14 | exit("[*]Hx_config.py : GetHeaders error!")
15 |
--------------------------------------------------------------------------------
/waf.py:
--------------------------------------------------------------------------------
1 | import re
2 | import requests
3 | from concurrent.futures import ThreadPoolExecutor, as_completed
4 | from urllib.parse import urlparse
5 |
6 | import Hx_config
7 |
8 | '''
9 | 输入:待检测的url列表
10 | 功能:检测该url是否有waf
11 | 输出:没有waf的列表
12 | '''
13 |
14 |
15 | class WAF(object):
16 | def __init__(self, __list):
17 | self.__list = __list
18 | self.__result = []
19 | self.__waf_info()
20 |
21 | def __once_detect(self, url):
22 | headers = Hx_config.GetHeaders()
23 | headers["Referer"] = url
24 | try:
25 | resp = requests.get(url, headers=headers, timeout=3)
26 | if resp.status_code < 400:
27 | if self.__identify(resp.headers, resp.text):
28 | parse = urlparse(resp.url)
29 | new_url = "%s://%s/" % (parse.scheme, parse.netloc)
30 | self.__result.append(new_url)
31 | self.__result.append(url)
32 | except:
33 | print(f"{Hx_config.red}WAF~ {url} 网络连接失败{Hx_config.end}")
34 |
35 | return
36 |
37 | def run_detect(self):
38 | print(f"{Hx_config.green}WAF检测中~{Hx_config.end}")
39 | with ThreadPoolExecutor() as pool:
40 | pool.map(self.__once_detect, self.__list)
41 | as_completed(True)
42 |
43 | print(f"{Hx_config.blue}检测完毕,没有WAF的url:")
44 | for item in list(set(self.__result)):
45 | print(item)
46 |
47 | print(Hx_config.end)
48 |
49 | return list(set(self.__result))
50 |
51 | def __waf_info(self):
52 | self.__mark_list = []
53 | all_waf = '''WAF:Topsec-Waf|index|index||
54 | WAF:360|headers|X-Powered-By-360wzb|wangzhan\.360\.cn
55 | WAF:360|url|/wzws-waf-cgi/|360wzws
56 | WAF:Anquanbao|headers|X-Powered-By-Anquanbao|MISS
57 | WAF:Anquanbao|url|/aqb_cc/error/|ASERVER
58 | WAF:BaiduYunjiasu|headers|Server|yunjiasu-nginx
59 | WAF:BigIP|headers|Server|BigIP|BIGipServer
60 | WAF:BigIP|headers|Set-Cookie|BigIP|BIGipServer
61 | WAF:BinarySEC|headers|x-binarysec-cache|fill|miss
62 | WAF:BinarySEC|headers|x-binarysec-via|binarysec\.com
63 | WAF:BlockDoS|headers|Server|BlockDos\.net
64 | WAF:CloudFlare|headers|Server|cloudflare-nginx
65 | WAF:Cloudfront|headers|Server|cloudfront
66 | WAF:Cloudfront|headers|X-Cache|cloudfront
67 | WAF:Comodo|headers|Server|Protected by COMODO
68 | WAF:IBM-DataPower|headers|X-Backside-Transport|\A(OK|FAIL)
69 | WAF:DenyAll|headers|Set-Cookie|\Asessioncookie=
70 | WAF:dotDefender|headers|X-dotDefender-denied|1
71 | WAF:Incapsula|headers|X-CDN|Incapsula
72 | WAF:Jiasule|headers|Set-Cookie|jsluid=
73 | WAF:KSYUN|headers|Server|KSYUN ELB
74 | WAF:KONA|headers|Server|AkamaiGHost
75 | WAF:ModSecurity|headers|Server|Mod_Security|NOYB
76 | WAF:NetContinuum|headers|Cneonction|\Aclose
77 | WAF:NetContinuum|headers|nnCoection|\Aclose
78 | WAF:NetContinuum|headers|Set-Cookie|citrix_ns_id
79 | WAF:Newdefend|headers|Server|newdefend
80 | WAF:NSFOCUS|headers|Server|NSFocus
81 | WAF:Safe3|headers|X-Powered-By|Safe3WAF
82 | WAF:Safe3|headers|Server|Safe3 Web Firewall
83 | WAF:Safedog|headers|X-Powered-By|WAF/2\.0
84 | WAF:Safedog|headers|Server|Safedog
85 | WAF:Safedog|headers|Set-Cookie|Safedog
86 | WAF:SonicWALL|headers|Server|SonicWALL
87 | WAF:Stingray|headers|Set-Cookie|\AX-Mapping-
88 | WAF:Sucuri|headers|Server|Sucuri/Cloudproxy
89 | WAF:Usp-Sec|headers|Server|Secure Entry Server
90 | WAF:Varnish|headers|X-Varnish|.*?
91 | WAF:Varnish|headers|Server|varnish
92 | WAF:Wallarm|headers|Server|nginx-wallarm
93 | WAF:WebKnight|headers|Server|WebKnight
94 | WAF:Yundun|headers|Server|YUNDUN
95 | WAF:Yundun|headers|X-Cache|YUNDUN
96 | WAF:Yunsuo|headers|Set-Cookie|yunsuo
97 | '''
98 | marks = all_waf.strip().splitlines() # 按行显示
99 | for mark in marks:
100 | name, location, key, value = mark.strip().split("|", 3)
101 | self.__mark_list.append([name, location, key, value])
102 |
103 | def __identify(self, header, html):
104 | for line in self.__mark_list:
105 | name, location, key, reg = line
106 | if location == "headers":
107 | if key in header and re.search(reg, header[key], re.I):
108 | return False
109 | elif location == "index":
110 | if re.search(reg, html, re.I):
111 | return False
112 |
113 | return True
114 |
115 |
116 | if __name__ == '__main__':
117 | list1 = WAF(['http://59.63.200.79:8014/dom_xss/', 'https://qq.com'])
118 | list1.run_detect()
119 |
--------------------------------------------------------------------------------