
단일 스레드 명령줄 애플리케이션을 CIDR 및 glob 지원과 함께 빠른 멀티 스레드 애플리케이션으로 쉽게 변환하세요.
단일 스레드 명령줄 애플리케이션을 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
이렇게 하면 nikto, sslscan 및 testssl.sh가 example.com의 포트 80 및 443에 대해 실행되고 파일이 engagements 폴더에 저장됩니다.
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에서 무작위로 선택된 파일로 대체됩니다. |