A Symfony-based Web Application Security Training Platform with CTF (Capture The Flag) challenges, learning modules, and user management.
- 🔐 User Registration & Authentication
- 🎯 View and solve CTF challenges
- 💡 Access hints for challenges
- 📚 Browse learning modules
- 📊 Track progress and points
- ✅ Submit flags and get instant feedback
- 👥 User management (view, suspend/activate)
- 🎮 Challenge management (CRUD operations)
- 💡 Hint management for challenges
- 📖 Learning module management
- 📝 Review submission history
- 📈 View platform statistics
- Built with Symfony 6.4
- MySQL database
- Symfony Security component for authentication
- Twig templating engine
- Bootstrap 5 UI
- Email notifications (Symfony Mailer)
- Data fixtures for sample data
- PHP 8.1 or higher
- MySQL 8.0 or higher
- Composer
- Symfony CLI (optional, for local development)
-
Clone or navigate to the project directory:
cd security-training-platform -
Install dependencies:
composer install
-
Configure environment variables:
- Copy
.envand create.env.local:cp .env .env.local
- Update database credentials in
.env.local:DATABASE_URL="mysql://username:password@127.0.0.1:3306/security_training?serverVersion=8.0&charset=utf8mb4" - Update APP_SECRET with a random string
- Copy
-
Create the database:
php bin/console doctrine:database:create
-
Run migrations:
php bin/console doctrine:migrations:migrate
-
Load sample data (optional):
php bin/console doctrine:fixtures:load
-
Start the development server:
symfony server:start
Or use PHP built-in server:
php -S localhost:8000 -t public
After loading fixtures, you can use these credentials:
Admin Account:
- Email:
admin@securitytraining.local - Password:
admin123
Student Account:
- Email:
student@securitytraining.local - Password:
student123
security-training-platform/
├── bin/ # Console commands
├── config/ # Configuration files
│ ├── packages/ # Package configurations
│ └── routes.yaml # Routing configuration
├── migrations/ # Database migrations
├── public/ # Public web directory
│ └── index.php # Front controller
├── src/
│ ├── Controller/ # Controllers
│ ├── Entity/ # Doctrine entities
│ ├── Form/ # Form types
│ ├── Repository/ # Doctrine repositories
│ └── DataFixtures/ # Sample data
├── templates/ # Twig templates
│ ├── admin/ # Admin templates
│ ├── student/ # Student templates
│ └── security/ # Auth templates
└── var/ # Cache and logs
- id, username, email, password, roles, status
- Roles: ROLE_ADMIN, ROLE_STUDENT
- id, title, description, difficulty, category, flag, points, isPublished
- Categories: web, crypto, reverse, binary, forensics, misc
- Difficulties: easy, medium, hard, expert
- id, user, challenge, timestamp, isCorrect, submittedFlag
- id, challenge, text, orderNumber
- id, title, content, category, orderNumber, isPublished
- Register an account or login
- Browse challenges from the dashboard
- View challenge details and attempt to solve them
- Submit flags to earn points
- Access hints when stuck
- Read learning modules to learn security concepts
- Track progress on the progress page
- Login with admin credentials
- Create challenges with descriptions, flags, and points
- Add hints to help students
- Create learning modules with educational content
- Manage users - view, suspend, or activate accounts
- Review submissions to monitor student activity
To enable email notifications, configure the MAILER_DSN in .env.local:
# For Gmail
MAILER_DSN=smtp://username:password@smtp.gmail.com:587
# For Mailtrap (development)
MAILER_DSN=smtp://username:password@smtp.mailtrap.io:2525
# For local testing
MAILER_DSN=smtp://localhost:1025- Change default admin password immediately in production
- Use strong APP_SECRET value
- Enable HTTPS in production
- Configure proper firewall rules
- Regularly update dependencies
- Implement rate limiting for flag submissions
- Use environment variables for sensitive data
- Sandbox environment integration for challenge testing
- Real-time leaderboard
- Advanced statistics and analytics
- Team-based competitions
- Docker containerization
- API for external integrations
Proprietary - Security Training Platform
Dhia Eddine Saïd
For questions or issues, contact the platform administrator.