嘿,哟,我感觉自己像 spraycharles——Chiddy Bang
一款低慢速密码喷射工具,旨在长时间内按间隔进行喷射。
包含针对 Office365、OWA、EWS、Okta、ADFS、Cisco SSL VPN、Citrix Netscaler、Sonciwall、NTLM over HTTP 和 SMB 的喷射插件。
相关博客文章由 @sprocket_ed 撰写,介绍了 NTLM over HTTP、Exchange Web Services 和 Spraycharles。
Spraycharles 是一个相对简单的密码喷射器,诞生于渗透测试中缺乏公开工具、无法以非手动方式持续进行密码喷射的时期。Spraycharles 最好的功能之一可能是通过 -a/--attempts 和 -i/--interval 设置长时间运行的喷射任务,让它连续运行几天,同时定期检查进度。如果你有一次性服务或独特的目标需要喷射,也很容易模板化新模块并开始喷射。
Spraycharles 最初并非针对现代认证/云提供商设计。如果你需要更高级的功能,可以查看 CredMaster 或 TeamFiltration 等工具。Spraycharles 并非设计为快速——它是单线程的,更侧重于持续大量尝试。
可以通过 pip3 install spraycharles 安装 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]...
低慢速密码喷射
╭─ 选项 ─────────────────────────────────────────────────────────────────────────────╮
│ --debug 启用调试日志(覆盖 --quiet) │
│ --config TEXT 配置文件 │
│ --help -h 显示此消息并退出 │
╰───────────────────────────────────────────────────────────────────────────────────────╯
╭─ 用户/密码配置 ────────────────────────────────────────────────────────────────────╮
│ * --usernames -u TEXT 用户名单的文件路径 [默认: None] │
│ [必填] │
│ * --passwords -p TEXT 单个密码或密码列表的文件路径 │
│ [默认: None] │
│ [必填] │
│ --equal -e 为每个用户执行一次密码等于用户名的喷射 │
╰───────────────────────────────────────────────────────────────────────────────────────╯
╭─ 喷射目标 ───────────────────────────────────────────────────────────────────────────╮
│ --host -H TEXT 要执行密码喷射的主机(IP 或 │
│ 主机名)。使用 Office365 │
│ 模块时可任意指定,仅用于 │
│ 日志文件名 │
│ [默认: None] │
│ * --module -m [ADFS|CiscoSSLVPN|Citrix|NTLM 与目标主机对应的模块 │
│ |Office365|Okta|OWA|SMB|Sonic [默认: None] │
│ wall] │
│ [必填] │
│ --path TEXT NTLM 认证端点 │
│ (例如 rpc 或 ews) │
│ [默认: None] │
│ --port -P INTEGER 指定主机上的连接端口 │
│ [默认: 443] │
│ --fireprox -f TEXT 所需的 fireprox 接口的 URL │
│ [默认: None] │
│ --domain -d TEXT HTTP - 在用户名前添加 DOMAIN\ │
│ ;SMB - 提供 SMB 连接的域 │
│ [默认: None] │
│ --no-ssl 使用 HTTP 而非 HTTPS │
╰───────────────────────────────────────────────────────────────────────────────────────╯
╭─ 输出 ──────────────────────────────────────────────────────────────────────────────╮
│ --output -o TEXT 结果输出文件的名称和路径 [默认: None] │
│ --quiet 不将每次登录尝试记录到控制台 │
│ --analyze 在每个喷射间隔后运行结果分析器(早期误报更有可能出现) │
╰───────────────────────────────────────────────────────────────────────────────────────╯
╭─ 喷射行为 ──────────────────────────────────────────────────────────────────────────╮
│ --attempts -a INTEGER 每个间隔的登录提交次数(针对每个用户) │
│ [默认: None] │
│ --interval -i INTEGER 登录间隔之间的分钟数 [默认: None] │
│ --timeout -t INTEGER Web 请求超时阈值 [默认: 5] │
│ --jitter INTEGER 请求之间的抖动时间(秒) │
│ [默认: None] │
│ --jitter-min INTEGER 请求之间的最小时间(秒) │
│ [默认: None] │
│ --pause 如果在间隔之间发现新的潜在成功登录,则暂停喷射 │
╰───────────────────────────────────────────────────────────────────────────────────────╯
╭─ 通知 ───────────────────────────────────────────────────────────────────────────────╮
│ --notify -n [Slack|Teams|Discord] 启用 Slack、Teams 或 Discord 的通知 │
│ [默认: None] │
│ --webhook -w TEXT 用于指定通知模块的 Webhook │
│ [默认: None] │
╰───────────────────────────────────────────────────────────────────────────────────────╯
由于经常使用大量 CLI 标志,另一种方法是使用 --config 标志从 yaml 文件填充命令行参数。此外,每次使用 Spraycharles 时,你的 CLI 选项都会写入当前目录下的一个 yaml 文件(last-config.yaml),方便修改和重复使用。
Spraycharles 可以在潜在成功登录尝试后向 Discord、Slack 和 Microsoft Teams 发出通知。可以通过 utils/notify.py 脚本扩展此通知提供程序列表。对于任何潜在的通知代理,你必须指定其名称和 Webhook URL。
你可以通过配置文件指定这些参数以简化命令:
notify: Slack
webhook: https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX
发送给任何提供商的通知将包含喷射任务的目标主机名。这在同时喷射多个目标时特别有用。
你可以在喷射进行中修改提供的用户名和密码文件。对列表的添加或删除将在下一次密码轮换时生效。
[!NOTE] 如果你在列表中插入一个新密码,它必须位于当前正在喷射的密码之后,才能被喷射(Spraycharles 维护一个内部循环计数器,用作索引,以从更新后的列表中对应位置提取下一个密码)。
Spraycharles 附带一些额外的实用工具,用于辅助喷射工作。Spraycharles 模块的完整列表:
Usage: spraycharles [OPTIONS] COMMAND [ARGS]...
╭─ 选项 ─────────────────────────────────────────────────────────────────────────────╮
│ --help -h 显示此消息并退出 │
╰───────────────────────────────────────────────────────────────────────────────────────╯
╭─ 命令 ────────────────────────────────────────────────────────────────────────────────╮
│ analyze 分析 Spraycharles 输出文件,寻找潜在的喷射命中 │
│ gen 根据 JSON 文件生成自定义密码列表 │
│ modules 列出喷射模块 │
│ parse 解析 NTLM over HTTP 和 SMB 端点,收集域信息 │
│ spray 低慢速密码喷射 │
╰───────────────────────────────────────────────────────────────────────────────────────╯
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
ntlm_challenger.py 脚本,该脚本包含在 utils 文件夹中