轻松将单线程命令行应用程序转换为支持CIDR和通配符的快速多线程应用程序。
Interlace: 无需编码即可轻松自动化和多线程渗透测试及漏洞赏金工作流的工具
使用以下命令安装:
$ python3 setup.py install
依赖项将自动安装,并且Interlace将被添加到您的路径中,作为 interlace 命令。
| 示例 | 标记类型 |
|---|---|
| 80 | 单个端口 |
| 1-80 | 连字符表示法,对从1到80的每个端口执行一次命令 |
| 80,443 | 对端口80和端口443都执行一次命令 |
-t 和 -tL 的处理方式相同。您可以像使用nmap时那样传递目标。可以使用CIDR表示法、连字符表示法或逗号分隔的目标列表。单个目标列表文件可以在不同行使用不同的表示法类型。
或者,您可以通过STDIN传递目标,此时不需要使用 -t 或 -tL。
以下变量在运行时将在命令中被替换:
Interlace 还支持两个额外的功能来控制命令文件内的执行流程:_blocker_ 和 _block:<name>_。拦截器可防止其之后列出的命令执行,直到其之前的所有命令完成;而块可用于强制对某个目标按顺序执行块内列出的命令。
这些功能在每个目标级别上运行。如果可用线程并且当前目标存在拦截器,Interlace 将开始处理目标列表中的下一个目标,以最大化效率。
使用这些功能可以更直接地控制单个目标的执行流程,防止命令乱序执行。
拦截器会阻止其下方的任何命令执行,直到其上方的所有命令完成(针对当前活动的主机)。例如,在以下命令文件中:
mkdir -p _output_/_target_/scans/
_blocker_
nmap _target_ -oA _output_/_target_/scans/_target_-nmap
此处使用拦截器可防止在基础文件夹结构创建完成之前运行 nmap,从而避免 nmap 抛出异常。
块强制其中的所有命令按顺序执行。您还可以在每个命令文件中使用多个块。例如:
_block:nmap_
mkdir -p _target_/output/scans/
nmap _target_ -oN _target_/output/scans/_target_-nmap
_block:nmap_
nikto --host _target_
在此示例中,块的运行方式与之前相同,但如果线程数足够高,nikto 将立即开始运行,并将结果返回终端(而 nmap 和文件创建在后台进行)。
假设您有一个文件 targets.txt,内容如下:
bugcrowd.com
hackerone.com
您可以使用 Interlace 对该文件中的任意数量的目标运行扫描,命令如下:
➜ /tmp interlace -tL ./targets.txt -threads 5 -c "nikto --host _target_ > ./_target_-nikto.txt" -v
=========================================================================
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
这会针对每个主机运行 Nikto,并将结果保存到相应的文件中。注意,在上面的示例中,由于我们使用了 > 运算符,结果不会反馈到终端;但这是期望的功能,否则我们无法区分 Nikto 的结果属于哪个目标。
对于需要实时反馈的应用程序,请像平常一样传递命令(或使用 tee)。
使用上面的示例,假设您希望对同一目标在端口 80 和 443 上分别进行独立扫描。您可以使用以下命令:
➜ /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_) & 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
[14:33:23] [THREAD] [nikto --host hackerone.com:443 > ./hackerone.com-nikto.txt] Added to Queue
在渗透测试中,经常有一组命令需要在几乎每次任务中运行。假设该列表包含 testssl.sh、nikto 和 sslscan,您可以将以下内容保存到名为 commands.txt 的命令文件中:
nikto --host _target_:_port_ > _output_/_target_-nikto.txt
sslscan _target_:_port_ > _output_/_target_-sslscan.txt
testssl.sh _target_:_port_ > _output_/_target_-testssl.txt
如果给定一个目标 example.com,您可以使用以下命令对目标运行这些命令:
interlace -t example.com -o ~/Engagements/example/ -cL ./commands.txt -p 80,443
这将针对 example.com 的端口 80 和 443 分别运行 nikto、sslscan 和 testssl.sh,并将文件保存到您的工程文件夹中。
Interlace 在启动线程时自动扩展CIDR表示法(除非传递了 --no-cidr 标志)。这使得您可以向各种应用程序传递CIDR表示法:
要针对 192.168.12.0/24 中的所有目标运行虚拟主机扫描,可以使用直接命令:
interlace -t 192.168.12.0/24 -c "vhostscan _target_ -oN _output_/_target_-vhosts.txt" -o ~/scans/ -threads 50
尽管 VHostScan 本身没有内置CIDR表示法支持,但 Interlace 会在构建线程队列之前扩展表示法,因此 VHostScan 实际上只接收到一个直接IP地址列表进行扫描。
Interlace 在启动线程时自动扩展通配符范围。这使得您可以向各种应用程序传递通配符范围:
要针对 192.168.12.* 中的所有目标运行虚拟主机扫描,可以使用直接命令:
interlace -t 192.168.12.* -c "vhostscan _target_ -oN _output_/_target_-vhosts.txt" -o ~/scans/ -threads 50
同样,VHostScan 没有内置通配符范围格式支持。
Interlace 在启动线程时自动扩展连字符范围。这使得您可以向各种应用程序传递连字符范围:
要针对 192.168.12.1-15 中的所有目标运行虚拟主机扫描,可以使用直接命令:
interlace -t 192.168.12.1-15 -c "vhostscan _target_ -oN _output_/_target_-vhosts.txt" -o ~/scans/ -threads 50
同样,VHostScan 没有内置连字符范围格式支持。
对文件(target-list.txt)中的每个主机运行虚拟主机扫描,同时限制任何时刻最多50个线程。
可以使用直接命令:
interlace -tL ./target-list.txt -c "vhostscan -t _target_ -oN _output_/_target_-vhosts.txt" -o ~/scans/ -threads 50
或者,使用命令文件运行相同的命令:
interlace -cL ./vhosts-commands.txt -tL ./target-list.txt -threads 50 -o ~/scans
这假定命令文件的内容为:
vhostscan -t $target -oN _output_/_target_-vhosts.txt
这将在指定的输出文件夹中为每个目标生成一个文件。您还可以通过在命令文件中添加更多命令来运行多个命令。
Interlace 自动排除通过 -e 或 -eL 参数指定的任何主机。这些参数也兼容上述范围表示法(CIDR、通配符和连字符)。
要针对CIDR范围 192.168.12.0/24 中的所有目标运行虚拟主机扫描,但排除范围 192.168.12.0/26 中的目标,可以使用直接命令:
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
使用上面的示例,假设您希望对同一目标通过不同的代理进行独立扫描。您可以使用以下命令:
➜ /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
最初由 Michael Skelton (codingo) 和 Sajeeb Lohani (sml555) 编写,感谢 Charelle Collett (@Charcol0x89) 在线程重构和整体方法上的帮助,以及 Luke Stephens (hakluke) 在测试和方法上的帮助。
欢迎对本项目的贡献。如果您是开源新手并需要帮助,请随时通过 Twitter (@codingo_) / (@sml555_) 联系我们,我们将尽力协助。
| 参数 | 描述 |
|---|
| (stdin) | 通过管道从另一个应用程序传入目标列表,格式为逗号分隔、CIDR表示法或单个主机 |
| -t | 指定一个目标或域名,格式为逗号分隔、CIDR表示法或单个主机 |
| -tL | 指定一个目标或域名列表文件 |
| -e | 指定要排除的目标列表,格式为逗号分隔、CIDR表示法或单个主机 |
| -eL | 指定要排除的目标列表文件 |
| -threads | 指定任意时刻最大运行线程数(默认值:5) |
| -timeout | 指定单个线程的超时时间(秒)(默认值:600) |
| -c | 指定要在每个目标或域名上执行的单条命令 |
| -cL | 指定要在每个目标或域名上执行的命令列表文件 |
| -o | 指定一个输出文件夹变量,可在命令中用作 _output_ |
| -p | 指定一个端口变量列表,可在命令中用作 _port_。可以是单个端口、逗号分隔列表或使用连字符表示的范围 |
| -pL | 指定代理列表文件 |
| --proto | 指定协议,可在命令中用作 _proto_ |
| -rp | 指定一个真实端口变量,可在命令中用作 _realport_ |
| -random | 指定一个文件目录,其中的文件可随机用于命令,变量为 _random_ |
| --no-bar / --sober | 设置后,进度条将不显示 |
| --no-cidr | 设置后,目标文件中的CIDR表示法将不会自动扩展为单个主机 |
| --no-color | 设置后,将去除所有前景色或背景色 |
| --silent | 设置后,仅显示重要信息,横幅和其他信息将被隐藏 |
| -v | 设置后,终端将显示详细输出 |
| 变量 | 替换内容 |
|---|
| _target_ | 替换为当前线程正在处理的扩展后的目标列表 |
| _cleantarget_ | 替换为去除 http:// 或 https:// 后的目标 |
| _safe-target_ | 替换为自动对命令进行引用的目标,防止子命令执行 |
| _host_ | 与 _target_ 功能相同,可互换使用 |
| _output_ | 替换为 Interlace 中的输出文件夹变量 |
| _port_ | 替换为 Interlace 中的扩展端口变量 |
| _realport_ | 替换为 Interlace 中的真实端口变量 |
| _proxy_ | 替换为 Interlace 中的代理列表 |
| _random_ | 替换为 Interlace 中随机选择的文件 |