Il est toujours avisé, pour un attaquant, de déterminer la présence d’un WAF sur un réseau avant de débuter toute tentative d’identification.
Les experts en tests d’intrusion doivent tenir compte de l’existence d’un WAF avant de s’engager dans l’évaluation d’une application web, car cela peut influencer le résultat de leurs attaques.
Mais avant d’aller plus loin…
Qu’est-ce qu’un WAF exactement ?
Un pare-feu d’application web (WAF) est un élément clé dans la protection d’un site web. Il agit en filtrant et surveillant le trafic. Ces pare-feux offrent une barrière contre les vulnérabilités critiques. De nombreuses entreprises modernisent leurs infrastructures en y intégrant des WAF. Cependant, les spécialistes en cybersécurité rappellent que les WAF ne sont pas une solution miracle : une configuration adéquate est nécessaire pour identifier et bloquer efficacement les menaces externes.
Un WAF se distingue d’un pare-feu classique par sa capacité à filtrer le contenu spécifique des applications web, tandis que les pare-feux traditionnels se contentent de sécuriser les échanges entre les serveurs.
Les communications HTTP sont régies par un ensemble de règles qui visent à contrer les vulnérabilités courantes, telles que les attaques de type cross-site scripting (XSS) et les injections SQL.
De nombreux outils, gratuits et open source, sont disponibles en ligne pour identifier les pare-feux qui protègent les applications web.
Dans cet article, nous allons explorer différentes méthodes et outils pour détecter la présence d’un WAF.
Note importante : cet article est basé sur des tests réalisés sur mon propre site web à des fins de démonstration. N’effectuez jamais d’analyse ou de tentative d’intrusion sur un site sans l’autorisation préalable de son propriétaire.
Détection Manuelle
Détection par TELNET
Telnet est un outil principalement utilisé par les administrateurs réseau et les testeurs d’intrusion. Il permet de se connecter à des hôtes distants sur n’importe quel port.
- Les informations HTTP sont souvent incluses dans les en-têtes de réponse par les pare-feux d’applications web.
- Telnet peut être employé pour collecter des informations de base, comme le serveur et les cookies utilisés lors du processus d’identification.
- Saisissez la commande : Telnet nomdusite.com 80
utilisateur@machine: # telnet nomdusite.com 80 Tentative de connexion à l'adresse IP... Connecté à nomdusite.com. Caractère d'échappement : '^]'.
Une fois la commande exécutée, entrez `HEAD / HTTP / 1.1` et validez avec la touche Entrée.
utilisateur@machine: # telnet 192.168.1.100 80 Tentative de connexion à 192.168.1.100... Connecté à 192.168.1.100. Caractère d'échappement : '^]'. HEAD / HTTP/1.1 Host: 192.168.1.100 HTTP/1.1 200 OK Date: Ven, 25 Oct 2024 10:00:00 GMT Server: Nginx Content-Type: text/html; charset=UTF-8 Connection: close Set-Cookie: PHPSESSID=abcdefghijklmnopqrstuvwxyz; path=/; HttpOnly X-Cache: MISS from proxy Via: 1.1 proxy.example.com X-Powered-By: PHP/8.0 Age: 5 Connexion fermée par l'hôte distant.
Cette commande permet de déterminer le serveur sur lequel le site est hébergé, ainsi que le langage principal utilisé pour sa création. Cela révèle des informations après l’utilisation de telnet sur le port 80.
Certains WAF peuvent altérer l’en-tête, ce qui peut entraîner des réponses HTTP différentes des réponses standards.
Comme indiqué dans l’exemple ci-dessus, le serveur a répondu à notre demande, révélant que le pare-feu/passerelle périphérique est un serveur Nginx.
Détection Automatisée
#1. Détection avec NMAP
Nmap est un outil qui possède un script permettant d’identifier un pare-feu d’application web.
- Nmap est un outil d’évaluation de sécurité couramment utilisé par les testeurs d’intrusion et les administrateurs réseau.
- Nmap est utilisé pour recueillir des informations sur une cible.
- Le script a été testé sur le même site web qu’auparavant.
- Saisissez la commande : nmap –script=http-waf-fingerprint nomdusite.com
utilisateur@machine:# nmap --script=http-waf-fingerprint nomdusite.com Démarrage de Nmap 7.90 ( https://nmap.org ) le 2024-10-25 12:00 CEST Rapport d'analyse Nmap pour nomdusite.com (192.168.1.100) L'hôte est actif (latence de 0.12s). Ports filtrés non affichés : 982 PORT STATE SERVICE 22/tcp open ssh 80/tcp open http | http-waf-fingerprint: | WAF détecté : | ModSecurity 443/tcp open https 3306/tcp closed mysql Nmap fait : 1 adresse IP (1 hôte actif) analysée en 15.46 secondes
Après l’exécution de la commande Nmap ci-dessus, le pare-feu ModSecurity a été détecté.
#2. Détection avec WhatWaf
WhatWaf est un outil de sécurité dédié à l’identification des applications web et à la détection de la présence d’un WAF. Il est très utile lors d’évaluations de sécurité pour déterminer si une application web est protégée par un WAF.
Le cas échéant, des techniques de contournement et d’évitement peuvent être utilisées pour tester ou exploiter l’application.
WhatWaf est régulièrement employé pour le contournement de pare-feux, la détection d’applications, l’identification d’applications et la reconnaissance de logiciels. Cet outil cible les testeurs d’intrusion et les professionnels de la sécurité.
Comment installer WhatWaf ?
Installation sur Kali-Linux :
sudo apt install python3-pip git clone https://github.com/ekultek/whatwaf cd whatwaf sudo pip3 install -r requirements.txt
Au démarrage, sans version Python spécifique, il est possible de cibler un fichier exécutable :
./whatwaf --help
Cependant, comme les dépendances Python 2 ne sont pas installées, il est recommandé de préciser la version de Python :
python3 ./whatwaf --help
Utilisation de l’outil
L’outil de détection de pare-feu WhatWaf est simple à utiliser : exécutez simplement la commande suivante :
./whatwaf -u https://www.nomdusite.com
Comme illustré ci-dessous, l’outil a détecté le pare-feu pour l’URL du site web fourni.
Important : cet exemple a été réalisé sur mon propre site à des fins de test.
utilisateur@machine:~/WhatWaf # ./whatwaf -u https://www.monsite.com ,------. ' .--. ' ,--. .--. ,--. .--.| | | | | | | | | | | |'--' | | | | | | | | | | __. | | |.'.| | | |.'.| | | .' | | | | |___| | ,'. |hat| ,'. |af .---. '--' '--' '--' '--' '---' />