Avant toute attaque, il y a une question simple : « qu'est-ce
qui tourne là-dedans ? » WhatWeb y répond en une requête. C'est précisément pour
cela qu'il faut savoir ce qu'il trouve sur votre propre site.
WhatWeb est un outil d'identification de technologies web, écrit en Ruby par
Andrew Horton et Brendan Coles. Il est libre, livré d'office avec Kali Linux, et
compte aujourd'hui plus de 1 800 greffons de reconnaissance.
Son principe tient en une phrase : il demande une page, lit ce que la réponse
contient, et compare ces indices à sa base de signatures.
Ce que fait WhatWeb, concrètement
Un serveur web est bavard. Sans que personne ne l'ait voulu, une réponse HTTP
ordinaire annonce souvent le logiciel qui la produit, sa version, le langage de
l'application, le gestionnaire de contenu, parfois jusqu'au nom du thème installé.
WhatWeb ne force aucune porte : il lit ce que le site publie de lui-même.
Les indices viennent de partout : l'en-tête Server, l'en-tête
X-Powered-By, le nom des cookies, la balise
<meta name="generator">, les chemins de fichiers
(/wp-content/ trahit WordPress), le nom des bibliothèques JavaScript,
jusqu'à la mise en forme des messages d'erreur.
Pourquoi cela vous concerne, même sans être pentester
Mettons les choses dans l'ordre. Connaître la version exacte d'un logiciel ne
donne aucun accès. Mais cela transforme une recherche vague en recherche précise :
« WordPress 6.2.1 » saisi dans une base de vulnérabilités publique renvoie en
quelques secondes la liste des failles connues de cette version-là.
Un administrateur a donc deux raisons d'utiliser WhatWeb :
- Inventaire. Savoir ce qui tourne réellement sur ses propres
machines, et constater les versions oubliées.
- Mesure d'exposition. Voir son site comme le voit un inconnu,
et décider ce qu'on accepte de laisser visible.
Installer WhatWeb
Sous Kali Linux, l'outil est déjà présent. Ailleurs, sur Debian ou Ubuntu :
sudo apt update
sudo apt install whatweb
whatweb --version
Pour disposer d'une version plus récente que celle des dépôts, on passe par le
dépôt officiel :
git clone https://github.com/urbanadventurer/WhatWeb.git
cd WhatWeb
sudo gem install bundler
bundle install
./whatweb --version
Le premier scan, et comment le lire
La forme la plus simple tient en deux mots :
whatweb example.com
La réponse tient sur une ligne, dense :
http://example.com [200 OK] Apache[2.4.41], Country[CAMEROON][CM],
HTTPServer[Ubuntu Linux][Apache/2.4.41 (Ubuntu)], IP[102.x.x.x],
PHP[7.4.3], Title[Mon site], WordPress[6.2.1], JQuery[3.7.1]
Chaque élément se lit ainsi :
| Élément | Ce qu'il dit |
[200 OK] | Le code de réponse HTTP. Un 301 signalerait une redirection. |
HTTPServer[…] | Le serveur web et, ici, le système qui l'héberge. |
PHP[7.4.3] | Le langage et sa version : lue dans X-Powered-By. |
WordPress[6.2.1] | Le gestionnaire de contenu et sa version. |
Country[…], IP[…] | Localisation de l'hébergeur, déduite de l'adresse. |
Pour que WhatWeb explique chacune de ses trouvailles plutôt que de les aligner,
on ajoute -v :
whatweb -v example.com
Les niveaux d'agressivité
C'est le réglage le plus important, et le plus mal compris. Il décide du nombre
de requêtes envoyées, donc de la précision du résultat, et de la trace laissée
dans les journaux du serveur.
whatweb -a 1 example.com # discret, une requête : le défaut
whatweb -a 3 example.com # affine les versions déjà repérées
whatweb -a 4 example.com # tous les greffons, URL devinées
Le niveau 1 ne fait rien de plus qu'un navigateur ordinaire : une requête, une
page publique. Le niveau 4 devine des adresses et interroge tous les greffons ;
il se voit immédiatement dans les journaux, et doit être réservé aux cibles pour
lesquelles vous disposez d'un accord écrit.
Les options qui servent vraiment
| Option | Effet |
-v | Détaille chaque greffon reconnu. -vv sert au débogage. |
-a NIVEAU | Agressivité, de 1 à 4. |
-i FICHIER | Lit la liste des cibles dans un fichier. |
-t N | Nombre de fils d'exécution. 25 par défaut. |
-U AGENT | Change l'en-tête User-Agent, celui par défaut étant reconnu par certaines sondes de détection. |
--proxy HÔTE:PORT | Passe par un mandataire, avec --proxy-user si besoin. |
-p LISTE | Restreint ou étend les greffons employés. |
--no-errors | Tait les erreurs : indispensable sur une plage d'adresses. |
Plusieurs cibles à la fois
WhatWeb accepte une plage d'adresses ou un fichier. Sur un parc, c'est la forme
utile :
# toutes les machines d'un réseau local
whatweb --no-errors 192.168.1.0/24
# une liste de domaines, un par ligne
whatweb -i mes-domaines.txt --no-errors
Garder une trace exploitable
Une sortie dans le terminal se perd. Pour un inventaire que l'on compare d'un
mois sur l'autre, on enregistre :
whatweb -i mes-domaines.txt --log-json=inventaire.json
whatweb -i mes-domaines.txt --log-xml=inventaire.xml
whatweb -i mes-domaines.txt --log-brief=resume.txt
Le format JSON se prête bien au traitement. Pour extraire les serveurs repérés,
par exemple :
jq -r '.[] | .target + " -> " +
(.plugins.HTTPServer.string // ["inconnu"] | join(","))' inventaire.json
Le revers : réduire ce que votre site laisse voir
Une fois le scan passé sur vos propres domaines, vient la partie utile. Voici
la même réponse HTTP avant et après nettoyage :
Sous Apache, dans la configuration principale :
ServerTokens Prod
ServerSignature Off
Header unset X-Powered-By
Sous nginx :
server_tokens off;
proxy_hide_header X-Powered-By;
Sous PHP, dans php.ini :
expose_php = Off
Et sous WordPress, la balise generator se retire depuis le fichier
functions.php du thème :
remove_action('wp_head', 'wp_generator');
Une mise en garde, parce qu'elle compte plus que tout ce qui précède :
masquer une version ne corrige aucune faille. Cela retire un panneau
indicateur, rien de plus. Un attaquant un peu patient retrouve la version par
d'autres moyens : le comportement des erreurs, l'empreinte des fichiers statiques,
la présence de chemins caractéristiques. La seule protection réelle reste la mise
à jour.
Ce que WhatWeb ne fait pas
Il ne cherche aucune vulnérabilité, n'exploite rien, ne teste aucun mot de passe.
Il identifie, et s'arrête là. Confondre une empreinte technologique avec un audit
de sécurité est l'erreur la plus courante des débutants : savoir qu'un site tourne
sous WordPress 6.2.1 ne dit pas s'il est vulnérable, seulement où regarder.
Le cadre légal : à lire avant de lancer la commande
Une nuance mérite d'être posée clairement. Au niveau 1, WhatWeb demande une page
publique : techniquement, il fait ce que fait n'importe quel navigateur. Au niveau 4,
il devine des adresses et sollicite des ressources que le site n'a pas publiées : l'intention change, et la qualification juridique peut suivre.
Au Cameroun, la loi n° 2010/012 du 21 décembre 2010 relative à la
cybersécurité et à la cybercriminalité réprime l'accès et le maintien frauduleux
dans un système d'information. En France, l'article 323-1 du Code pénal
punit l'accès ou le maintien frauduleux dans un système de traitement automatisé de
données de trois ans d'emprisonnement et 100 000 € d'amende, peines
portées à cinq ans et 150 000 € si des données sont modifiées ou le fonctionnement
altéré.
La règle pratique tient en une ligne : vos propres domaines, ou un accord
écrit du propriétaire. Un accord verbal ne vous protège pas. Les plateformes
de bug bounty et les laboratoires d'entraînement : TryHackMe, Hack The Box, ou une machine virtuelle
montée chez vous : offrent un terrain où s'exercer sans ambiguïté.
Pour aller plus loin
| Outil | Ce qu'il apporte en plus |
| Wappalyzer | La même idée, depuis le navigateur, en naviguant normalement. |
nmap -sV | Identifie les services sur tous les ports, pas seulement le web. |
| httpx | Très rapide sur de grandes listes de domaines. |
| Nuclei | Passe de l'identification à la recherche de failles connues. |
En résumé
WhatWeb répond à une question précise et s'y tient : qu'est-ce qui fait tourner
ce site ? Une commande, une requête, une ligne de réponse. Sa vraie valeur, pour
qui administre un site, n'est pas d'aller regarder chez les autres, c'est de
retourner l'outil vers soi, de constater ce que l'on annonce au monde entier sans
le savoir, et de décider ce que l'on garde.
Lancez-le sur votre propre domaine. Le résultat est souvent instructif.