
전체 포트 스캔 결과를 분할하여 타겟 Nmap 실행에 사용합니다.
NixOS![]() | ![]() |
|---|
| NixOS | offsec.tools |
DivideAndScan은 포트 스캐닝 작업을 3단계로 나누어 효율적으로 자동화하는 데 사용됩니다:
1단계에서는 빠른 포트 스캐너*가 사용되며, 출력은 파싱되어 단일 파일 데이터베이스(TinyDB)에 저장됩니다. 그 다음 2단계에서는 데이터베이스 정보에 따라 각 대상의 열린 포트 집합에 대해 개별 Nmap 스캔이 시작됩니다(멀티프로세싱 지원). 마지막 3단계에서는 분리된 Nmap 출력이 nMap_Merger를 사용하여 단일 보고서( XML / HTML / 일반 텍스트 / grepable)로 병합됩니다. 시각화는 DrawNmap이 제공합니다.
잠재적 사용 사례:
* 사용 가능한 포트 스캐너:
면책 조항. 이 저장소에 포함된 모든 정보는 교육 및 연구 목적으로만 제공됩니다. 작성자는 이 도구의 불법적인 사용에 대해 책임을 지지 않습니다.

divide and scan을 성공적으로 수행하려면 몇 가지 좋은 포트 스캐닝 도구가 필요합니다(아래 예시에서는 GitHub 릴리스를 eget을 통해 가져옵니다).
📑 참고: 호스트 OS에서 의존성 문제를 겪고 싶지 않다면, Docker 부분으로 건너뛰세요.
sudo apt install nmap xsltproc -y
sudo nmap --script-updatedb
pushd /tmp
wget https://github.com/ivre/masscan/archive/refs/heads/master.zip -O masscan-master.zip
unzip masscan-master.zip
cd masscan-master
make
sudo make install
popd && rm -rf /tmp/masscan-master*
eget -t 2.0.1 -a amd64 RustScan/RustScan --to /tmp/rustscan.deb
sudo dpkg -i /tmp/rustscan.deb && rm /tmp/rustscan.deb
sudo wget https://gist.github.com/snovvcrash/8b85b900bd928493cd1ae33b2df318d8/raw/fe8628396616c4bf7a3e25f2c9d1acc2f36af0c0/rustscan-ports-top1000.toml -O /root/.rustscan.toml
sudo mkdir /opt/naabu
sudo eget -s linux/amd64 projectdiscovery/naabu --to /opt/naabu
sudo ln -sv /opt/naabu/naabu /usr/local/bin/naabu
sudo mkdir /opt/nimscan
sudo eget -a NimScan elddy/NimScan --to /opt/nimscan
sudo ln -sv /opt/nimscan/nimscan /usr/local/bin/nimscan
sudo mkdir /opt/sx
sudo eget -s linux/amd64 v-byte-cpu/sx --to /opt/sx
sudo ln -sv /opt/sx/sx /usr/local/bin/sx
sudo mkdir /opt/pd
sudo eget -s linux/amd64 projectdiscovery/dnsx --to /opt/pd
sudo ln -sv /opt/pd/dnsx /usr/local/bin/dnsx
DivideAndScan은 PyPI에 divideandscan으로 제공되지만, 항상 최신 버전을 사용하기 위해 pipx로 GitHub에서 설치하는 것을 권장합니다:
~$ pipx install -f "git+https://github.com/snovvcrash/DivideAndScan.git"
~$ das
# shiv -e das.divideandscan:main -o das.pyz divideandscan
~$ wget https://github.com/snovvcrash/DivideAndScan/releases/latest/download/das.pyz && chmod +x das.pyz
~$ ./das.pyz
디버깅 목적으로 poetry로 개발 환경을 설정할 수 있습니다:
~$ git clone --recurse-submodules https://github.com/snovvcrash/DivideAndScan
~$ cd DivideAndScan
~$ poetry install
~$ poetry run das
📑 참고: DivideAndScan은 모든 포트 스캐너를 실행하기 위해 sudo를 사용하므로, 스캔 명령어가 실행될 때 비밀번호를 요청합니다.
Docker 컨테이너에서 DivideAndScan을 다음과 같이 실행할 수 있습니다:
~$ docker run --rm -it --name das -v ~/.das:/root/.das -v `pwd`:/app -p 8050:8050 snovvcrash/divideandscan
이 도구는 입력 데이터가 필요하고 출력 데이터를 생성하므로, 현재 작업 디렉토리를 컨테이너 내 /app에 마운트 포인트로 지정해야 합니다. 또한 호스트에 8050 포트를 게시하면 Nmap 보고서 시각화에 사용되는 Dash 앱에 접근할 수 있습니다.
기본 명령어를 더 짧게 만들기 위해 별칭을 설정할 수 있습니다:
~$ alias das='docker run --rm -it --name das -v ~/.das:/root/.das -v `pwd`:/app -p 8050:8050 snovvcrash/divideandscan'
~$ das

