Challenge Types
GZCTF provides four distinct challenge types, each designed for specific use cases:Static Attachment
Static attachment challenges use shared files and flags across all teams.Use case: Traditional challenges where all teams work with the same files and submit the same flag.
- Single attachment file shared by all teams
- Any configured flag can be accepted
- No team-specific differentiation
- Ideal for reverse engineering, cryptography, and forensics challenges
Dynamic Attachment
Dynamic attachment challenges distribute unique attachments and flags to each team. Characteristics:- Each team receives a unique attachment
- Flags are distributed according to teams
- Prevents flag sharing between teams
- Suitable for challenges requiring flag uniqueness
Static Container
Static container challenges use shared Docker containers without dynamic flag generation. Characteristics:- All teams use the same container template
- No dynamic flags issued
- Any configured flag can be submitted
- Container resource limits apply
- Memory Limit: Default 64 MB
- Storage Limit: Default 256 MB
- CPU Count: Default 0.1 CPUs (1 = 1 CPU core)
- Exposed Port: Default port 80
Dynamic Container
Dynamic container challenges automatically generate unique flags for each team via container environment variables.Flags are generated using the flag template and passed to containers as environment variables at runtime.
- Each team receives a unique container instance
- Flags are automatically generated and unique per team
- Prevents flag sharing
- Supports traffic capture for monitoring
- Open: Container can access external networks including the internet
- Isolated: Container cannot access external networks (internal only)
- Custom: Uses user-defined network configuration (Docker network or K8s label)
Challenge Categories
GZCTF supports the following challenge categories:Misc
Crypto
Pwn
Web
Reverse
Blockchain
Forensics
Hardware
Mobile
PPC
AI
Pentest
OSINT
Challenge Properties
Basic Information
| Property | Description |
|---|---|
| Title | Challenge name (required) |
| Content | Challenge description and instructions (required) |
| Category | Challenge category (default: Misc) |
| Type | Challenge type - cannot be changed after creation |
| IsEnabled | Whether the challenge is currently active |
| Hints | Optional list of hints for participants |
Constraints
Deadline Challenges can have an optional deadline. After the deadline, submissions are no longer accepted.0 for unlimited submissions.
Container Challenges
For container-based challenges, additional properties are available:| Property | Default | Description |
|---|---|---|
ContainerImage | - | Docker image name and tag |
MemoryLimit | 64 MB | Memory allocation |
StorageLimit | 256 MB | Disk storage |
CPUCount | 1 (0.1 CPU) | CPU allocation in 0.1 CPU units |
ExposePort | 80 | Container port to expose |
NetworkMode | Open | Network isolation level |
Flag Templates
Dynamic challenges use flag templates to generate unique flags for each team.[TEAM_HASH] placeholder is replaced with a team-specific hash generated from:
- Game’s team hash salt
- Challenge ID
- Team participation token
Challenge Model Reference
The Challenge model is located at:View Challenge Model Structure
View Challenge Model Structure
Related Topics
Dynamic Scoring
Learn how challenge scores decrease as more teams solve them
Container Management
Understand container lifecycle and management
Games
Explore how challenges are organized in games
Teams
See how teams participate in challenges