BurpSuite:Intruder

From aldeid
Jump to navigation Jump to search

Burp Intruder

Qu'est-ce que Burp Intruder?

Burp Intruder est un outil permettant d'automatiser des attaques sur des applications Web. Quelques cas d'utilisation :

  • Enumération d'identifiants
  • Fuzzing (brute-force sur des formulaires d'authentification)
  • Injection SQL
  • Cross Site Scripting
  • Dépassement de tampon (buffer overflow)
  • Prédiction de token de session
  • Vol de session (session hijacking)
  • Attaques sur les accès concurrents
  • Déni de serive (DoS)
  • etc.

Onglets

target

Cet onglet permet de spécifier une cible :

  • host : adresse IP ou nom d'hôte
  • port : port cible
  • use SSL : utilisation du protocole SSL (fixe la valeur du port à 443 par défaut)

positions

Template

S'il est possible de paramétrer manuellement la fonction "intruder", il est beaucoup plus simple de sélectionner l'option "send to intruder" à partir du menu contextuel sur l'écran Target > Site map.

Les captures qui suivent présentent le code et le résultat d'une application de test PHP qui permet de tester la fonctionnalité d'importation automatique :

Le résultat capturé dans BurpSuite :

Comme on peut le constater, les onglets "target" et "positions" sont remplis automatiquement. Les variables sur lesquelles "intruder" va intervenir apparaissent entre des marqueurs de position (§) en gras et en rouge dans l'onglet "positions". Il est possible de modifier le template une fois importé. Les boutons présents autour du template sont expliqués ci-dessous :

  • add § : insère un caractère § à l'endroit du curseur
  • clear § : supprime tous les caractères § du template
  • auto § : détection automatique des variables du template
  • refresh : recalcule les couleurs du template
  • clear : supprime l'intégralité du template
Attack type

Une fois le template rempli, il est nécessaire de préciser le type d'attaque parmi le choix suivant :

Type attaque Description Nombre de combinaisons Cas d'utilisation
sniper Utilise une liste unique de payloads; les paramètres sont testés un à un avec chacune des valeurs de payload (nb de champs encadrés par des marqueurs de position) x (nb de payloads de la liste des payloads) permet de tester la vulnérabilité de champs de formulaire à des attaques (par exemple XSS)
battering ram : Utilise une liste unique de payloads; insère le même contenu (payload) dans chaque champ entouré des marqueurs de position Utilisé dans des attaques nécessitant la même valeur à plusieurs endroits de la requête HTTP (par exemple un nom d'utilisateur apparaissant dans l'en-tête Cookie et dans le corps du message) nb de payloads contenus dans la liste des payloads
pitchfork : Utilise autant de liste de payloads que de paramètres (dans la limite de 8); Les listes de payloads sont déchargées dans les paramètres jusqu'au dernier payload de la liste des payloads la plus courte. Utilisé dans des attaques nécessitant des paramètres liés au sein de la requête HTTP (par exemple un nom d'utilisateur dans un champ et son numéro identifiant dans un autre champ) nb de payloads contenus dans la plus petite liste des payloads
cluster bomb : Utilise autant de liste de payloads que de paramètres (dans la limite de 8); toutes les combinaisons sont testées, à la manière de molettes de cadenas à code. Par exemple, sur 2 deux listes de payloads, le premier payload de la première liste est testé avec chacune des valeurs de payloads de la deuxième liste. Le deuxième payload de la première liste est ensuite testé avec chaque valeur de payload de la deuxième liste, et ainsi de suite. Utilisé dans des attaques de brute-force (par exemple, une combinaison de noms d'utilisateurs et de mots de passe) (nb de payloads contenus dans la première liste) x (nb de payloads contenus dans la deuxième liste) x ...

payloads

payload sets

Cet onglet permet de préciser les payloads de l'attaque, c'est à dire la liste des valeurs à tester. Des pré-configuration sont disponibles dans la liste déroulante :

preset list

Permet de contruire une liste de valeurs libres. Les boutons sur la droite permettent d'ajouter des éléments (add), de charger la liste à partir d'un fichier (load), de coller une valeur (paste), de supprimer un valeur (delete) ou de supprimer toutes les valeurs de la liste (clear).

runtime file
Permet de charger un fichier externe (select file)
custom iterator
Permet de construire des "masques". Par exemple, si un identifiant est constitué d'une lettre, d'un point et de 4 chiffres, nous aurons le masque suivant §p1§§p2§§p3§§p4§ paramétré comme suit :
character substitution

Cette option permet de tester différentes variantes de mots en fonction de caractères de substitution. Par exemple, si nous avons

a > 4
z > 2
e > 3
r
t > 7
y

alors les combinaisons possibles pour azerty seront :

azerty
4zerty
42erty
423rty
423r7y
...
case substitution

Cette option permet, à partir d'un liste, d'effectuer des substitutions sur la casse (minuscules et majuscules). Par exemple, pour la chaîne "jimCarreY" :

Substitution Résultat
no change jimCarreY (aucun changement)
to lower case jimcarrey (toutes les lettres en minuscules)
to upper case JIMCARREY (toutes les lettres en majuscules)
to Propername Jimcarrey (la première lettre en majuscules, toutes les suivantes en minuscules)
to ProperName JimCarreY (la première lettre en majuscules, toutes les suivantes inchangées)
recursive grep
INCOMPLETE SECTION OR ARTICLE
This section/article is being written and is therefore not complete.
Thank you for your comprehension.
illegal unicode

L'attaque consiste en l'utilisation d'un caractère joker pour le remplacer itérativement par une liste de caractères unicode illégaux. Ce type d'attaque peut être utilisé afin de forcer de masques de validation basé sur le "pattern-matching" (par exemple la fonction PHP preg_match).

Les options sont les suivantes :

Option Description
max overlong UTF-8 length

Par défaut, les caractères unicodes sont encodés sur un byte, mais il est possible de les encoder sur plusieurs bytes (overlong encoding). Ce champ permet de spécifier la longueur à utiliser (jusqu'à 6 bytes). En fonction de cette valeur, certaines options ne sont pas disponibles (voir description par option).

max encodings Fixe un plafond sur le nombre d'encodages illégaux générés, ce qui peut être utile dans le cas par exemple où "max permutations" est coché.
illegal UTF-8 variants

Cette option n'est disponible que pour des valeurs de "max overlong UTF-8 length" > 1 byte. La Cette option permet de malformer les bytes suivant le premier. La forme normale des bytes suivants le premier est du type 10XXXXXX. Dans la mesure où le premier byte contient des informations sur le nombre de bytes suivants, les deux premiers bits des bytes suivants le premier peuvent être ignorés par les routines de décodage. Cela permet d'ajouter les variantes suivantes : 00XXXXXX, 01XXXXXX et 11XXXXXX.

max permutations (1ère ligne)

Cette option n'est disponible que si :

  • le champ "max overlong UTF-8 length" > 2 bytes
  • l'option "illegal UTF-8 variants" est cochée

Lorsque cette option n'est pas activée, les bytes d'extension sont générés chacun avec une variante (voir option "illegal UTF-8 variants"). Lorsque l'option est activée, toutes les combinaisons sont testées. Ceci peut être utile pour forcer des contrôles avancés de pattern-matching.

add % prefix Permet l'insertion du caractère % devant chaque groupe de 2 caractères hexadécimaux
illegal hex Permet l'encodage hexédécimal (A à F pour remplacer les nombres 10 à 15) des payloads générés
max permutations (2ème ligne) Cette option est disponible si "max overlong ITF-8 length" est supérieur à 1 byte et que l'option "illegal hex" est cochée. Lorsque cette option n'est pas activée, les bytes sont générés chacun avec un code hexadécimal illégal (voir option "illegal hex"). Lorsque l'option est activée, toutes les combinaisons sont testées. Ceci peut être utile pour forcer des contrôles avancés de pattern-matching.
lower case hex Force l'utilisation de minuscules dans l'écriture des caractères hexadécimaux.

character blocks

Cette attaque permet la génération de suite d'un même caractère.

  • base string : caractère de base, à dupliquer
  • min length : taille minimale de la chaîne
  • max length : taille maximale de la chaîne
  • step : pas (incrément) de taille de chaîne entre deux itérations
numbers

Range :

  • from : définit la borne inférieure de l'intervalle
  • to : définit la borne supérieure de l'intervalle
  • step : Uniquement disponible pour le mode "sequential". Définit le pas (incrément) entre deux générations.
  • how many : Uniquement disponible pour le mode "random". Définit le nombre d'éléments à générer

format :

  • min integer digits : Permet de définir le nombre de caractères minimaux que doit contenir la partie entière. Complète éventuellement par des "0". Par exemple "1" sera transformé en "01" avec une valeur de "2" dans ce champ.
  • max integer digits : Permet de définir le nombre de caractères maximaux que doit contenir la partie entière. Tronque le nombre généré le cas échéant. Par exemple, "1234" sera transformé en "12" avec une valeur de "2" dans ce champ.
  • min fraction digits : Uniquement disponible pour le mode "decimal". Définit le nombre de caractères minimaux que doit contenir la partie décimale. Complète éventuellement par des "0". Par exemple, "12,3" sera transformé en "12.30" pour une valeur de "2" dans ce champ.
  • max fraction digits : Uniquement disponible pour le mode "decimal". Tronque la partie décimale le cas échéant. Par exemple, "12,345" sera transformé en "12,34" pour une valeur de "2" dans ce champ.

modes :

  • sequential vs random : le mode sequential permet une génération continue entre les deux bornes (champs "from" et "to") de l'intervalle alors que le mode random permet une génération de nombres aléatoires, compris entre les deux bornes de l'intervalle.
  • decimal vs hex  : le mode decimal permet une génération de nombres décimaux alors que le mode hex généères des nombres au format hexadécimal.
dates

Ce type de payload permet de générer automatiquement des dates comme payload. Les champs sont détaillés ci-dessous :

  • from : date de début
  • to : date de fin
  • step : pas (incrément) entre deux dates générées
  • format : format pré-défini ou personnalisé. Pour ce dernier, la syntaxe permet de construire n'importe quel format de date avec :
Caractère Description Exemple
E Nom abrégé (3 caractères) du jour de la semaine Mon, Tue, ..., Sun
EEEE Nom complet du jour de la semaine Monday, Tuesday, ..., Sunday
d Numéro du jour dans le mois 1, 2, ..., 31
dd Numéro du jour (sur 2 caractères) dans le mois 01, 02, ..., 31
M Numéro du mois dans l'année 1, 2, ..., 12
MM Numéro du mois (sur 2 caractères) dans l'année 01, 02, ..., 12
 MMM Nom abrégé (3 caractères) du mois Jan, Feb, ..., Dec
MMMM Nom complet du mois January, February, ..., December
yy Année (sur 2 caractères) 08, 09, 10, ...
yyyy Année (sur 4 caractères) 2008, 2009, 2010
brute forcer
Cette attaque permet de tester toutes les combinaisons possibles, à partir d'un jeu de caractères, dans une taille définie entre une borne inférieure et une borne supérieure.
null payloads
Cette attaque permet d'envoyer une chaîne vide (NULL) à l'emplacement du marqueur de position. Si d'autres paramètres sont précisés dans la requête sans marqueur de position, cela permet d'exécuter la requête sans modification un nombre de fois limité (generate) ou illimité (continue indefinitely). Cette attaque peut être utilisée pour tester une application face à un déni de service (DoS pour Denial of Service en anglais).
Traitements sur les payloads

Les options qui suivent (case, match/replace et encode) s'appliquent au titre de traitements additionnels sur les payloads.

case
  • do not modify : N'effectue aucune modification concernant la casse (majuscules/minuscules).
  • to lower case : transpose tous les payloads en minusules
  • to upper case : transpose tous les payloads en majuscules
  • to Propername : transpose tous les payloads avec la première lettre en majuscule et toutes les suivantes en minuscules
  • to ProperName : transpose tous les payloads avec la première lettre en majuscule (les lettres suivantes restant inchangées).
match/replace
  • match regex : permet de spécifier un masque d'expression régulière pour modification de tout payload correspondant au masque.
  • replace with : permet de spécifier le remplacement à opérer sur le payload.
  • replace all : Si cette option n'est pas cochée, seule la première occurence est remplacée. Dans le cas contraire, toutes les occurences sont impactées par le remplacement.
encode
  • do not encode : Pas de traitement des payloads concernant l'encodage.
  • URL-encode these characters : Permet d'encoder une liste de caractères dans la norme URL-encode.
  • base-64 encode : Permet d'encoder les payloads dans la norme base-64.
  • hash : Permet de d'encoder chaque payload dans l'une des normes suivantes : SHA-256, SHA-512, SHA, SHA-384, MD5, MD2
  • add prefix : Ce champ n'est disponible que pour les options "base-64 encode" et "hash". Il permet d'ajouter un préfixe qui ne sera pas encodé. Ceci peut être utilisé par exemple pour des opérations de brute-force à partir d'un identifiant connu, et sur lequel on recherche le mot de passe.
  • add suffix : Ce champ n'est disponible que pour les options "base-64 encode" et "hash". Il permet d'ajouter un suffixe qui ne sera pas encodé.

Menu

Une fois le paramétrage de l'attaque effectué, c'est à partir de l'option "Start" du menu que l'attaque est lancée.

Fenêtre d'attaque

La fenêtre d'attaque a la forme suivante (voir capture ci-contre). Il est possible de double-cliquer sur les entrées pour afficher le détail de la requête, mais également d'envoyer chacune des requêtes vers le "repeater" ou le "comparer" en cliquant avec le bouton droit de la souris sur les entrées.