
네트워크 전체를 스파이더링하여 SMB 공유에 있는 흥미로운 파일들을 찾습니다. 파일 이름 또는 파일 내용을 검색합니다 - 정규식 지원!
Manspider 2.0 출시! 이번 업데이트는 큰 개선을 가져왔습니다:
--modified-after 및 --modified-before 옵션으로 수정 날짜별 파일 검색이 가능합니다.
PDFDOCXXLSXPPTX
# 설치 없이 직접 실행
uvx --from git+https://github.com/blacklanternsecurity/MANSPIDER manspider --help
# 전역 설치
uv tool install git+https://github.com/blacklanternsecurity/MANSPIDER
# 실행
manspider --help
pipx install git+https://github.com/blacklanternsecurity/MANSPIDER
Manspider는 다양한 파일 형식에서 텍스트 추출을 위해 Kreuzberg를 사용합니다. 일부 형식은 추가 시스템 종속성이 필요합니다:
# 이미지(PNG, JPEG 등)에서 OCR 텍스트 추출
sudo apt install tesseract-ocr
# 레거시 Microsoft Office 형식(.doc, .xls) 지원
# Kreuzberg는 변환을 위해 LibreOffice를 사용합니다.
sudo apt install libreoffice
이러한 종속성이 없어도: Manspider는 PDF, DOCX, XLSX, PPTX 및 텍스트 파일에 대해 계속 작동하지만, 이미지 OCR 및 레거시 Office 형식은 건너뜁니다.
docker run --rm -v ./manspider:/root/.manspider blacklanternsecurity/manspider --help
참고로 manspider.sh 헬퍼 스크립트도 제공되며, manspider의 loot 및 logs 디렉터리를 자동으로 마운트하여 실행을 더 편리하게 해줍니다:
./manspider.sh --help
참고: 일치하는 파일은 자동으로 $HOME/.manspider/loot에 다운로드됩니다! (비활성화하려면 -n 사용)
$ manspider 192.168.0.0/24 -f passw user admin account network login logon cred -d evilcorp -u bob -p Passw0rd
$ manspider share.evilcorp.local -f passw -e xlsx csv -d evilcorp -u bob -p Passw0rd
$ manspider share.evilcorp.local -c passw -e xlsx csv docx pdf -d evilcorp -u bob -p Passw0rd
$ manspider share.evilcorp.local -e bat com vbs ps1 psd1 psm1 pem key rsa pub reg pfx cfg conf config vmdk vhd vdi dit -d evilcorp -u bob -p Passw0rd
이 예제는 재무 관련 디렉터리 이름에서 연속된 5자리 이상의 숫자가 포함된 파일 이름(예: 000202006.EFT)을 검색합니다.
$ manspider share.evilcorp.local --dirnames bank financ payable payment reconcil remit voucher vendor eft swift -f '[0-9]{5,}' -d evilcorp -u bob -p Passw0rd
$ manspider share.evilcorp.local -e ppk rsa pem ssh rsa -o -f id_rsa id_dsa id_ed25519 -d evilcorp -u bob -p Passw0rd
$ manspider share.evilcorp.local -e '' -c 'BEGIN .{1,10} PRIVATE KEY' -d evilcorp -u bob -p Passw0rd
# .kdbx - KeePass 비밀번호 데이터베이스 (KeePass, KeePassXC)
# .kdb - KeePass 클래식 데이터베이스 (KeePass 1.x)
# .1pif - 1Password 교환 형식 (1Password)
# .agilekeychain - Agile Keychain 형식 (1Password, 사용 중단)
# .opvault - OPVault 형식 (1Password)
# .lpd - LastPass 데이터 파일 (LastPass)
# .dashlane - Dashlane 데이터 파일 (Dashlane)
# .psafe3 - Password Safe 데이터베이스 (Password Safe)
# .enpass - Enpass 비밀번호 관리자 데이터 파일 (Enpass)
# .bwdb - Bitwarden 데이터베이스 (Bitwarden)
# .msecure - mSecure 비밀번호 관리자 데이터 파일 (mSecure)
# .stickypass - Sticky Password 데이터 파일 (Sticky Password)
# .pwm - Password Memory 데이터 파일 (Password Memory)
# .rdb - RoboForm 데이터 파일 (RoboForm)
# .safe - SafeInCloud 비밀번호 관리자 데이터 파일 (SafeInCloud)
# .zps - Zoho Vault 암호화 데이터 파일 (Zoho Vault)
# .pmvault - SplashID Safe 데이터 파일 (SplashID Safe)
# .mywallet - MyWallet 비밀번호 관리자 데이터 파일 (MyWallet)
# .jpass - JPass 비밀번호 관리자 데이터 파일 (JPass)
# .pwmdb - Universal Password Manager 데이터베이스 (Universal Password Manager)
$ manspider share.evilcorp.local -e kdbx kdb 1pif agilekeychain opvault lpd dashlane psafe3 enpass bwdb msecure stickypass pwm rdb safe zps pmvault mywallet jpass pwmdb -d evilcorp -u bob -p Passw0rd
$ manspider share.evilcorp.local -e pfx p12 pkcs12 pem key crt cer csr jks keystore key keys der -d evilcorp -u bob -p Passw0rd
$ manspider share.evilcorp.local -e docx xlsx pdf --modified-after 2026-01-01 -d evilcorp -u bob -p Passw0rd
Manspider 인스턴스를 여러 개 동시에 실행할 수 있습니다. 이미 실행 중인 인스턴스가 있고 다운로드한 파일을 검색하고 싶을 때 유용합니다(grep -R과 유사). 이를 위해 loot 키워드를 대상으로 지정하면 $HOME/.manspider/loot에 다운로드된 파일을 검색합니다.
합리적인 기본값은 단일 대상에 고착되는 등의 바람직하지 않은 상황을 방지하는 데 도움이 됩니다. 다음은 모두 재정의할 수 있습니다:
-m으로 재정의)-s로 재정의)-t로 재정의)C$, IPC$, ADMIN$, PRINT$ (--exclude-sharenames로 재정의)Manspider는 다음 대상의 조합을 허용합니다:
예를 들어, 다음 중 일부 또는 전부를 지정할 수 있습니다:
192.168.1.250share.evilcorp.local192.168.1.0/24smb_hosts.txtloot (이미 다운로드된 파일 검색용)/mnt/share (디렉터리를 재귀적으로 검색)
usage: manspider [-h] [-u USERNAME] [-p PASSWORD] [-d DOMAIN] [-l LOOT_DIR] [-m MAXDEPTH] [-H HASH] [-k] [-aesKey HEX] [-dc-ip IP] [-t THREADS] [-f REGEX [REGEX ...]] [-e EXT [EXT ...]]
[--exclude-extensions EXT [EXT ...]] [-c REGEX [REGEX ...]] [--sharenames SHARE [SHARE ...]] [--exclude-sharenames [SHARE ...]] [--dirnames DIR [DIR ...]]
[--exclude-dirnames DIR [DIR ...]] [-q] [-n] [-mfail INT] [-o] [-s SIZE] [-v]
targets [targets ...]
SMB 공유에서 민감한 데이터를 스캔합니다. 일치하는 파일과 로그는 $HOME/.manspider에 저장됩니다. 모든 필터는 대소문자를 구분하지 않습니다.
positional arguments:
targets 스파이더할 IP, 호스트 이름, CIDR 범위 또는 대상이 포함된 파일 (참고: 로컬 검색도 지원되며, 디렉터리 이름이나 "loot" 키워드를 지정하면 다운로드된 파일을 검색합니다)
options:
-h, --help 도움말 메시지를 표시하고 종료합니다
-u, --username USERNAME
인증을 위한 사용자 이름
-p, --password PASSWORD
인증을 위한 비밀번호
-d, --domain DOMAIN 인증을 위한 도메인
-l, --loot-dir LOOT_DIR
loot 디렉터리 (기본값 ~/.manspider/)
-m, --maxdepth MAXDEPTH
스파이더할 최대 깊이 (기본값: 10)
-H, --hash HASH 인증을 위한 NTLM 해시
-k, --kerberos Kerberos 인증을 사용합니다. 대상 매개변수를 기반으로 ccache 파일(KRB5CCNAME)에서 자격 증명을 가져옵니다
-aesKey, --aes-key HEX
Kerberos 인증에 사용할 AES 키 (128 또는 256비트)
-dc-ip, --dc-ip IP 도메인 컨트롤러의 IP 주소. 생략하면 대상 매개변수에 지정된 도메인 부분(FQDN)을 사용합니다
-t, --threads THREADS
동시 스레드 수 (기본값: 5)
-f, --filenames REGEX [REGEX ...]
정규식을 사용하여 파일 이름 필터링 (공백으로 구분)
-e, --extensions EXT [EXT ...]
이 확장자를 가진 파일 이름만 표시 (공백으로 구분, 예: `docx xlsx`는 Word 및 Excel 문서만)
--exclude-extensions EXT [EXT ...]
이 확장자를 가진 파일 무시
-c, --content REGEX [REGEX ...]
정규식을 사용하여 파일 내용 검색 (여러 개 지원)
--sharenames SHARE [SHARE ...]
이름이 일치하는 공유만 검색 (여러 개 지원)
--exclude-sharenames [SHARE ...]
이름이 일치하는 공유 검색 안 함 (여러 개 지원)
--dirnames DIR [DIR ...]
이러한 문자열을 포함하는 디렉터리만 검색 (여러 개 지원)
--exclude-dirnames DIR [DIR ...]
이러한 문자열을 포함하는 디렉터리 검색 안 함 (여러 개 지원)
-q, --quiet 일치하는 파일 내용을 표시하지 않음
-n, --no-download 일치하는 파일을 다운로드하지 않음
-mfail, --max-failed-logons INT
실패한 로그인 수 제한
-o, --or-logic AND 대신 OR 논리 사용 (파일 이름 OR 확장자 OR 내용이 일치하면 파일이 다운로드됨)
-s, --max-filesize SIZE
이 크기보다 큰 파일은 검색하지 않음, 예: "500K" 또는 ".5M" (기본값: 10M)
-v, --verbose 디버깅 메시지 표시
--modified-after DATE
이 날짜 이후에 수정된 파일만 표시 (형식: YYYY-MM-DD)
--modified-before DATE
이 날짜 이전에 수정된 파일만 표시 (형식: YYYY-MM-DD)
참고: 전체 테스트 스위트를 실행하려면 위에 나열된 선택적 시스템 종속성(tesseract-ocr 및 libreoffice)이 필요합니다.
# 테스트 실행
uv run pytest tests/
이 프로젝트는 린팅 및 포맷팅에 ruff를 사용합니다.
# 린터 실행
uv run ruff check .
# 자동 수정으로 린터 실행
uv run ruff check --fix .
# 포맷터 실행
uv run ruff format .