anpa1200/Passwords
GitHub: anpa1200/Passwords
面向授权渗透测试的密码工具包,提供个性化密码字典生成、手机号列表生成及 Base64 凭证对编码功能。
Stars: 2 | Forks: 1
# 密码工具包
**安全测试工具包:个性化密码字典 (PPG)、手机号生成器,以及用于授权渗透测试的 Base64 凭证对。**
## 概述
| 脚本 | 语言 | 用途 |
|--------|----------|---------|
| **PPG_personal_pass_generator.py** | Python | 基于姓名、日期、1337、符号生成个性化密码字典 |
| **phone_numbers_gen.py** | Python | 以色列手机号列表(可配置前缀/长度) |
| **base64_matches.py** | Python | 用于 HTTP Basic Auth 测试的 Base64 `username:password` 凭证对 |
| **generate_phone_numbers.cpp** | C++ | 功能与手机号生成器相同,针对完整的 9000 万号码运行进行了优化 |
**环境要求:** Python 工具需 Python 3.9+;C++ 生成器需 C++17 编译器 (g++, clang++)。
## 安装说明
```
git clone https://github.com/anpa1200/Passwords.git
cd Passwords
pip install -e .
# 可选:tests 和 linting
pip install -e ".[dev]"
```
## 脚本 1:PPG – 个人密码生成器
**文件:** `PPG_personal_pass_generator.py`
### 功能简介
PPG 可以为授权渗透测试中的撞库、暴力破解或字典攻击构建**个性化密码字典**。它接收关于个人的信息(姓名、生日、昵称、家人、宠物、公司等),并通过以下方式生成大量候选密码:
- 以 **小写**、**首字母大写** 和 **大写** 格式使用每个值
- 可选地应用 **1337 (leet) 替换**(例如 `a`→`@`, `e`→`3`, `s`→`$`)
- 可选地将基础值与字符池**组合**:数字、字母和符号的单字符、双字符和三字符组合(例如 `@pass`, `pass123`, `!john!`)
- 组合多个基础值(例如名字 + 出生年份)
- 根据最小和最大密码长度进行**过滤**
因此,你得到的不再是通用的字典,而是针对特定目标量身定制的列表(例如“John”、“1990”、“football”),这与人们通常选择密码的方式相吻合。
### 适用场景
- 掌握个人 OSINT 信息(姓名、出生日期、爱好、公司)的红蓝对抗或渗透测试
- 使用“逼真的”弱密码测试密码策略
- 有关密码强度的培训或研讨会
### 运行方式
**交互模式(提示输入所有数据和选项):**
```
python PPG_personal_pass_generator.py
```
系统会询问你:1337 模式 (y/n)、名字/姓氏、生日 (DDMMYYYY)、昵称、电话、身份证号、伴侣/孩子/宠物、公司、职业、“特殊词汇”、是否添加符号以及最小/最大长度。输出将被写入一个文本文件,每行一个密码。
**使用 CLI 选项(指定输出路径和长度;数据仍通过交互方式输入):**
```
python PPG_personal_pass_generator.py -o my_list.txt --min-length 6 --max-length 14
```
**选项**
| 选项 | 描述 |
|--------|-------------|
| `-o`, `--output` | 输出文件路径(默认:`special_list.txt`) |
| `--min-length` | 最小密码长度,1–20(默认:4) |
| `--max-length` | 最大密码长度,1–20(默认:12) |
| `--no-interactive` | 仅打印默认值并退出;不进行生成 |
### 输出结果
生成一个文本文件,每行包含一个候选密码,经过排序并去重。文件大小在很大程度上取决于你填写了多少字段,以及是否启用了符号和 1337 模式。
### 资源警告
如果填写了 **所有** 字段并启用“添加符号”,PPG 可能会生成 **非常大** 的字典(从几百 MB 到数 GB 不等,在极端情况下甚至可达 TB 级别),并消耗大量的 CPU 和 RAM。**建议:** 仅使用 **2–5** 个高价值条目(例如名字、出生年份、昵称),并设置合理的 `--min-length` / `--max-length` 以控制运行规模。
## 脚本 2:手机号生成器 (Python)
**文件:** `phone_numbers_gen.py`
### 功能简介
通过遍历一个或多个**前缀**以及每个前缀后**固定位数的数字**来生成**手机号列表**。每行一个号码(例如 `0501234567`)。默认前缀为以色列的手机/VoIP/固定电话(050, 052, 053, 054, 055, 058, 072, 076, 077),前缀后跟随 **7 位数字**,即 9 个前缀 × 10^7 = **9000 万**个号码(如果你不加以限制的话)。
典型用途:短信/语音测试、欺诈检查,或者任何需要特定地区/前缀下完整或部分号码空间的场景。
### 适用场景
- 为测试基于手机的身份验证或速率限制的工具生成输入列表
- 为以色列号码构建特定地区的号码列表
- 使用 `--limit` 快速抽取样本以测试 pipeline
### 运行方式
**完整的默认列表(9000 万个号码,文件可能会很大且运行缓慢):**
```
python phone_numbers_gen.py -o israeli_phone_numbers.txt
```
**单个前缀,限制数量(例如生成 1 万行用于测试):**
```
python phone_numbers_gen.py -p 050 -o 050_sample.txt -n 10000
```
**自定义前缀,静默模式(不向 stderr 输出进度):**
```
python phone_numbers_gen.py --prefixes 050 052 054 -o mobile.txt -q
```
**选项**
| 选项 | 描述 |
|--------|-------------|
| `-o`, `--output` | 输出文件(默认:`israeli_phone_numbers.txt`) |
| `-p`, `--prefixes` | 一个或多个前缀,用空格分隔(默认:以色列前缀集) |
| `-d`, `--digits` | 前缀后的数字位数,1–10(默认:7) |
| `-n`, `--limit` | 生成此数量的号码后停止(可选;适用于测试) |
| `-q`, `--quiet` | 不向 stderr 输出进度消息 |
### 输出结果
纯文本文件,每行一个号码(例如 `0500000000` … `0509999999`)。使用默认设置且不加 `--limit` 时,文件会非常大(9000 万行大约为 900 MB+)。
## 脚本 3:Base64 凭证对
**文件:** `base64_matches.py`
### 功能简介
接收**用户名**和**密码**(可以是单个用户名或一个列表,以及一个密码列表),并输出每个 `username:password` 对的 **Base64 编码**,每行一个。这正是 HTTP **Basic Authentication**(`Authorization: Basic `)所使用的格式。许多工具(例如用于暴力破解或撞库的工具)需要这种预计算的 Base64 字符串列表,以便它们可以直接进行尝试,而无需在运行时进行编码。
简而言之:你提供一个用户名(或包含用户名的文件)和一个包含密码的文件;脚本会将它们的所有组合生成 Base64 编码并写入文件。
### 适用场景
- 为测试 HTTP Basic Auth endpoint 的工具准备输入
- 构建扫描器或自定义脚本所需的“用户名:密码”凭证列表
- 当你拥有固定的用户名/密码列表时,减少重复的编码过程
### 运行方式
**单个用户名 + 密码文件 (CLI):**
```
python base64_matches.py -U admin -p passwords.txt -o matches_base64.txt
```
**用户名列表 × 密码列表(笛卡尔积):**
```
python base64_matches.py -u usernames.txt -p passwords.txt -o matches_base64.txt
```
**交互模式(不带参数;脚本会提示输入文件路径并询问是单个还是多个用户名):**
```
python base64_matches.py
```
**选项**
| 选项 | 描述 |
|--------|-------------|
| `-U`, `--username` | 单个用户名(如果同时提供,则覆盖 `--usernames`) |
| `-u`, `--usernames` | 包含用户名的文件(每行一个) |
| `-p`, `--passwords` | 包含密码的文件(每行一个,CLI 模式下必填) |
| `-o`, `--output` | 输出文件(默认:`matches_base64.txt`) |
### 输出结果
每行一个 Base64 字符串。每一行都是 `base64(username + ":" + password)`。对某一行进行解码即可还原出 `username:password`。总行数 = (用户名数量)×(密码数量)。
## 脚本 4:手机号生成器 (C++)
**文件:** `generate_phone_numbers.cpp`
### 功能简介
与 **phone_numbers_gen.py** 的思路相同:为一组固定的**前缀**以及前缀后**固定位数的数字**生成所有号码。C++ 版本使用相同的默认以色列前缀和 7 位数字(总共 9000 万个号码)。它没有限制选项,也无法从命令行配置前缀——这些是硬编码在源码中的。它的优势在于**速度和低内存占用**:在 C++ 中写入数千万行比在 Python 中要快得多,因此对于“完整”运行来说,这是首选方案。
### 适用场景
- 你需要 **完整的** 以色列默认号码列表(所有 9 个前缀 × 10^7)并希望获得最快的运行速度。
- 你可以接受通过修改源代码来更改前缀或数字位数。
### 编译
```
make cpp
# 或
g++ -Wall -Wextra -std=c++17 -O2 -o generate_phone_numbers generate_phone_numbers.cpp
```
### 运行方式
**默认输出文件 `israeli_phone_numbers.txt`:**
```
./generate_phone_numbers
```
**自定义输出路径:**
```
./generate_phone_numbers /path/to/out.txt
```
### 输出结果
与 Python 脚本相同:每行一个号码(前缀 + 补零的数字)。使用默认设置时,输出 9000 万行。要更改前缀或数字位数,请编辑源码中的 `kPrefixes` 和 `kDigitsAfterPrefix` / `kMaxNumber` 常量并重新编译。
## 快速参考
| 任务 | 命令 |
|------|--------|
| PPG 交互模式 | `python PPG_personal_pass_generator.py` |
| PPG 指定长度/输出 | `python PPG_personal_pass_generator.py -o out.txt --min-length 6 --max-length 14` |
| 手机号列表 (Python, 样本) | `python phone_numbers_gen.py -p 050 -n 10000 -o 050.txt` |
| 手机号列表 (Python, 完整) | `python phone_numbers_gen.py -o israeli_phone_numbers.txt` |
| Base64 单个用户 | `python base64_matches.py -U admin -p pass.txt -o b64.txt` |
| Base64 用户列表 × 密码列表 | `python base64_matches.py -u users.txt -p pass.txt -o b64.txt` |
| 手机号列表 (C++) | `make cpp && ./generate_phone_numbers [out.txt]` |
## 测试
```
python3 -m pytest tests/ -v
```
## 许可证与作者
- **作者:** Andrey Pautov – 1200km@gmail.com
- **许可证:** GPL-3.0-or-later(详见 [LICENSE](LICENSE))。
仅在授权的安全测试中使用,并遵守适用的法律法规。
## 1200km 生态系统
本项目是 1200km 安全研究生态系统的一部分。使用 [AdversaryGraph](https://1200km.com/adversarygraph/) 进行 CTI 到检测的工作流、ATT&CK/ATLAS 映射、攻击者关联分析、IOC 富集,以及适合分析师阅读的报告生成。
- [AdversaryGraph 项目主页](https://1200km.com/adversarygraph/)
- [AdversaryGraph 文档](https://1200km.com/adversarygraph-docs/)
- [实时 ATT&CK/ATLAS 工作区](https://1200km.com/threat-matrix/)
- [1200km 安全研究生态系统](https://1200km.com/)
标签:C++, Python, 安全测试, 安全规则引擎, 密码字典, 密码生成器, 攻击性安全, 数据擦除, 无后门, 逆向工具