
저속하고 느린 패스워드 스프레이 도구로, 긴 시간 동안 간격을 두고 스프레이하도록 설계되었습니다.
hey, yo 내 느낌은 spraycharles 같아 - Chiddy Bang
느리고 낮은 속도로 비밀번호를 스프레이하는 도구로, 긴 시간 동안 일정 간격으로 스프레이하도록 설계되었습니다.
Office365, OWA, EWS, Okta, ADFS, Cisco SSL VPN, Citrix Netscaler, Sonicwall, NTLM over HTTP, SMB용 스프레이 플러그인이 포함되어 있습니다.
@sprocket_ed님이 작성한 관련 블로그 게시물에서 NTLM over HTTP, Exchange Web Services 및 Spraycharles에 대해 다루고 있습니다.
Spraycharles는 비교적 간단한 비밀번호 스프레이 도구로, 침투 테스트 중에 비밀번호 스프레이를 수동으로 수행할 필요 없이 자동화할 수 있는 공개 도구가 많지 않았던 시기에 설계되었습니다. 아마 Spraycharles의 가장 큰 특징은 -a/--attempts와 -i/--interval을 사용하여 장기간 실행되는 스프레이를 설정하고, 수일 동안 실행하면서 주기적으로 확인할 수 있다는 점입니다. 한 번만 사용할 서비스나 독특한 서비스를 스프레이해야 하는 경우, 새 모듈을 템플릿화하고 바로 스프레이를 시작하는 것도 매우 쉽습니다.
Spraycharles는 처음부터 현대적인 인증/클라우드 공급자를 염두에 두고 설계되지는 않았습니다. 더 고급 기능을 찾고 있다면 CredMaster 또는 TeamFiltration와 같은 도구를 확인해 보세요. Spraycharles는 빠르게 작동하도록 설계되지 않았습니다. 단일 스레드이며, 볼륨/시간 중심의 접근 방식을 지향합니다.
Spraycharles는 pip3 install spraycharles 또는 이 저장소를 클론하고 pip3 install .을 실행하여 설치할 수 있습니다.
[!TIP] 이렇게 하면
spraycharles및 약어sc별칭이 경로에 등록됩니다. 로그 및 출력 파일은~/.spraycharles에 저장됩니다. CLI 플래그를 사용하여 다른 출력 위치를 지정할 수 있습니다.
Spraycharles Docker 컨테이너를 빌드하려면 다음 명령을 실행하세요.
git clone https://github.com/Tw1sm/spraycharles
cd spraycharles/extras
docker build . -t spraycharles
Spraycharles Docker 컨테이너를 사용하려면 다음 명령을 실행하세요.
docker run -it -v ~/.spraycharles:/root/.spraycharles spraycharles -h
사용자 이름 및 비밀번호 목록이 저장된 위치에 따라 추가 볼륨을 지정해야 할 수도 있습니다.
Nix 또는 NixOS 사용자를 위해 패키지가 제공됩니다. 최신 릴리스는 unstable 채널에만 있을 수 있습니다.
nix-env -iA nixos.spraycharles
spray 하위 명령어:
Usage: spraycharles spray [OPTIONS] COMMAND [ARGS]...
Low and slow password spraying
╭─ Options ─────────────────────────────────────────────────────────────────────────────╮
│ --debug Enable debug logging (overrides --quiet) │
│ --config TEXT Configuration file. │
│ --help -h Show this message and exit. │
╰───────────────────────────────────────────────────────────────────────────────────────╯
╭─ User/Pass Config ────────────────────────────────────────────────────────────────────╮
│ * --usernames -u TEXT Filepath of the usernames list [default: None] │
│ [required] │
│ * --passwords -p TEXT Single password to spray or filepath of the passwords │
│ list │
│ [default: None] │
│ [required] │
│ --equal -e Does 1 spray for each user where password = username │
╰───────────────────────────────────────────────────────────────────────────────────────╯
╭─ Spray Target ────────────────────────────────────────────────────────────────────────╮
│ --host -H TEXT Host to password spray (ip or │
│ hostname). Can by anything when │
│ using Office365 module - only │
│ used for logfile name │
│ [default: None] │
│ * --module -m [ADFS|CiscoSSLVPN|Citrix|NTLM Module corresponding to target │
│ |Office365|Okta|OWA|SMB|Sonic host │
│ wall] [default: None] │
│ [required] │
│ --path TEXT NTLM authentication endpoint │
│ (i.e., rpc or ews) │
│ [default: None] │
│ --port -P INTEGER Port to connect to on the │
│ specified host │
│ [default: 443] │
│ --fireprox -f TEXT URL of desired fireprox │
│ interface │
│ [default: None] │
│ --domain -d TEXT HTTP - Prepend DOMAIN\ to │
│ usernames; SMB - Supply domain │
│ for smb connection │
│ [default: None] │
│ --no-ssl Use HTTP instead of HTTPS │
╰───────────────────────────────────────────────────────────────────────────────────────╯
╭─ Output ──────────────────────────────────────────────────────────────────────────────╮
│ --output -o TEXT Name and path of result output file [default: None] │
│ --quiet Will not log each login attempt to the console │
│ --analyze Run the results analyzer after each spray interval (Early │
│ false positives are more likely) │
╰───────────────────────────────────────────────────────────────────────────────────────╯
╭─ Spray Behavior ──────────────────────────────────────────────────────────────────────╮
│ --attempts -a INTEGER Number of logins submissions per interval (for each │
│ user) │
│ [default: None] │
│ --interval -i INTEGER Minutes inbetween login intervals [default: None] │
│ --timeout -t INTEGER Web request timeout threshold [default: 5] │
│ --jitter INTEGER Jitter time between requests in seconds │
│ [default: None] │
│ --jitter-min INTEGER Minimum time between requests in seconds │
│ [default: None] │
│ --pause Pause the spray between intervals if a new potentially │
│ successful login was found │
╰───────────────────────────────────────────────────────────────────────────────────────╯
╭─ Notifications ───────────────────────────────────────────────────────────────────────╮
│ --notify -n [Slack|Teams|Discord] Enable notifications for Slack, Teams or │
│ Discord │
│ [default: None] │
│ --webhook -w TEXT Webhook used for specified notification │
│ module │
│ [default: None] │
╰───────────────────────────────────────────────────────────────────────────────────────╯
자주 사용되는 CLI 플래그가 많기 때문에 --config 플래그를 사용하여 yaml 파일에서 명령줄 매개변수를 채울 수 있습니다. 또한 Spraycharles를 사용할 때마다 CLI 옵션이 현재 디렉터리의 yaml 파일(last-config.yaml)에 기록되어 쉽게 수정하고 재사용할 수 있습니다.
Spraycharles는 잠재적으로 성공적인 로그인 시도 후 Discord, Slack 및 Microsoft Teams에 알림을 보낼 수 있습니다. 이 알림 제공자 목록은 utils/notify.py 스크립트를 사용하여 확장할 수 있습니다. 알림 에이전트를 사용하려면 이름과 웹훅 URL을 지정해야 합니다.
구성 파일을 사용하여 명령을 더 짧게 유지할 수 있습니다.
notify: Slack
webhook: https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX
모든 제공자에게 전송되는 알림에는 스프레이 작업과 관련된 대상 호스트 이름이 포함됩니다. 이는 여러 대상을 동시에 스프레이할 때 특히 유용합니다.
스프레이가 진행되는 동안 제공된 사용자명 및 비밀번호 파일을 변경할 수 있습니다. 목록에 추가하거나 제거하면 다음 비밀번호 순환 시 적용됩니다.
[!NOTE] 목록에 새 비밀번호를 삽입하는 경우, 스프레이되려면 현재 스프레이 중인 비밀번호 다음 에 위치해야 합니다 (Spraycharles는 내부 루프 카운터를 인덱스로 사용하여 업데이트된 목록의 해당 위치에서 다음 비밀번호를 가져옵니다).
Spraycharles에는 스프레이 작업을 지원하는 몇 가지 추가 유틸리티가 함께 제공됩니다. Spraycharles 모듈의 전체 목록:
Usage: spraycharles [OPTIONS] COMMAND [ARGS]...
╭─ Options ─────────────────────────────────────────────────────────────────────────────╮
│ --help -h Show this message and exit. │
╰───────────────────────────────────────────────────────────────────────────────────────╯
╭─ Commands ────────────────────────────────────────────────────────────────────────────╮
│ analyze Analyze Spraycharles output files for potential spray hits │
│ gen Generate custom password lists from JSON file │
│ modules List spraying modules │
│ parse Parse NTLM over HTTP and SMB endpoints to collect domain information │
│ spray Low and slow password spraying │
╰───────────────────────────────────────────────────────────────────────────────────────╯
Spraycharles "gen" 하위 명령은 extras/list_elements.json에 제공된 사양을 기반으로 비밀번호 목록을 생성합니다.
spraycharles gen extras/list_elements.json custom_passwords.txt
Spraycharles "parse" 하위 명령은 아래와 같은 명령을 사용하여 NTLM over HTTP 및 SMB 서비스에서 내부 도메인을 추출합니다.
spraycharles parse https://example.com/ews
spraycharles parse smb://host.domain.local
analyze 하위 모듈은 출력 JSON 객체를 읽고 통계적으로 유의미한 응답 길이를 결정할 수 있습니다. 충분한 데이터가 있으면 결과 파일에서 성공적인 로그인을 추출할 수 있습니다. 대상 사이트에 따라 이것이 성공적인 로그인을 판단하는 유일한 방법은 아니며, 데이터를 직접 확인하여 누락된 것이 없는지 확인하는 것을 권장합니다. SMB의 경우 성공을 나타내는 NTSTATUS 코드가 있는 항목을 찾습니다.
spraycharles analyze myresults.json
이 도구는 침투 테스트 중 사용을 위해 설계되었습니다. 사전 상호 동의 없이 대상을 공격하는 데 이 도구를 사용하는 것은 불법입니다. 최종 사용자는 모든 관련 지방, 주 및 연방 법률을 준수할 책임이 있습니다. 개발자는 어떠한 책임도 지지 않으며 이 프로그램의 오용에 대해 책임을 지지 않습니다.
Spraycharles는 의존성 관리를 위해 Poetry를 사용합니다. 소스에서 설치하고 개발 환경을 설정하려면:
pip3 install poetry
git clone https://github.com/Tw1sm/spraycharles
cd spraycharles
poetry install
utils 폴더에 포함된 ntlm_challenger.py 스크립트를 제공해 주셨습니다.