
Un fuzzer en ligne de commande pour le protocole Apache JServ (ajp13)
AJPFuzzer est un fuzzer rudimentaire pour le protocole Apache JServ (ajp13).
Construit sur libajp13, l'outil vous permet de créer et d'envoyer des messages AJP via une interface en ligne de commande facile à utiliser. AJPFuzzer peut générer des messages AJP13 correctement formatés (tous les types de messages) ainsi que des mutations (par exemple, inversion de bits, messages avec incompatibilité de type, etc.), ce qui facilite les efforts de test de sécurité ciblant les services basés sur AJP comme les modules AJP des serveurs web, les conteneurs J2EE, et bien d'autres.
Téléchargez le dernier jar d'AJPFuzzer depuis la page des versions
Exécutez le jar téléchargé avec :
$ java -jar ajpfuzzer_v0.7.jar
L'outil affichera un shell. En tapant ?list, il est possible de lister toutes les commandes disponibles. Ensuite, vous pouvez vous connecter à la cible en utilisant :
AJPFuzzer> connect 127.0.0.1 8009
Ensuite, vous pouvez envoyer un message CPing (type 10) en tapant simplement '10' (aucun argument n'est nécessaire pour ce message)
AJPFuzzer/127.0.0.1:8009> 10
La capture d'écran suivante illustre l'exécution complète :
Évidemment, il est possible d'envoyer des messages plus complexes en spécifiant le cas de test et les arguments appropriés. Veuillez vous référer à ?list pour tous les détails sur une commande spécifique.
Par exemple, nous pouvons envoyer un message de type ForwardRequest entièrement personnalisé en utilisant :
> forwardrequest 2 "HTTP/1.1" "/api/" 127.0.0.1 localhost porto 8009 false "Cookie:AAAA=BBBB" ""
Il est également possible d'envoyer un message ForwardRequest en fuzzant des éléments arbitraires :
> genericfuzz 2 "HTTP/1.1" "/test.html" "127.0.0.1" "127.0.0.1" "server.name.test" 8009 false "Cookie:AAAA=BBBB" "secret:FUZZ" /tmp/list.txt
À ce jour, AJPFuzzer fournit les cas de test suivants :
| Id | Name | Description |
|---|---|---|
| 1 | body | Envoyer un message de corps du serveur web au conteneur J2EE |
| 2 | forwardrequest | Commencer le cycle de traitement de la requête du serveur web au conteneur J2EE |
| 3 | sendbodychunk | Envoyer un morceau du corps du conteneur J2EE au serveur web |
| 4 | sendheaders | Envoyer les en-têtes de réponse du conteneur J2EE au serveur web |
| 5 | endresponse | Marquer la fin de la réponse, du conteneur J2EE au serveur web |
| 6 | getbodychunk | Obtenir d'autres données du demandeur. Message du conteneur J2EE au serveur web |
| 7 | shutdown | Envoyer un paquet d'arrêt standard AJP13 |
| 8 | ping | Envoyer un paquet ping (ping != CPing) AJP13 |
| 9 | cpong | Envoyer un paquet CPong AJP13 |
| 10 | cping | Envoyer un paquet CPing AJP13 |
| 11 | forwardreqalltypes | Envoyer un paquet ForwardRequest AJP13, avec tous les types de paquets possibles |
| 12 | verbtampering | Envoyer plusieurs requêtes via AJP13 et faire du HTTP Verb Tampering, pour détecter d'éventuelles failles de contournement d'authentification |
| 13 | jettyleak | Envoyer un paquet AJP13 de style JettyLeak |
| 14 | hugelengthsmallbody | Envoyer des messages ForwardRequest+Body, avec un grand Content-Length et un petit Body |
| 15 | hugeheader | Envoyer deux paquets ForwardRequest AJP13 avec une longueur d'en-tête supérieure à 0x9999 (par exemple A010) |
| 16 | fuzzbit | Créer un ForwardRequest AJP13 complexe et commencer l'inversion de bits |
| 17 | fuzzslice | Créer un ForwardRequest AJP13, SendHeaders, ShutDown, 0xFF, 0x00. Découper et envoyer. |
| 18 | servletpath | Créer un ForwardRequest AJP13 avec un attribut 'servlet_path' arbitraire |
| 19 | bypassauthnull | Créer deux ForwardRequest AJP13 avec auth_type défini sur 'null' |
| 20 | envars | Créer un ForwardRequest AJP13 avec req_attribute_code (10) afin de définir des variables d'environnement arbitraires |
De nouveaux cas de test peuvent être ajoutés en étendant la classe AJPTestCases.java. En utilisant l'annotation @Command, l'outil reconnaîtra la commande supplémentaire et la rendra disponible depuis la CLI.
| 21 | hugepacketsize | Créer deux requêtes AJP13 avec une taille > 8192 octets |
| 22 | genericfuzz | Créer un ForwardRequest AJP13 (GET) qui permet de fuzzer des éléments de message arbitraires en utilisant le mot-clé FUZZ |