diff --git a/Interlace/lib/core/__version__.py b/Interlace/lib/core/__version__.py index 4189194..e5c3f41 100644 --- a/Interlace/lib/core/__version__.py +++ b/Interlace/lib/core/__version__.py @@ -1,2 +1,2 @@ -__version__ = '1.3.5' +__version__ = '1.4.0' diff --git a/Interlace/lib/core/input.py b/Interlace/lib/core/input.py index a377a96..9d33c7d 100644 --- a/Interlace/lib/core/input.py +++ b/Interlace/lib/core/input.py @@ -6,6 +6,7 @@ from os import access, W_OK import sys from re import compile from random import sample +from math import ceil class InputHelper(object): @@ -67,11 +68,28 @@ class InputHelper(object): test = list() if not variable in sample(commands, 1)[0]: - return commands + return commands for replacement in replacements: for command in commands: - test.append(str(command).replace(variable, str(replacement))) + test.append(str(command).replace(variable, str(replacement))) + + tmp_commands.update(test) + return tmp_commands + + @staticmethod + def _replace_variable_array(commands, variable, replacement): + tmp_commands = set() + counter = 0 + + test = list() + + if not variable in sample(commands, 1)[0]: + return commands + + for command in commands: + test.append(str(command).replace(variable, str(replacement[counter]))) + counter += 1 tmp_commands.update(test) return tmp_commands @@ -124,7 +142,7 @@ class InputHelper(object): targetFile = sys.stdin for target in targetFile: if target.strip(): - ranges.add(target.strip()) + ranges.add(target.strip()) # process exclusions first if arguments.exclusions: @@ -207,6 +225,18 @@ class InputHelper(object): else: protocols = arguments.proto final_commands = InputHelper._replace_variable_for_commands(final_commands, "_proto_", protocols) + + # process proxies + if arguments.proxy_list: + proxy_list = list() + for proxy in arguments.proxy_list: + if proxy.strip(): + proxy_list.append(proxy.strip()) + + if len(proxy_list) < len(final_commands): + proxy_list = ceil(len(final_commands) / len(proxy_list)) * proxy_list + + final_commands = InputHelper._replace_variable_array(final_commands, "_proxy_", proxy_list) return final_commands @@ -272,6 +302,13 @@ class InputParser(object): type=lambda x: InputHelper.check_positive(parser, x) ) + parser.add_argument( + '-pL', dest='proxy_list', required=False, + help='Specify a list of proxies.', + metavar="FILE", + type=lambda x: InputHelper.readable_file(parser, x) + ) + commands = parser.add_mutually_exclusive_group(required=True) commands.add_argument( '-c', dest='command', diff --git a/Interlace/lib/core/output.py b/Interlace/lib/core/output.py index b5abd0f..3151670 100644 --- a/Interlace/lib/core/output.py +++ b/Interlace/lib/core/output.py @@ -12,14 +12,14 @@ class OutputHelper(object): self.verbose = arguments.verbose self.silent = arguments.silent - self.seperator = "==============================================" + self.seperator = "=================================================================================" def print_banner(self): if self.silent: return print(self.seperator) - print("Interlace v%s\tby Michael Skelton (@codingo_)" % __version__) + print("Interlace v%s\tby Michael Skelton (@codingo_) & Sajeeb Lohani (@sml555_)" % __version__) print(self.seperator) def terminal(self, level, target, command, message=""): diff --git a/README.md b/README.md index 2d1d9f9..7618c30 100644 --- a/README.md +++ b/README.md @@ -29,6 +29,7 @@ Dependencies will then be installed and Interlace will be added to your path as | -cL | Specify a list of commands to execute over each target or domain | | -o | Specify an output folder variable that can be used in commands as \_output\_ | | -p | Specify a list of port variable that can be used in commands as \_port\_. This can be a single port, a comma delimited list, or use dash notation | +| -pL | Specify a list of proxies | | --proto | Specify protocols that can be used in commands as \_proto\_ | | -rp | Specify a real port variable that can be used in commands as \_realport\_ | | --no-cidr | If set then CIDR notation in a target file will not be automatically be expanded into individual hosts | @@ -72,9 +73,9 @@ You could use interlace to run over any number of targets within this file using bash ``` ➜ /tmp interlace -tL ./targets.txt -threads 5 -c "nikto --host _target_ > ./_target_-nikto.txt" -v -============================================== -Interlace v1.0 by Michael Skelton (@codingo_) -============================================== +========================================================================= +Interlace v1.0 by Michael Skelton (@codingo_) & Sajeeb Lohani (@sml555_) +========================================================================= [14:33:23] [THREAD] [nikto --host hackerone.com > ./hackerone.com-nikto.txt] Added to Queue [14:33:23] [THREAD] [nikto --host bugcrowd.com > ./bugcrowd.com-nikto.txt] Added to Queue ``` @@ -87,9 +88,9 @@ Using the above example, let's assume you want independent scans to be run for b ``` ➜ /tmp interlace -tL ./targets.txt -threads 5 -c "nikto --host _target_:_port_ > ./_target_-_port_-nikto.txt" -p 80,443 -v -============================================== -Interlace v1.0 by Michael Skelton (@codingo_) -============================================== +========================================================================= +Interlace v1.0 by Michael Skelton (@codingo_) & Sajeeb Lohani (@sml555_) +========================================================================= [14:33:23] [THREAD] [nikto --host hackerone.com:80 > ./hackerone.com-nikto.txt] Added to Queue [14:33:23] [THREAD] [nikto --host bugcrowd.com:80 > ./hackerone.com-nikto.txt] Added to Queue [14:33:23] [THREAD] [nikto --host bugcrowd.com:443 > ./bugcrowd.com-nikto.txt] Added to Queue @@ -163,6 +164,13 @@ To run a virtual host scan against every target within `192.168.12.0/24` despire interlace -t 192.168.12.0/24 -e 192.168.12.0/26 -c "vhostscan _target_ -oN _output_/_target_-vhosts.txt" -o ~/scans/ -threads 50 ``` +## Run Nikto Using Multiple Proxies +Using the above example, let's assume you want independent scans to be via different proxies for the same targets. You would then use the following: + +``` +➜ /tmp interlace -tL ./targets.txt -pL ./proxies.txt -threads 5 -c "nikto --host _target_:_port_ -useproxy _proxy_ > ./_target_-_port_-nikto.txt" -p 80,443 -v +``` + # Authors and Thanks