Qu’est ce que SPIKE

Spike est un kit de création de fuzzers de protocoles. Il propose une API permettant de créer ses propres fuzzers pour les protocoles réseau, en utilisant le langage C++. SPike founit une série de commandes de base qui servent à générer des messages « fuzzé » à envoyer vers un service réseau.

Scriptiong SPIKE

Pour les applications serveur basées sur TCP, on utiliser des scrpit .spk avec l’interpréteur generic_send_tcp (préinstallé sur Kali Linux). La syntaxe de base est :

1
generic_send_tcp <IP> <port> <script.spk> <SKIPVAR> <SKIPSTR>
  • IP / PORT : Cible à fuzz
  • script.spk : Script SPIKE à exécuter
  • SKIPVAR : Permet ede sauter une ou plusieurs variables s_string_variable
  • SKIPSTR : Permet de sauter un certian nombre de chaînes générées automatiquement

Ainsi, pour lancer un fuzzing classique depuis le début, on peut utiliser la commande suivante :

Principales commandes SPIKE

Les scripts SPIKE utilisent des primitives pour définir les messages à envoyer. Voici les plus utiles, regroupées par catégorie :

Chaines de caractrères

1
2
3
s_string("Hello");               // Ajoute la chaîne "Hello"
s_string_repeat("A", 200); // Répète "A" 200 fois
s_string_variable("payload"); // Insère une chaîne fuzzée

Données binaire

1
2
s_binary("\\x41");               // Ajoute le byte 0x41 ("A")
s_binary_repeat("\\x41", 200); // Répète 0x41 200 fois

Blocs

1
2
3
4
s_block_start("bloc1");          // Début d’un bloc nommé*
s_block_end("bloc1"); // Fin du bloc
s_blocksize_string("bloc1", 2); // Taille en 2 caractères ASCII
s_binary_block_size_byte("bloc1"); // Taille sur 1 octet

Exemple de script SPIKE (fuzz POST)

1
2
3
4
5
6
7
8
s_string("POST /testme.php HTTP/1.1\r\n");
s_string("Host: testserver.example.com\r\n");
s_string("Content-Length: ");
s_string("\r\nConnection: close\r\n\r\n");
s_block_start("block1");
s_string("inputvar=");
s_string_variable("inputval");
s_block_end("block1");

Ce script génère une reqête POST où la variable inputval sera remplacée par les différentes chaînes générées automatiquement par SPIKE :

1
2
3
4
5
6
POST /testme.php HTTP/1.1
Host: testserver.example.com
Content-Length: [taille]
Connection: close

inputvar=[chaîne_fuzzée]