franckferman/PunyPwn

GitHub: franckferman/PunyPwn

一款无依赖的域名攻击面生成器,集成12种模组用于枚举同形字、错拼及比特翻转等欺骗性域名变体,服务于红队演练与品牌防护。

Stars: 10 | Forks: 1

[![Contributors](https://img.shields.io/github/contributors/franckferman/PunyPwn.svg?style=for-the-badge)](https://github.com/franckferman/PunyPwn/graphs/contributors) [![Stargazers](https://img.shields.io/github/stars/franckferman/PunyPwn.svg?style=for-the-badge)](https://github.com/franckferman/PunyPwn/stargazers) [![License](https://img.shields.io/github/license/franckferman/PunyPwn.svg?style=for-the-badge)](https://github.com/franckferman/PunyPwn/blob/stable/LICENSE)

PunyPwn

域名攻击面生成器。
枚举 typosquatting、IDN homograph、bitsquatting 和视觉欺骗候选域名,用于红队演练、威胁狩猎和品牌保护。

**[网站](https://franckferman.github.io/PunyPwn/) · [文档](#usage)**
## 目录
展开 / 折叠
  1. 概述
  2. 攻击模块
  3. MITRE ATT&CK 映射
  4. 安装
  5. 用法
  6. 示例
  7. 检测与缓解
  8. 法律免责声明
  9. 许可证
  10. 联系方式
## 概述 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)。 ## 联系方式 [![ProtonMail](https://img.shields.io/badge/ProtonMail-8B89CC?style=for-the-badge&logo=protonmail&logoColor=white)](mailto:contact@franckferman.fr) [![LinkedIn](https://img.shields.io/badge/-LinkedIn-black.svg?style=for-the-badge&logo=linkedin&colorB=blue)](https://www.linkedin.com/in/franckferman) [![Twitter](https://img.shields.io/badge/-Twitter-black.svg?style=for-the-badge&logo=twitter&colorB=blue)](https://www.twitter.com/franckferman)

(返回顶部)

标签:bitsquatting, ESC8, IDN同形异义字, Punycode, typosquatting, 品牌保护, 域名安全, 域名抢注, 域名生成, 域名监控, 攻击面枚举, 社会工程学, 网络安全, 视觉欺骗, 配置审计, 隐私保护