CharlieZhang0216/unicorn-crm

GitHub: CharlieZhang0216/unicorn-crm

一个故意包含多种安全漏洞的企业级 CRM Web 应用程序,用于渗透测试和安全培训演练。

Stars: 1 | Forks: 0

# Unicorn CRM 企业客户关系管理平台 —— 一个专用于安全培训和红蓝队演练的包含故意漏洞的 Web 应用程序。 ## 概述 Unicorn CRM 是一个功能齐全的企业 CRM,模拟了真实的企业级应用程序。它为安全专业人员提供了一个真实的攻击面,以便在多个模块中练习漏洞发现、利用和修复。 ## 快速开始 ``` # 安装依赖 npm install # 启动应用程序(首次运行时自动执行 database auto-seeds) npm start # 访问 http://localhost:3000 ``` ### 其他命令 ``` # 带 auto-reload 的开发模式 npm run dev # 将 database 重置为初始状态 npm run reset ``` ## 功能 ### 核心模块 | 模块 | 描述 | 路由 | |--------|-------------|--------| | **Dashboard** | 包含团队统计数据和快捷操作的概览 | `/` | | **客户管理** | CRUD、详细视图、批量操作(删除、分配) | `/customers` | | **订单管理** | 带有审批工作流(批准/拒绝)的订单 | `/orders` | | **工单系统** | 带有优先级、SLA 跟踪、批量状态/分配的支持工单 | `/tickets` | | **用户资料** | 查看和管理具有基于角色的访问权限的资料 | `/profile` | | **身份验证** | 登录、注册(受邀请码限制)、忘记密码 | `/auth` | | **文件上传** | 头像上传、实体附件、下载/删除 | `/upload` | | **文档浏览器** | 安全的文件列表和下载 | `/files` | ### 扩展模块 | 模块 | 描述 | 路由 | |--------|-------------|--------| | **GraphQL API** | 使用 RBAC 查询用户、客户、工单、订单 | `/graphql` | | **REST API** | 带有 Bearer token + session 身份验证的 JSON API | `/api/v1` | | **管理面板** | 用户管理、session、审计日志、数据库检查 | `/api/admin` | | **CSV Export** | 导出客户、订单、工单(仅限管理员) | `/export` | | **XML Import** | 通过 XML 上传批量导入客户/订单 | `/import` | | **OAuth Provider** | 模拟的 Google OAuth 集成 | `/oauth` | | **API Tokens** | 基于 JWT 的 token 管理(仅限管理员) | `/api-tokens` | | **日历** | 带有月/周/日视图的事件,iCal 导出 | `/calendar` | | **笔记** | 带有 CRUD、标记的富文本笔记 | `/notes` | | **通知** | 应用内通知 + WebSocket 推送 | `/notifications` | | **报告** | 销售 pipeline 分析和图表 | `/reports` | | **Cron Jobs** | 计划的每日报告,每周的 token 清理 | `/jobs` | | **API 文档** | 交互式的 Swagger 风格文档 | `/api-docs` | | **调试面板** | 系统状态和诊断 | `/debug` | | **GraphQL Playground** | 交互式 GraphQL 浏览器 | `/graphql` (管理员) | ### 安全架构 - 对所有更改状态的操作提供 CSRF 保护 - 使用 HTTP-only cookie 的基于 session 的身份验证 - 基于角色的访问控制(管理员 / 经理 / 员工) - 使用 scrypt 哈希的 JWT API token 身份验证 - 身份验证 endpoint 上的速率限制 - GraphQL 深度(最大 5)和复杂性(最大 100)限制 - 生产模式下禁用 GraphQL introspection - 对所有安全相关操作进行审计日志记录 - 用于攻击检测的 Honeypot 路由 - 安全的 HTTP 头(HSTS、CSP、XSS 保护) - 密码强度强制要求(大写字母 + 小写字母 + 数字 + 特殊字符 + 黑名单) - 带有每个用户的 salt 的 scrypt 密码哈希 ## 测试账户 | 用户名 | 密码 | 角色 | |----------|----------|------| | `admin` | `Adm1n!Crm#2026` | 管理员 | | `zhang.wei` | `rGDdXKq7+e$d^M5Y` | 管理员 | | `li.na` | `sZPdAPc7X*4kSN*q` | 经理(销售 - 西海岸) | | `wang.lei` | `vFm4Y4-Pyj5vDZnF` | 经理(工程部) | | `chen.xiao` | `JLc!2n%ExsS@T!X%` | 经理(运营 - 中部) | | `sarah.chen` | `g*F^-Ng@nq7LHNfR` | 员工(销售) | | `james.wilson` | `2gN48NqzFCt8j-4s` | 员工(财务) | | `emma.park` | `REuwwSnw+2fn&hTR` | 员工(支持) | | `li.wei` | `_BG-T_CxQg#5HbsK` | 员工(工程部) | | `maria.garcia` | `7+gq$*&GbSc2Fp9&` | 员工(支持) | 数据库包含 10 个用户、15 个客户、20 个订单、15 个工单和 20 条审计日志条目 —— 均为虚构数据。 ## 项目结构 ``` unicorn-crm/ ├── app.js # Express entry point ├── package.json ├── config/ │ ├── database.js # SQLite initialization │ └── seed.js # Fake data seeding (10 users, 15+ entities) ├── middleware/ │ ├── auth.js # Session authentication │ ├── csrf.js # CSRF token protection │ ├── api-auth.js # Bearer token + JWT auth │ ├── graphql-auth.js # GraphQL auth context injection │ ├── audit.js # Attack audit + honeypot routes │ ├── headers.js # Security HTTP headers │ └── banner.js # Security warning banner ├── routes/ │ ├── index.js # Dashboard & API docs │ ├── auth.js # Login / Register / Forgot password │ ├── customers.js # Customer CRUD │ ├── customers-batch.js # Batch delete / assign │ ├── orders.js # Order management + approval workflow │ ├── tickets.js # Ticket CRUD + comments │ ├── tickets-batch.js # Batch status / assign │ ├── profile.js # User profiles │ ├── files.js # Document browser │ ├── upload.js # Avatar + attachment upload │ ├── export.js # CSV export (admin only) │ ├── import.js # XML batch import │ ├── api.js # REST API │ ├── admin.js # Admin panel (users, sessions, audit, DB) │ ├── api-tokens.js # JWT token management │ ├── oauth.js # Mock OAuth provider │ ├── graphql.js # GraphQL endpoint │ ├── calendar.js # Calendar events + iCal export │ ├── notes.js # Rich text notes │ ├── notifications.js # In-app notifications │ ├── reports.js # Sales reports │ ├── jobs.js # Cron job management │ ├── debug.js # System diagnostics │ └── errors.js # Search + error handling ├── services/ │ ├── mail.js # Email service (mock) │ ├── scheduler.js # Cron job scheduler │ └── websocket.js # Real-time notification push ├── views/ # EJS templates (23 views) ├── public/ # Static assets └── data/ # SQLite database (auto-created) ``` ## 技术栈 - **Runtime**: Node.js - **框架**: Express 4 - **模板**: EJS - **数据库**: SQLite(通过 better-sqlite3) - **API**: REST + GraphQL(express-graphql) - **身份验证**: Session cookie + JWT Bearer token + OAuth 2.0 模拟 - **实时**: WebSocket (ws) - **调度**: node-cron - **文件上传**: Multer - **样式**: Bootstrap 5 (CDN) ## 攻击面(预期) 此应用程序在设计上包含了用于培训的故意漏洞: - **信息泄露**: 调试 endpoint、错误堆栈跟踪、API 文档、GraphQL introspection - **身份验证绕过**: 弱默认凭证、邀请码限制、速率限制测试 - **授权缺陷**: 资料上的 IDOR、通过 mass assignment 导致的权限提升 - **注入**: 搜索中的 SQL 注入、笔记中的 XSS、XML 导入中的 XXE - **业务逻辑**: 订单批准绕过、批量操作滥用、CSV 导出泄露 - **API 滥用**: Token 枚举、JWT none-algorithm、WebSocket 身份验证绕过 所有故意漏洞都已记录在案,供教育性质的总结复盘使用。 ## 许可证 MIT —— 仅用于教育和授权的安全培训。请参阅 [LICENSE](LICENSE)。
标签:CISA项目, GNU通用公共许可证, GraphQL, HTTP工具, MITM代理, Node.js, RESTful API, 企业CRM系统, 安全培训靶场, 提示词优化, 故意漏洞应用, 网络测绘, 自定义脚本