Fast Client Overview¶
graph LR
client[Fast client] -->|spawns<br/>subprocess| alpha["runner"]
client[Fast client] -->|spawns<br/>subprocess| bravo["runner"]
subgraph "Exploit Alpha"
alpha -->|spawns<br/>thread| alphaThread1["exploit(10.1.2.1)"]
alpha -->|spawns<br/>thread| alphaThread2["exploit(10.1.3.1)"]
alpha -->|spawns<br/>thread| alphaThread3["exploit(10.1.4.1)"]
end
subgraph "Exploit Bravo"
bravo -->|spawns<br/>thread| bravoThread1["exploit(10.1.2.1)"]
bravo -->|spawns<br/>thread| bravoThread2["exploit(10.1.3.1)"]
bravo -->|spawns<br/>thread| bravoThread3["exploit(10.1.4.1)"]
end
subgraph "Opponents'<br/> services"
target1[10.1.2.1]
target2[10.1.3.1]
target3[10.1.4.1]
end
alphaThread1 -->|attacks| target1
alphaThread2 -->|attacks| target2
alphaThread3 -->|attacks| target3
bravoThread1 -->|attacks| target1
bravoThread2 -->|attacks| target2
bravoThread3 -->|attacks| target3
Anyone on the team can run a separate Fast client on their own machine. Each client's primary role is to run the exploits according to the user's specification. Fast provides an intuitive way of configuring using a single YAML file. That includes specifying targets, customizing each exploit's environment, and strategic arrangement of the attacks to ensure optimal CPU, memory and network resource utilization.
The core functionality of Fast is to run the attacks concurrently and independently of each other. If an exploit crashes or timeouts on one target, its execution on the other targets will remain unaffected. This is achieved by using threading library, spawning a separate Python thread for each target.
Exploits are ran separately as subprocesses. This lets attacks of the same exploit share the same Python interpreter, enabling the use of prepare
and cleanup
functions in your exploit code, as well as bypassing the main process's Global Interpreter Lock (GIL).
Additionally, all clients will conform to the flag format specified on the server and synchronize with the server's tick clock, making them remain in sync without any time drifts or offsets.
This documentation section covers client configuration, exploit development guideline, and exploit management. Real-world examples complement each topic. You can use this documentation both as a guide during setup and as a reference in a competition.