# nuclei2snort **Repository Path**: liuxia0ming/nuclei2snort ## Basic Information - **Project Name**: nuclei2snort - **Description**: 批量转换nuclei规则为snort规则 - **Primary Language**: Python - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-11-08 - **Last Updated**: 2025-07-07 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Nuclei2Snort ## 📖 项目介绍 **Nuclei2Snort** 是一个高效的自动化工具,用于将 [Nuclei](https://github.com/projectdiscovery/nuclei) POC(Proof of Concept)模板批量转换为 [Snort](https://www.snort.org/) IDS/IPS 规则。该工具帮助安全研究人员和运维团队快速将 Nuclei 的漏洞检测模板转换为可部署的网络入侵检测规则。 ### ✨ 主要特性 - 🚀 **批量转换**: 支持单文件和目录批量转换 - 🌐 **智能翻译**: 集成腾讯云翻译API,自动将英文漏洞描述翻译为中文 - 🔧 **自动分类**: 智能识别漏洞类型并映射到相应的Snort分类 - ⚡ **并发处理**: 支持多线程并发转换,提高处理效率 - 🛡️ **安全配置**: 支持环境变量配置API密钥,避免硬编码泄露 - 📊 **详细日志**: 完整的转换过程日志记录和错误追踪 - 🎯 **命令行界面**: 友好的CLI界面,支持多种参数配置 ### 🎯 转换示例 **输入 (Nuclei YAML)**: ```yaml id: CVE-2023-12345 info: name: "Test XSS Vulnerability" severity: high classification: cve-id: CVE-2023-12345 http: - method: GET path: - "{{BaseURL}}/test?param=$$$$" ``` **输出 (Snort Rule)**: ``` alert http any any -> any any (msg:"Test XSS Vulnerability";msg_cn:"测试XSS漏洞";flow:to_server,established;content:"|3c 73 63 72 69 70 74 3e 61 6c 65 72 74 28 31 29 3c 2f 73 63 72 69 70 74 3e|";sid:200001;priority:8;classtype:attempted-recon;cve:CVE-2023-12345;success:0;attack_chain:intrusion;reliability:90;) ``` ## 🛠️ 安装配置 ### 环境要求 - Python 3.7+ - 腾讯云账号(用于翻译功能,可选) ### 1. 克隆项目 ```bash git clone https://github.com/your-username/nuclei2snort.git cd nuclei2snort ``` ### 2. 安装依赖 ```bash pip install -r requirements.txt ``` ### 3. 配置API密钥(可选) 翻译功能需要腾讯云翻译API,如不配置将跳过翻译使用原文: 1. 访问 [腾讯云控制台](https://console.cloud.tencent.com/cam/capi) 获取API密钥 2. 复制配置模板文件: ```bash cp config.env.example .env ``` 3. 编辑 `.env` 文件,填入真实的API密钥: ```bash TENCENT_SECRET_ID=your_actual_secret_id TENCENT_SECRET_KEY=your_actual_secret_key ``` 4. 加载环境变量: ```bash source .env ``` 或者直接设置系统环境变量: ```bash export TENCENT_SECRET_ID="your_secret_id" export TENCENT_SECRET_KEY="your_secret_key" ``` ## 🚀 使用说明 ### 基本用法 ```bash # 查看帮助信息 python run.py --help # 转换单个文件 python run.py --file input/pocs/2023/CVE-2023-0001.yaml # 转换整个目录 python run.py --dir input/pocs/2023/ # 使用8个并发线程转换目录 python run.py --dir input/cve_fail/ --workers 8 ``` ### 命令行参数 | 参数 | 短参数 | 描述 | 示例 | |------|--------|------|------| | `--file` | `-f` | 转换单个YAML文件 | `-f poc.yaml` | | `--dir` | `-d` | 转换目录中的所有YAML文件 | `-d ./pocs/` | | `--workers` | `-w` | 并发处理线程数(默认:4) | `-w 8` | | `--version` | `-v` | 显示版本信息 | `-v` | | `--help` | `-h` | 显示帮助信息 | `-h` | ### 输入文件格式要求 Nuclei YAML文件需要包含以下必要字段: ```yaml id: unique-id info: name: "Vulnerability Name" severity: medium|high|critical|low classification: cve-id: CVE-XXXX-XXXX http: - method: GET|POST|PUT|... path: - "{{BaseURL}}/path/with/$$payload$$" ``` **重要**: 需要检测的内容必须用 `$$content$$` 标记包围。 ## 📁 项目结构 ``` nuclei2snort/ ├── run.py # 主程序入口 ├── config/ │ ├── config.py # 配置管理 │ └── log.py # 日志配置 ├── tools/ │ ├── cn2en.py # 翻译工具 │ └── ali_crawl.py # 阿里云爬虫工具 ├── input/ # 输入文件目录 │ ├── pocs/ # POC模板文件 │ └── cve_fail/ # 失败处理文件 ├── output/ # 输出规则文件 ├── logs/ # 日志文件 ├── requirements.txt # Python依赖 ├── config.env.example # 环境变量配置示例 └── README.md # 说明文档 ``` ## 📊 执行效果 ![执行过程](https://foruda.gitee.com/images/1731057556212438292/d07837ad_2666896.png "执行过程演示") ### 日志示例 ``` 16:30:15,123 [INFOR] run::45 - 环境验证通过 16:30:15,124 [INFOR] run:convert_directory:78 - 开始批量转换目录: input/pocs/2023 16:30:15,125 [INFOR] run:convert_directory:85 - 找到 150 个YAML文件 16:30:15,200 [INFOR] run:extract_poc_content:156 - 处理第1个标记: /admin/login.php?user=admin... 16:30:16,300 [ALERT] run:convert_single_file:234 - 成功生成规则: alert http any any -> any any (msg:"Admin Panel Login Bypass";msg_cn:"管理面板登录绕过";flow:to_server,established;content:"/admin/login.php";nocase;sid:200001;priority:8;classtype:attempted-user;cve:CVE-2023-0001;success:0;attack_chain:intrusion;reliability:90;) ``` ## ⚙️ 配置说明 ### 漏洞类型映射 工具会根据中文描述自动映射Snort分类类型: | 关键词 | Snort分类 | |--------|-----------| | SQL、sql | sql-injection | | 执行、命令 | arbitrary-code-execution | | 信息、泄露 | information-leak | | 遍历、穿越 | directory-traversal | | 任意文件 | webshell | | 代码注入 | arbitrary-code-execution | ### 优先级映射 根据Nuclei严重程度自动映射优先级: | Nuclei严重程度 | Snort优先级 | |----------------|-------------| | critical | 10 | | high | 8 | | medium | 6 | | low | 3 | ## 🔧 常见问题 ### Q: 为什么某些YAML文件没有被转换? A: 请检查以下几点: 1. YAML文件格式是否正确 2. 是否包含必要的字段(info.name, http等) 3. 检测内容是否用`$$...$$`标记包围 4. 查看日志文件获取详细错误信息 ### Q: 翻译功能不工作怎么办? A: 翻译功能是可选的,如果不配置API密钥: 1. 工具会显示警告但继续运行 2. 使用原英文作为中文描述 3. 不影响规则生成的其他功能 ### Q: 如何提高转换效率? A: 可以通过以下方式优化: 1. 增加并发线程数:`--workers 8` 2. 确保网络连接稳定(翻译API调用) 3. 使用SSD硬盘提高文件读写速度 ### Q: 生成的规则在哪里? A: 转换后的Snort规则保存在 `output/` 目录下,文件名格式为 `YYYYMMDDHH_ips.rules` ## 🤝 贡献指南 欢迎提交Issue和Pull Request来帮助改进项目! 1. Fork 项目 2. 创建功能分支 (`git checkout -b feature/AmazingFeature`) 3. 提交更改 (`git commit -m 'Add some AmazingFeature'`) 4. 推送到分支 (`git push origin feature/AmazingFeature`) 5. 开启 Pull Request ## 📝 更新日志 ### v2.0.0 (2024-11-08) - 🔄 重构代码架构,采用面向对象设计 - ✨ 新增命令行参数支持 - ⚡ 添加并发处理功能 - 🛡️ 改进API密钥安全管理 - 📊 完善日志系统和错误处理 - 🐛 修复多个已知问题 ### v1.0.0 (2023-02-21) - 🎉 首次发布 - 📄 基础的YAML到Snort规则转换功能 - 🌐 集成腾讯云翻译API ## 📄 许可证 本项目采用 MIT 许可证 - 查看 [LICENSE](LICENSE) 文件了解详情。 --- 如果这个项目对您有帮助,请给个⭐️支持一下!