sami786chakwal/HackNest

GitHub: sami786chakwal/HackNest

HackNest是一个集成的网络安全CTF平台,用于安全评估和渗透测试。

Stars: 0 | Forks: 0

# HackNest HackNest 是一个使用 Node.js、Express.js、MSSQL 和服务器端渲染的 HTML 视图构建的综合 Capture The Flag (CTF) 平台。它提供了一个安全的环境来托管网络安全挑战、管理用户并跟踪进度,具有实时活动流、通知和行政面板等功能。 ## 功能 ### 用户功能 - 用户注册和登录,具有安全认证 - 个人资料管理,具有隐私设置(隐藏资料) - 挑战浏览和解决,带有标志提交 - 个人仪表板,带有统计信息和最近活动 - 通知系统,用于挑战更新和公告 - 用户设置页面,用于账户管理和密码更改 ### 管理员功能 - 管理员仪表板,带有用户和挑战统计信息 - 挑战管理(创建、编辑、删除挑战) - 用户管理(查看用户、封禁/解封、管理角色) - 向所有用户广播通知 - 监控用户解决活动的实时活动 - 模式设计器集成,用于数据库管理 ### 安全与基础设施 - 使用 express-session 进行安全的会话处理 - 使用 bcryptjs 进行密码散列 - 安全中间件(helmet、morgan) - MSSQL 数据库,具有连接池 - Docker 容器化,便于部署 - 环境变量配置 ## 要求 ### 对于 Docker 部署(推荐) - Docker 和 Docker Compose - 至少 4GB RAM 可用 ### 对于手动设置 - Node.js 18+ 或更高版本 - npm - 微软 SQL Server(或 Docker 中的 SQL Server) - 数据库名为 `HackNest` ## 使用 Docker 快速开始 1. 确保已安装 Docker 和 Docker Compose 2. 克隆或导航到项目目录 3. 运行应用程序: ``` docker-compose up --build ``` 应用程序将在 `http://localhost:3000` 上可用 默认凭据: - 管理员:`admin` / `Admin123!` - 数据库:`sa` / `Admin123!` ## 手动安装 ### 1. 安装依赖项 ``` npm install ``` ### 2. 数据库设置 #### 选项 A:使用 Docker for SQL Server ``` docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=Admin123!" -p 1433:1433 --name sqlserver -d mcr.microsoft.com/mssql/server:2022-latest ``` #### 选项 B:本地 SQL Server 确保 SQL Server 正在运行并创建一个名为 `HackNest` 的数据库。 ### 3. 数据库模式 运行 `HackNest.sql` 中的 SQL 脚本来创建所需的表: - 用户 - 挑战 - 解决方案 - 通知 ### 4. 配置 更新 `db.js` 以包含您的数据库连接详细信息或设置环境变量: ``` DB_SERVER=localhost DB_PORT=1433 DB_NAME=HackNest DB_USER=sa DB_PASSWORD=Admin123! ``` ### 5. 运行应用程序 ``` npm start ``` 在浏览器中打开 `http://localhost:3000`。 ## 使用方法 ### 用户工作流程 1. 注册新账户或登录 2. 浏览可用的挑战 3. 提交标志来解决挑战 4. 在仪表板上查看您的进度 5. 管理您的资料和设置 ### 管理员工作流程 1. 使用管理员凭据登录 2. 通过 `/admin` 访问管理员面板 3. 管理挑战和用户 4. 向用户发送通知 5. 监控实时活动 ## 项目结构 ``` HackNest/ ├── server.js # Express server entrypoint ├── db.js # MSSQL database connection ├── package.json # Dependencies and scripts ├── Dockerfile # Docker container configuration ├── docker-compose.yml # Multi-service Docker setup ├── docker-entrypoint.sh # Container initialization script ├── scripts/ │ └── init-db.js # Database schema initialization ├── routes/ │ ├── auth.js # Authentication routes │ ├── challenges.js # Challenge management │ ├── admin.js # Admin panel routes │ └── notifications.js # Notification system ├── views/ # HTML templates │ ├── login.html │ ├── register.html │ ├── dashboard.html │ ├── challenges.html │ ├── profile.html │ ├── settings.html │ ├── admin-dashboard.html │ ├── admin-challenges.html │ ├── admin-users.html │ └── notifications.html ├── public/ │ └── css/ # Stylesheets └── HackNest.sql # Database schema ``` ## API 端点 ### 认证 - `POST /login` - 用户登录 - `POST /register` - 用户注册 - `POST /logout` - 用户登出 - `GET /api/user-settings` - 获取用户设置 - `PUT /api/user-settings` - 更新用户设置 ### 挑战 - `GET /challenges` - 列出挑战 - `POST /api/submit-flag` - 为挑战提交标志 - `GET /api/user-stats` - 获取用户统计信息 ### 管理员 - `GET /admin` - 管理员仪表板 - `GET /api/admin/stats` - 管理员统计信息 - `POST /api/admin/challenges` - 创建挑战 - `PUT /api/admin/challenges/:id` - 更新挑战 - `DELETE /api/admin/challenges/:id` - 删除挑战 - `POST /api/admin/notifications` - 发送通知 ### 通知 - `GET /api/notifications` - 获取用户通知 - `PUT /api/notifications/:id/read` - 标记通知为已读 - `GET /api/recent-solves` - 获取最近的解决活动 ## 环境变量 - `DB_SERVER` - 数据库服务器主机名 - `DB_PORT` - 数据库端口(默认:1433) - `DB_NAME` - 数据库名(默认:HackNest) - `DB_USER` - 数据库用户名 - `DB_PASSWORD` - 数据库密码 - `SESSION_SECRET` - 会话密钥 - `PORT` - 应用程序端口(默认:3000) ## 开发 ### 在开发模式下运行 ``` npm run dev # If nodemon is configured ``` ### 数据库模式更改 修改 `HackNest.sql` 和 `scripts/init-db.js` 以更新模式。 ### 添加新功能 1. 在 `routes/` 目录中创建路由 2. 在 `views/` 中添加相应的视图 3. 根据需要更新导航和链接 ## 安全注意事项 - 密码使用 bcryptjs 散列 - 会话使用 express-session 保护 - Helmet 中间件提供安全头 - 在表单上实施输入验证 - 管理员路由需要身份验证和角色检查 ## 故障排除 ### 数据库连接问题 - 确保 SQL Server 正在运行 - 检查 `db.js` 中的连接字符串 - 验证端口 1433 的防火墙设置 ### Docker 问题 - 确保 Docker 有足够的资源 - 检查容器日志:`docker-compose logs` - 清理重建:`docker-compose down && docker-compose up --build` ### 权限问题 - 在首次运行时自动创建管理员用户 - 默认管理员凭据:`admin` / `Admin123!` ## 数据库备份 为确保数据安全,已将数据库备份包含在存储库中。您可以使用 SQL Server Management Studio 或任何兼容的 SQL 客户端从该备份文件恢复数据库。 ### 从备份中恢复 1. 打开 SQL Server Management Studio。 2. 连接到您的 SQL Server 实例。 3. 右键单击 `Databases` 节点并选择 `Restore Database...`。 4. 选择 `Device` 并从存储库中选择备份文件。 5. 按提示恢复数据库。 ### 备份文件位置 备份文件位于存储库的根目录中。确保您有权访问和从该文件恢复数据库。 ## 贡献 1. 分叉存储库 2. 创建功能分支 3. 进行更改 4. 仔细测试 5. 提交拉取请求 ## 许可证 ISC
标签:CTF平台, Docker, Express.js, GNU通用公共许可证, MITM代理, NIDS, Node.js, 安全中间件, 安全防御评估, 安全防护, 容器化, 密码学, 手动系统调用, 数据库管理, 数据池, 权限控制, 活动跟踪, 用户管理, 管理面板, 统计报表, 网络安全, 认证授权, 请求拦截, 通知系统, 隐私保护