Introduction
Dans le cadre des tests d'intrusion et de l'analyse d'applications web, des outils tels que Burp Suite Intruder sont souvent utilisés pour envoyer un grand nombre de requêtes à une cible. Une fonctionnalité clé dans ce processus est le "Grep - Match", qui permet de marquer automatiquement les réponses contenant des mots-clés spécifiques (par exemple, "Welcome", "Login successful", "admin_access_granted"). Cela vous aide à parcourir rapidement des milliers de réponses pour trouver celles qui sont intéressantes.
Dans ce laboratoire, vous apprendrez à reproduire cette puissante fonctionnalité "Grep - Match" en utilisant des outils standard de la ligne de commande Linux. Vous utiliserez curl pour effectuer des requêtes HTTP, une boucle shell pour automatiser le processus pour une liste de payloads, et grep pour rechercher un mot-clé de succès dans les réponses. C'est une compétence fondamentale pour toute personne intéressée par l'automatisation de la sécurité et le scripting.
Dans Intruder > Options, faites défiler jusqu'à la section 'Grep - Match'
Dans un outil GUI comme Burp Suite, c'est l'étape où vous naviguerez vers le panneau des options pour configurer vos règles de correspondance. Dans notre environnement en ligne de commande, l'action équivalente consiste à préparer nos composants nécessaires : la liste des payloads et l'URL cible.
Le processus de configuration a déjà créé un fichier nommé payloads.txt dans votre répertoire ~/project. Ce fichier contient une liste de valeurs potentielles que nous voulons tester contre l'application web, servant le même objectif qu'une liste de payloads Intruder.
Visualisons le contenu de ce fichier.
cat ~/project/payloads.txt
Vous devriez voir la sortie suivante :
orange
banana
apple
grape
mango
Notre application cible est un serveur web simple fonctionnant sur http://localhost:8000. Nous testerons chaque payload contre cette cible.
Effacer les règles par défaut
Dans Burp Suite, vous effaceriez généralement les règles préexistantes ou par défaut pour vous assurer que vous ne faites correspondre que ce que vous définissez explicitement. Pour notre simulation, cela signifie établir une base en effectuant une seule requête avec un payload "échoué" connu. Cela nous aide à comprendre à quoi ressemble une réponse normale et infructueuse.
Utilisons curl pour envoyer une requête au serveur avec le payload orange, que nous savons ne pas être le bon.
curl "http://localhost:8000/?item=orange"
La commande récupérera la page web et imprimera sa source HTML dans le terminal. La sortie devrait ressembler à ceci :
<!DOCTYPE html>
<html>
<head>
<title>Test Page</title>
</head>
<body>
<script>
const params = new URLSearchParams(window.location.search);
if (params.get("item") === "apple") {
document.body.innerHTML = "<h1>Welcome to the secret page!</h1>";
} else {
document.body.innerHTML = "<h1>Item not found.</h1>";
}
</script>
</body>
</html>
Remarquez la logique JavaScript et le texte résultant "Item not found". C'est notre réponse de "défaillance" de base.
Ajouter une nouvelle règle pour faire correspondre un mot-clé de succès (par exemple, 'Welcome', 'Logged in')
C'est le cœur de la technique "Grep - Match". Nous devons définir une chaîne ou un modèle unique qui n'apparaîtra que dans une réponse "réussie". En regardant le HTML de l'étape précédente, nous pouvons voir qu'une requête réussie (où item=apple) entraînera le texte "Welcome to the secret page!". Le mot-clé "Welcome" est un candidat parfait pour notre règle.
Nous pouvons utiliser la commande grep pour filtrer la sortie de curl et vérifier l'existence de notre mot-clé. Le drapeau -s pour curl est utilisé pour l'exécuter en mode silencieux, ce qui masque le compteur de progression.
Tout d'abord, testons cette règle avec un payload échoué. Cette commande ne devrait produire aucune sortie, car le mot "Welcome" n'est pas dans la réponse.
curl -s "http://localhost:8000/?item=orange" | grep "Welcome"
Maintenant, testons-la avec le payload connu comme étant réussi, apple.
curl -s "http://localhost:8000/?item=apple" | grep "Welcome"
Cette fois, grep trouve une correspondance et imprime la ligne contenant le mot-clé :
document.body.innerHTML = '<h1>Welcome to the secret page!</h1>';
Le pipe (|) et la commande grep "Welcome" forment ensemble notre règle "Grep - Match". Nous avons réussi à créer un moyen de distinguer une réponse réussie d'une réponse échouée.
Lancer une attaque Intruder
Une "attaque Intruder" est simplement le processus d'automatisation de notre requête pour chaque payload de notre liste. Nous pouvons y parvenir avec une simple boucle shell. La boucle lira chaque ligne de payloads.txt, exécutera notre commande curl | grep pour celle-ci, et nous montrera les résultats.
Pour rendre la sortie plus propre et plus ressemblante à un tableau de résultats, nous allons créer un petit script shell. Utilisez l'éditeur nano pour créer un nouveau fichier nommé attack.sh.
nano attack.sh
Maintenant, copiez et collez le script suivant dans l'éditeur nano :
#!/bin/bash
echo "Payload,Found"
for payload in $(cat ~/project/payloads.txt); do
response=$(curl -s "http://localhost:8000/?item=$payload")
if echo "$response" | grep -q "Welcome"; then
echo "$payload,True"
else
echo "$payload,False"
fi
done
Ce script imprime d'abord un en-tête (Payload,Found). Ensuite, il parcourt chaque payload. Dans la boucle, il utilise grep -q (mode silencieux) pour vérifier la présence du mot-clé "Welcome". S'il est trouvé, il imprime le payload suivi de True ; sinon, il imprime False.
Appuyez sur Ctrl+X, puis Y, et Entrée pour enregistrer le fichier et quitter nano.
Ensuite, rendez le script exécutable :
chmod +x attack.sh
Enfin, lancez l'attaque :
./attack.sh
Observer la nouvelle colonne dans le tableau des résultats pour votre correspondance
Après avoir exécuté le script de l'étape précédente, vous verrez une sortie propre, semblable à un tableau, dans votre terminal.
Payload,Found
orange,False
banana,False
apple,True
grape,False
mango,False
Cette sortie est l'équivalent en ligne de commande du tableau de résultats dans Burp Suite Intruder. La première colonne liste le payload qui a été testé, et la seconde colonne, que nous avons nommée "Found", agit comme notre indicateur "Grep - Match".
En scannant simplement cette seconde colonne pour la valeur True, vous pouvez immédiatement identifier le payload réussi. Comme vous pouvez le voir, la ligne apple,True ressort clairement, nous indiquant que le payload apple a entraîné une réponse contenant notre mot-clé cible. Cela démontre l'efficacité de la technique pour trouver une aiguille dans une botte de foin de réponses HTTP.
Résumé
Dans ce laboratoire, vous avez simulé avec succès la fonctionnalité "Grep - Match", une pierre angulaire de nombreux outils automatisés de sécurité web. Vous avez appris à combiner plusieurs outils fondamentaux de la ligne de commande Linux pour obtenir un résultat puissant.
Vous avez pratiqué :
- L'utilisation de
curlpour effectuer des requêtes web depuis le terminal. - L'utilisation de
greppour rechercher des mots-clés spécifiques dans les données de réponse. - L'écriture d'une boucle
forshell pour automatiser une tâche pour une liste d'entrées. - La combinaison de ces outils en un seul script pour tester systématiquement des payloads et identifier les tentatives réussies.
Cette approche en ligne de commande n'est pas seulement un excellent moyen de comprendre le fonctionnement interne des outils sophistiqués, mais constitue également une compétence extrêmement flexible et puissante pour vos propres tâches d'automatisation personnalisées et de scripting de sécurité.