|
⚠️ 경고: 거의 모든 포트 스캐닝 도구는 잘못 사용하면 테스트 중인 시스템을 손상시킬 수 있으므로, 자신이 무엇을 하고 있는지 반드시 이해하시기 바랍니다. 모듈이 작업을 시작하면 |
|
여러 프로세스에서 Nmap을 동시에 시작하려면 출력 형식은 또한 스캔을 실제로 시작하기 전에 |
|
📑 참고: |
Hack The Box의 모든 라이브 머신에 대해 열린 포트를 열거해 보겠습니다.
-p1-49151를 사용하여 동적 포트 범위를 제외하겠습니다. 두 번째 스크린샷에서는 호스트별 및 포트별로 스캔 결과를 검토하고 있습니다:~$ das -db htb add -rm masscan '-e tun0 --rate 1000 -iL hosts.txt -p1-49151 --open'
~$ das -db htb scan -hosts all -show
~$ das -db htb scan -ports all -show
~$ das -db htb scan -hosts all -oA report
~$ das -db htb scan -hosts all -oA report -nmap '-Pn -sVC -O' -parallel
DivideAndScan에 자신이 선호하는 포트 스캐너를 연결하려면 das/parsers/DUMMY_SCANNER.py에서 그 출력에 대한 단일 parse 메소드를 구현하면 됩니다(masscan에 대한 예제 참조):
from das.parsers import IAddPortscanOutput
class AddPortscanOutput(IAddPortscanOutput):
"""DUMMY_SCANNER 출력 처리를 위한 자식 클래스."""
def parse(self):
"""
DUMMY_SCANNER 원시 출력 파서.
:return: (포트스캔 원시 출력 파일 이름, DB에 추가된 호스트 수) 값의 쌍
:rtype: tuple
"""
hosts = set()
for line in self.portscan_raw:
# DUMMY_SCANNER 파서 구현
pass
return (self.portscan_out, len(hosts))
usage: das [-h] [-db DB] {db,add,scan,dns,report,parse,draw,tree,help} ...
-----------------------------------------------------------------------------------------------
| ________ .__ .__ .___ _____ .____________ |
| \______ \ |__|__ _|__| __| _/____ / _ \ ____ __| _/ _____/ ____ _____ ____ |
| | | \| \ \/ / |/ __ |/ __ \ / /_\ \ / \ / __ |\_____ \_/ ___\\__ \ / \ |
| | ` \ |\ /| / /_/ \ ___// | \ | \/ /_/ |/ \ \___ / __ \| | \ |
| /_______ /__| \_/ |__\____ |\___ >____|__ /___| /\____ /_______ /\___ >____ /___| / |
| \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ |
| {@snovvcrash} {https://github.com/snovvcrash/DivideAndScan} {vX.Y.Z} |
-----------------------------------------------------------------------------------------------
positional arguments:
{db,add,scan,dns,report,parse,draw,tree,help}
db 수동 DB 조작을 위한 유틸리티
add 전체 포트 스캔을 실행하고 출력을 DB에 추가
scan DB의 호스트 및 포트를 대상으로 Nmap 스캔 실행
dns 입력 파일의 도메인 이름을 DB의 해당 IP 주소에 매핑
report 별도의 Nmap 출력을 단일 보고서로 병합 (https://github.com/CBHue/nMap_Merger)
parse 원시 Nmap XML 보고서를 서비스 이름으로 파싱하고 {service}://{host}:{port} 형식으로 항목 출력
draw Nmap XML 보고서 시각화 (https://github.com/jor6PS/DrawNmap)
tree tree를 사용하여 ~/.das/ 디렉토리 내용 표시
help 선택한 포트 스캐너의 내장 --help 대화상자 표시
options:
-h, --help 이 도움말 메시지를 표시하고 종료
-db DB 작업할 DB 이름
Psst, 친구야... 체계적인 포트 스캔 좀 해볼래?
fuff 스위치 추가parse 모듈 추가됨)