SPIKE
Framework et bibliothèque de fuzzing protocolaire en C, utilisé pour construire des fuzzers réseau sur mesure à partir de petits scripts décrivant la structure des messages. C-based protocol fuzzing framework and library used to build custom network protocol fuzzers from small scripts describing message structure.
↗ https://www.kali.org/tools/spike/Overview
SPIKE is a low-level, C-based fuzzing framework for building custom network protocol fuzzers. Rather than fuzzing blindly, you describe a protocol’s message structure in a small “SPIKE script” (.spk) using primitives like s_string(), s_binary(), and s_int(), and SPIKE mutates each field in turn while sending the resulting packets at a target service — useful for vulnerability research against proprietary or undocumented TCP/UDP protocols where no off-the-shelf fuzzer exists.
Common Usage
Fuzz a TCP service using a SPIKE script describing its protocol
generic_send_tcp <target> <port> <script.spk> <skip_var_count> <skip_str_count>
Fuzz a UDP service instead
generic_send_udp <target> <port> <script.spk> 0 0
Resume fuzzing from a specific test case index after a crash
generic_send_tcp <target> <port> <script.spk> 45 0
// example.spk — minimal SPIKE script describing a length-prefixed command
s_binary("00 00 00 00"); // 4-byte length placeholder, auto-filled
s_string("USER"); // fixed command name
s_string_variable("admin"); // fuzzed field — SPIKE will mutate this
s_string("\r\n");
Tips
- Run the target under a debugger (or with core dumps enabled) so you can correlate a SPIKE crash with the exact test case index that triggered it
skip_var_count/skip_str_countlet you resume a long fuzzing run from where it crashed instead of restarting from test case zero- SPIKE predates most modern coverage-guided fuzzers (AFL++, boofuzz) — still valuable for quick structure-aware fuzzing of a proprietary TCP/UDP protocol without instrumenting the binary
Help / Man page
generic_send_tcp host port spike_script skip_variable skip_string
generic_send_udp host port spike_script skip_variable skip_string
host target hostname or IP
port target port
spike_script path to .spk script describing the protocol
skip_variable skip to this variable index (resume support)
skip_string skip to this string fuzz index (resume support)
SPIKE script primitives (used inside .spk files):
s_string("literal") fixed string content
s_string_variable("value") fuzzed string field, seeded with value
s_binary("hex bytes") fixed binary content
s_int(N) fuzzed integer field
s_block_size_binary(...) auto-computed length field
Vue d’ensemble
SPIKE est un framework de fuzzing bas niveau en C pour construire des fuzzers réseau sur mesure. Plutôt que de fuzzer à l’aveugle, on décrit la structure des messages d’un protocole dans un petit “script SPIKE” (.spk) à l’aide de primitives comme s_string(), s_binary() et s_int(), et SPIKE mute chaque champ à tour de rôle en envoyant les paquets résultants vers un service cible : utile pour la recherche de vulnérabilités sur des protocoles TCP/UDP propriétaires ou non documentés pour lesquels aucun fuzzer prêt à l’emploi n’existe.
Utilisation courante
# Fuzzer un service TCP à l'aide d'un script SPIKE décrivant son protocole
generic_send_tcp <target> <port> <script.spk> <skip_var_count> <skip_str_count>
# Fuzzer un service UDP à la place
generic_send_udp <target> <port> <script.spk> 0 0
# Reprendre le fuzzing depuis un index de cas de test précis après un crash
generic_send_tcp <target> <port> <script.spk> 45 0
// example.spk : script SPIKE minimal décrivant une commande préfixée par sa longueur
s_binary("00 00 00 00"); // marqueur de longueur sur 4 octets, rempli automatiquement
s_string("USER"); // nom de commande fixe
s_string_variable("admin"); // champ fuzzé, SPIKE va le muter
s_string("\r\n");
Conseils
- Faire tourner la cible sous un débogueur (ou avec les core dumps activés) afin de pouvoir corréler un crash SPIKE avec l’index exact du cas de test qui l’a déclenché
skip_var_count/skip_str_countpermettent de reprendre une longue session de fuzzing là où elle a planté au lieu de repartir du cas de test zéro- SPIKE précède la plupart des fuzzers modernes guidés par la couverture (AFL++, boofuzz) : il reste utile pour un fuzzing rapide et sensible à la structure d’un protocole TCP/UDP propriétaire sans instrumenter le binaire
Aide / Page de manuel
generic_send_tcp host port spike_script skip_variable skip_string
generic_send_udp host port spike_script skip_variable skip_string
host target hostname or IP
port target port
spike_script path to .spk script describing the protocol
skip_variable skip to this variable index (resume support)
skip_string skip to this string fuzz index (resume support)
SPIKE script primitives (used inside .spk files):
s_string("literal") fixed string content
s_string_variable("value") fuzzed string field, seeded with value
s_binary("hex bytes") fixed binary content
s_int(N) fuzzed integer field
s_block_size_binary(...) auto-computed length field