franckferman/PunyPwn
GitHub: franckferman/PunyPwn
一款无依赖的域名攻击面生成器,集成12种模组用于枚举同形字、错拼及比特翻转等欺骗性域名变体,服务于红队演练与品牌防护。
Stars: 10 | Forks: 1
[](https://github.com/franckferman/PunyPwn/graphs/contributors)
[](https://github.com/franckferman/PunyPwn/stargazers)
[](https://github.com/franckferman/PunyPwn/blob/stable/LICENSE)
## 目录
## 概述
PunyPwn 是一款域名攻击面生成器,可枚举目标域名所有看似合理的欺骗性变体。它涵盖了从简单的拼写错误到高级 Unicode 同形字注入等 12 种攻击技术,生成结构化的候选域名列表,适用于:
- **红队 / 钓鱼模拟**:识别在视觉上冒充目标的可注册域名
- **威胁狩猎**:枚举相似域名,以便通过 CT 日志、被动 DNS 或 SIEM 查询进行监控
- **品牌保护**:在攻击者之前主动注册或抢注被抢注的变体
- **安全研究**:研究 IDN、typosquatting 和 bitsquatting 暴露的攻击面
零外部依赖。所有 12 个模块均仅使用 Python 标准库。
## 攻击模块
PunyPwn 实现了 12 个独立的攻击模块。每个模块均可单独运行或组合运行。
| 模块 | 技术 | 示例 (`google.com`) |
|---|---|---|
| `idn` | 西里尔字母同形字替换 (Punycode) | `gооgle.com` (Cyrillic o) -> `xn--ggle-55da.com` |
| `homoglyph` | ASCII 视觉相似字符 (rn->m, l->1, O->0) | `goog1e.com`, `googie.com` |
| `omission` | 删除单个字符 | `gogle.com`, `goole.com` |
| `repetition` | 单个字符重复 | `googgle.com`, `gooogle.com` |
| `swap` | 相邻字符交换 | `googel.com`, `ogogle.com` |
| `insertion` | 在每个位置插入额外字符 | `googale.com`, `goohgle.com` |
| `replace` | QWERTY 相邻键替换 | `goofle.com`, `googke.com` |
| `bitsquat` | 每个字符单比特翻转 (bitsquatting) | `googlg.com`, `coogle.com` |
| `tld` | 常见 TLD 拼写错误和相似项 | `google.cm`, `google.co`, `google.con` |
| `hyphen` | 插入连字符 | `goo-gle.com`, `g-oogle.com` |
| `subdomain` | 插入点 (伪造子域名) | `g.oogle.com`, `goo.gle.com` |
| `vowelswap` | 元音替换 | `googla.com`, `guogle.com` |
使用 `--attack all` 运行所有模块,或使用 `--attack omission,swap,replace` 选择特定模块。
### IDN 同形字风格
IDN 模块支持三种保真度层级,控制使用哪些西里尔字母替换:
| 风格 | 字符 | 保真度 |
|---|---|---|
| `any` | a e o c p x y s i j q d g m t k b h (18) | 所有替换 |
| `realistic` | a e o c p x y s i j (10) | 高视觉相似度 |
| `very-realistic` | a e o c s i (6) | 在大多数字体中像素级相同 |
## MITRE ATT&CK 映射
| 技术 | ID | 战术 | 相关性 |
|---|---|---|---|
| Phishing: Spearphishing Link | T1566.002 | Initial Access | 钓鱼邮件中的同形字/拼写错误域名 |
| Masquerading | T1036 | Defense Evasion | DNS/TLS 层面的域名欺骗 |
| Acquire Infrastructure: Domains | T1583.001 | Resource Development | 注册生成的候选域名 |
| Phishing for Information | T1598 | Reconnaissance | 通过克隆网站窃取凭据 |
## 安装
**Python 3** (仅标准库,零外部依赖)。
```
git clone https://github.com/franckferman/PunyPwn.git
cd PunyPwn
python3 PunyPwn.py --domain example.com
```
无需 `pip install`。所有 12 个模块均仅使用 Python 标准库。
## 用法
### 参数
| 参数 | 默认值 | 描述 |
|---|---|---|
| `--domain / -d` | - | 带 TLD 的目标域名 (例如 `google.com`) |
| `--batch / -b` | - | 包含域名的文件 (每行一个) |
| `--attack / -a` | `all` | 逗号分隔的模块或 `all` |
| `--style` | `any` | IDN 保真度过滤器:`any`, `realistic`, `very-realistic` |
| `--level` | `4` | IDN 最大同时替换数 |
| `--output / -o` | - | 导出到文件 (自动检测:.json, .csv, .txt) |
| `--format` | auto | 覆盖导出格式 |
| `--quiet / -q` | off | 每行一个域名 (适合管道传输) |
| `--count` | off | 按模块显示计数,不列出详情 |
## 示例
### 完整攻击面枚举
```
python3 PunyPwn.py --domain google.com
```
### 针对性模块
```
# 仅错拼(最快,最常见的现实世界抢注)
python3 PunyPwn.py -d paypal.com --attack omission,swap,replace,repetition
# 仅 IDN(保真度最高)
python3 PunyPwn.py -d paypal.com --attack idn --style very-realistic --level 2
# Bitsquatting 候选
python3 PunyPwn.py -d microsoft.com --attack bitsquat
```
### 导出以用于工具链集成
```
# 用于自动化的 JSON 导出
python3 PunyPwn.py -d example.com --attack all --output results.json
# 用于电子表格分析的 CSV
python3 PunyPwn.py -d example.com --attack all --output results.csv
# 静默模式:管道传输至 dig、whois 或注册检查
python3 PunyPwn.py -d example.com --attack omission,swap -q | xargs -I{} dig +short {}
# 检查哪些变体已注册
python3 PunyPwn.py -d paypal.com -q --attack tld,omission | while read d; do
if dig +short "$d" | grep -q '.'; then echo "[LIVE] $d"; fi
done
```
### 批处理模式
```
# 处理多个目标
echo -e "google.com\npaypal.com\nmicrosoft.com" > targets.txt
python3 PunyPwn.py --batch targets.txt --attack all --output campaign.json
```
### 计数模式 (不列出详情)
```
python3 PunyPwn.py -d google.com --count
```
## 检测与缓解
### 网络控制
- 部署 DNS 过滤 (Cisco Umbrella, Quad9, Pi-hole) 以标记匹配品牌模式的 `xn--` 解析
- 监控 DNS 查询日志中的 Punycode 标签和已知的 typosquatting 变体
- 实施 DMARC, DKIM 和 SPF;将监控扩展到相似域名
### 浏览器控制
- 现代浏览器应用混合脚本启发式规则,并为欺骗性 IDN 标签显示 Punycode
- 扩展:IDN Safe, uBlock Origin (配合适当的过滤列表)
### 主动注册
- 预先注册品牌域名的常见同形字和拼写错误变体
- 使用 PunyPwn 本身枚举候选域名并进行锁定
### CT 日志监控
- 监控证书透明度日志 (crt.sh, Certstream) 中颁发给相似域名的证书
### 检测签名
```
# Suricata / Snort - IDN Punycode 查询
alert dns any any -> any 53 (msg:"IDN Punycode domain query"; dns.query; content:"xn--"; nocase; sid:9000001; rev:1;)
```
```
# Splunk - 搜寻 xn-- 解析
index=dns query="xn--*" | stats count by query, src_ip | sort -count
```
## 法律免责声明
PunyPwn 是一款安全研究和教育工具,旨在为授权评估展示域名欺骗攻击面。
此工具仅可用于您拥有明确书面授权的域名和基础设施。注册相似域名以欺骗用户、窃取凭据或冒充组织在大多数司法管辖区均属违法行为。
您需独自承担使用此工具的责任以及由此产生的任何后果。
## 许可证
本项目采用 GNU Affero General Public License v3.0 许可。参见 [LICENSE](https://github.com/franckferman/PunyPwn/blob/stable/LICENSE)。
## 联系方式
[](mailto:contact@franckferman.fr)
[](https://www.linkedin.com/in/franckferman)
[](https://www.twitter.com/franckferman)
PunyPwn
域名攻击面生成器。
枚举 typosquatting、IDN homograph、bitsquatting 和视觉欺骗候选域名,用于红队演练、威胁狩猎和品牌保护。
(返回顶部)
标签:bitsquatting, ESC8, IDN同形异义字, Punycode, typosquatting, 品牌保护, 域名安全, 域名抢注, 域名生成, 域名监控, 攻击面枚举, 社会工程学, 网络安全, 视觉欺骗, 配置审计, 隐私保护