StreamDemon/personae

GitHub: StreamDemon/personae

将结构化的目标 OSINT 档案转化为可用于 John the Ripper / hashcat 的高度针对性密码 seed 流,通过锚点机制大幅缩小搜索空间。

Stars: 0 | Forks: 0

# personae **将结构化的目标 OSINT 档案转化为可用于攻击的密码 seed 流。** `personae` 是密码攻击 pipeline 的前端。你将收集到的关于授权目标的开源情报汇总到一个小巧的 YAML 文件中,`personae` 会将其扩展为具有高度针对性的 wordlist seeds,然后通过变形引擎(John the Ripper 或 hashcat)将其转化为候选密码。其背后的理念古老而简单:人们总是基于他们关心的事物来构建密码,因此获取凭证最快的方法是了解这个人,而不是对着 hash 狂抛一千万个单词的字典。 它是对经典的 `cupp` / `CeWL` 方法的现代化、结构化改进,其核心建立在那些工具未能充分利用的两个理念之上:将干净的 **seeds 提供给 rules**,而不是将各种排列组合预先展开到磁盘上;并将已知数字和先前泄露的密码视为缩小搜索空间的 **anchors**。 ## 仅限授权使用 这是一个 offensive security 工具,**仅授权场景下使用**:签署了合同或交战规则的红队和渗透测试、在规定范围内的 bug-bounty 计划、CTF,以及对你拥有或被明确授权测试的账户和系统进行的安全研究。 在未经授权的情况下构建他人的密码档案,或将其用于你没有访问权限的系统,极有可能是违法的(例如违反美国 CFAA 或其他地区的计算机滥用和数据保护法)。你有责任确保自己的行为在授权范围内。请参阅 [docs/methodology.md](docs/methodology.md#ethics-and-authorization) 获取完整声明,包括本项目不会协助你触碰的社会工程学红线。 ## 为什么针对性比广泛性更好 只有极小一部分账户会使用几千个常见密码中的某一个,因此通用的热门列表加上优秀的 rules 已经能覆盖很大一部分。其余的密码则都是个性化的。一旦密码是基于宠物、孩子、喜欢的球队、爱好,或是去年的密码加一构成的,就没有任何通用列表能够涵盖它,但基于个人档案的列表可以。`personae` 的存在就是为了快速且可重复地构建这种基于档案的列表。 ## 它在 pipeline 中的位置 ``` [1] COLLECT [2] STRUCTURE [3] SEED [4] MANGLE [5] ATTACK OSINT (in scope) -> profile.yaml -> personae.py -> john / hashcat -> spray (online) (data points) 4 seed streams rules roast / crack (offline) ``` `personae` 负责第 3 阶段。数据收集在设计上保持纯手工且在授权范围内。该工具只负责结构化和 seed 生成。它不会对真实存在的人进行抓取。 ## 安装 ``` git clone personae && cd personae pip install -r requirements.txt # PyYAML ``` 变形和攻击阶段使用你可能已经具备的标配工具: `john` (John the Ripper, jumbo),可选的 `hashcat`,以及用于抓取专业术语的 `cewl`。在 Kali 上这些都是预装的。 验证端到端安装(合成数据,无网络,无真实目标): ``` bash examples/selftest.sh ``` ## 快速开始 ``` # 1. 填写你所知道的关于一个已授权目标的信息 cp profiles/example.yaml profiles/target.yaml && $EDITOR profiles/target.yaml # 2. 将 profile 扩展为 seed streams python3 personae.py profiles/target.yaml -o seeds # 3. mangle + attack(离线示例,NT hashes) john --config=rules/personae.conf --rules=corpmunge --wordlist=seeds/words.txt hashes.txt john --config=rules/personae.conf --rules=lite --wordlist=seeds/anchored.txt hashes.txt john --wordlist=seeds/breach_mut.txt hashes.txt ``` 请参阅 [examples/quickstart.md](examples/quickstart.md) 获取完整的操作指南,包括 CeWL 术语抓取和在线 password-spray 分支。 ## 四大 seed 流 | 文件 | 包含内容 | 如何使用 | |---|---|---| | `words.txt` | 独特的单词 token(姓名、宠物、爱好行话、用户昵称、地点、雇主) | 提供给 `corpmunge` 规则集(大小写 + 年份 + 特殊字符 + leet) | | `anchored.txt` | 将每个 token 拼接上一个 **已知** 数字(出生年份、纪念日、球衣号码等) | 提供给 `lite` 规则集。由于数字已知,因此无需进行年份遍历 | | `dates.txt` | 日期排列组合(DDMM, MMDD, YYYY, DDMMYY 等) | 直接使用或配合 `lite` | | `breach_mut.txt` | 先前泄露的密码及其变形(年份递增、尾部数字递增、特殊字符替换) | 直接使用,**不加规则**。这是产出率最高的流 | ## 档案中捕获的数据点 身份和昵称、日期、家人、宠物、音乐、体育(球队 / 球员 / 球衣号码)、爱好及其细分领域的行话、地点、雇主和产品行话、重要数字,以及任何先前泄露的密码。每个数据点如何映射到生成的 seed 格式,完整内容详见 [docs/methodology.md](docs/methodology.md#data-point-taxonomy)。 ## OSINT 真正发挥优势的三种情况 经过实际测量,而非假设(像 `climbing` 或 `yankees` 这样的常见兴趣词早就包含在庞大的通用列表中了,因此优势并不来源于此): 1. **独特的 token。** 罕见的宠物名、爱好行话、昵称和不寻常的姓氏通常不会出现在通用列表中。只有个人档案才能提供这些。 2. **Anchors。** 知道出生年份意味着你只需追加那特定的一年,而不是遍历 80 个年份。在测试中,这使得每个基础词的 keyspace 从大约 2,500 个候选词缩减到了约 14 个,且命中率相同。 3. **先前泄露的密码。** 这是唯一最佳的数据点。它揭示了目标自身的变形模板,因此只需进行简单的递增(年份 + 1,末尾数字 + 1),即使不加任何 rules,也往往能直接命中当前密码。 ## 在线与离线 变形后的候选密码将用于两种截然不同的攻击方式。请先进行选择。 | | 在线喷射 | 离线破解 | |---|---|---| | 具备条件 | 活动的服务,无 hash | 捕获到的 hash(Kerberoast, AS-REP, NTDS, Responder) | | 限制因素 | 锁定和速率限制,动静大 | GPU 时间,隐蔽无声 | | 执行原则 | 在每个锁定窗口期内,对所有用户仅尝试同一个密码 | 无限制,一直运行直到穷尽 | ## 路线图 项目处于早期阶段,旨在不断完善。候选方向包括: - 泄露语料库查询,以从本地 HIBP / combo 集自动填充 `breached_passwords` - 更智能的组合器(宠物 + 年份,伴侣 + 纪念日,姓名 + 球衣号码) - 原生 hashcat 规则导出,让 GPU 用户也能获得同等的 `corpmunge` 覆盖 - 可选的、需经过授权同意的连接器,用于结构化导出的社交数据(无实时抓取) - 键盘漫步(keyboard-walk)和具备区域意识的变形 欢迎贡献和提出想法。欢迎提交 issue 或 PR。 ## 先前作品与致谢 灵感源自个人 wordlist 工具的悠久传承:`cupp` (Common User Passwords Profiler,作者 Mebus)、`CeWL` (Robin Wood)、`crunch`、`Mentalist` 和 `bopscrk`,以及许多教导“分析目标人性”理念的文章。 变形和攻击阶段依赖于 `John the Ripper` 和 `hashcat`。 ## 许可证 MIT。请参阅 [LICENSE](LICENSE)。
标签:DOS头擦除, ESC4, meg, OSINT, 信息安全, 密码破解, 恶意代码分类, 逆向工具