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, 安全中间件, 安全防御评估, 安全防护, 容器化, 密码学, 手动系统调用, 数据库管理, 数据池, 权限控制, 活动跟踪, 用户管理, 管理面板, 统计报表, 网络安全, 认证授权, 请求拦截, 通知系统, 隐私保护