From Aldeid
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é.
|
|
| 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.
|
|