Curl est un couteau suisse pour les requêtes web, vous permettant de discuter avec les serveurs web comme si vous étiez un navigateur, mais avec le contrôle en plus sur tout un ensemble de paramètres qui sont généralement dissimulés par les navigateurs.
Dans les exemples qui vont suivre, je vais utiliser le site https://example.com qui est disponible pour tout un tas d'opérations comme vous pourrez le voir en effectuant la commande
curl https://example.com
et également la machine virtuelle metasploitable 2 que vous pouvez (devez ?)
installer pour réaliser des pentests sans risque (pour les autres ^_^).
Curl est rapide, scriptable, disponible sur toutes les plateformes et permet d'exécuter des requêtes GET et POST, de composer des entêtes personnalisés, de vérifier les flux d'authentification, d'analyser les réponses des serveurs et bien d'autres encore.
Tout ce qui sera dit ici est à but éducatif seulement. Merci de ne pas utiliser ces techniques sur des systèmes dont vous ne seriez pas propriétaires ou pour lesquels vous n'auriez pas reçu d'autorisation.
Mettez en place un serveur de test ou utilisez des plateformes de hacking comme https://www.hackthebox.com/ ou https://tryhackme.com/ qui vous permettront de jouer à Rambo en toute sécurité.
Curl supporte un grand nombre de méthodes de connexion comme le support des
proxies, de l'authentification utilisateur, des connexions FTP, et bien d'autres.
De plus curl supporte un grand nombre de protocoles parmi lesquelles :
Et pour tout complément d'information, rien ne remplace le bon vieux
$ man curl
Un des éléments importants lorsque l'on parle de protocole est l'entête. Curl étant capable de récupérer un grand nombre de métriques relatives aux différents protocoles, une de ces métriques intéressantes est l'entête HTTP.
$ curl -I https://example.com
HTTP/2 200
content-type: text/html
etag: "84238dfc8092e5d9c0dac8ef93371a07:1736799080.121134"
last-modified: Mon, 13 Jan 2025 20:11:20 GMT
cache-control: max-age=2205
date: Sat, 21 Jun 2025 17:00:30 GMT
alt-svc: h3=":443"; ma=93600,h3-29=":443"; ma=93600
Dans cet entête, la première ligne retourne la version du protocole HTTP. Ici c'est la version 2
qui est utilisée par le serveur HTTP du site web. La valeur 200 correspond au code
de retour OK (pas d'erreur). L'autre version de HTTP peut être HTTP/1.1 (voire HTTP/1.0
si le serveur web est très ancien).
Dans l'entête on peut trouver des informations comme la date de mise à jour du fichier, le type de contenu récupéré (Content-Type: text/html) et parfois le User-Agent ou bien la version du serveur Web utilisée (Server: Apache).
HTTP version 1.1 date de 1997 et HTTP 2.0 est devenu un standard officiel en 2015 et a apporté un grand nombre d'améliorations et notamment :
Pour plus d'informations : https://www.cloudflare.com/fr-fr/learning/performance/http2-vs-http1.1/
Les WAF (Web Application Firewall) peuvent être des freins à la récupération d'information.