Définir un délai d'attente de requête dans Nikto

Kali LinuxBeginner
Pratiquer maintenant

Introduction

Nikto est un scanner de serveurs web open-source populaire qui effectue des tests complets sur les serveurs web pour plusieurs éléments, notamment plus de 6700 fichiers/programmes potentiellement dangereux, des vérifications de versions obsolètes pour plus de 1250 serveurs, et des problèmes spécifiques à la version sur plus de 270 serveurs.

Lors de l'analyse des serveurs web, en particulier sur des réseaux lents ou peu fiables, ou contre des serveurs soumis à une charge importante, les requêtes peuvent prendre beaucoup de temps à se compléter. Par défaut, Nikto attend 10 secondes pour une réponse. Si un serveur est plus lent que cela, Nikto peut signaler des erreurs de délai d'attente (timeout errors) et ne pas réussir à terminer l'analyse correctement.

Dans ce laboratoire, vous apprendrez à utiliser l'option -timeout de Nikto pour contrôler la période de délai d'attente des requêtes. Cela vous permettra d'ajuster le comportement de Nikto pour analyser avec succès les serveurs web lents ou peu réactifs.

Identifier un serveur web lent ou peu réactif

Dans cette étape, vous apprendrez à identifier si un serveur web est lent. Avant d'ajuster les délais d'attente dans un outil d'analyse, il est crucial de mesurer d'abord le temps de réponse typique du serveur. Une façon simple de le faire est d'utiliser la commande curl.

Nous avons démarré un serveur web en arrière-plan qui est intentionnellement lent ; il attend 5 secondes avant d'envoyer une réponse. Utilisons curl pour mesurer le temps nécessaire pour obtenir une réponse de celui-ci. L'indicateur -w nous permet de formater la sortie, et %{time_total} est une variable qui contient le temps total de la transaction.

Exécutez la commande suivante dans votre terminal pour mesurer le temps de réponse du serveur local fonctionnant sur le port 8000 :

curl -o /dev/null -s -w 'Total time: %{time_total}\n' http://localhost:8000

Vous verrez une sortie similaire à la suivante. Le temps sera légèrement supérieur à 5 secondes en raison du délai artificiel que nous avons ajouté au serveur.

Total time: 5.00...

Cela confirme que le serveur est lent et prend plus de quelques secondes pour répondre. Ces informations sont essentielles pour définir un délai d'attente approprié dans Nikto.

Utiliser l'option -timeout pour définir un court délai d'attente en secondes

Dans cette étape, vous découvrirez l'option -timeout de Nikto. Cette option vous permet de spécifier le nombre de secondes à attendre pour qu'une requête unique se termine avant que Nikto n'abandonne et ne la marque comme un délai d'attente (timeout). La valeur par défaut est de 10 secondes.

Pour comprendre comment Nikto se comporte avec un délai d'attente mal configuré, nous allons intentionnellement définir une valeur trop courte pour notre serveur lent. Sachant que le serveur met environ 5 secondes à répondre, nous allons définir un délai d'attente de 2 secondes. Cela provoquera l'échec de l'analyse avec des erreurs de délai d'attente, que nous observerons à l'étape suivante.

Tout d'abord, confirmons l'existence et la description de l'option -timeout à l'aide du menu d'aide de Nikto. Vous pouvez rediriger la sortie de nikto -Help vers grep pour trouver l'option spécifique.

nikto -Help | grep timeout

La sortie vous montrera l'option -timeout et sa description :

-timeout <secs>     Timeout for requests (default 10 seconds)

Cela confirme comment utiliser l'option. À l'étape suivante, nous l'appliquerons lors d'une analyse réelle.

Lancer l'analyse et observer les erreurs de délai d'attente potentielles

Dans cette étape, vous allez lancer l'analyse Nikto avec la valeur de délai d'attente courte que nous avons choisie. Cela démontrera ce qui se passe lorsque le délai d'attente n'est pas suffisant pour le serveur cible.

Exécutez la commande suivante pour analyser le serveur local avec un délai d'attente de 2 secondes. L'indicateur -h spécifie l'hôte, et -p spécifie le port.

nikto -h localhost -p 8000 -timeout 2

Au fur et à mesure que l'analyse s'exécute, vous verrez plusieurs messages d'erreur s'afficher dans la console. Nikto essaiera d'effectuer des requêtes, mais comme le serveur met 5 secondes à répondre, le délai d'attente de 2 secondes sera dépassé à chaque fois.

La sortie sera remplie d'erreurs similaires à celles-ci :

- Nikto v2.5.0
---------------------------------------------------------------------------
+ Target IP:          127.0.0.1
+ Target Hostname:    localhost
+ Target Port:        8000
+ Start Time:         ...
---------------------------------------------------------------------------
+ Server: No banner retrieved
+ The anti-clickjacking X-Frame-Options header is not present.
+ The X-XSS-Protection header is not defined. This header can hint to the user agent to protect against some forms of XSS
+ The X-Content-Type-Options header is not set. This could allow the user agent to render the content of the site in a different fashion to the MIME type
+ ERROR: Connection timed out
+ ERROR: Connection timed out
... (beaucoup plus d'erreurs) ...

Les messages répétés ERROR: Connection timed out sont un signe clair que la valeur du délai d'attente est trop basse. Les résultats de l'analyse ne sont pas fiables et de nombreux tests sont probablement ignorés.

Augmenter la valeur du délai d'attente pour une analyse plus fiable

Dans cette étape, vous allez corriger le problème de l'étape précédente en définissant une valeur de délai d'attente appropriée. Pour garantir une analyse fiable, le délai d'attente doit être supérieur au temps de réponse le plus long attendu du serveur.

D'après notre test curl à l'étape 1, nous savons que le serveur met environ 5 secondes à répondre. Pour être sûr, nous devrions ajouter une petite marge. Définissons le délai d'attente à 7 secondes. Cela laissera suffisamment de temps au serveur pour traiter la requête et envoyer une réponse.

Exécutez à nouveau l'analyse Nikto, mais cette fois avec un délai d'attente de 7 secondes :

nikto -h localhost -p 8000 -timeout 7

Cette fois, vous devriez obtenir un résultat différent. L'analyse se déroulera sans les erreurs "Connection timed out". Nikto sera désormais capable de communiquer correctement avec le serveur et d'effectuer ses tests.

La sortie ressemblera davantage à une analyse normale et réussie :

- Nikto v2.5.0
---------------------------------------------------------------------------
+ Target IP:          127.0.0.1
+ Target Hostname:    localhost
+ Target Port:        8000
+ Start Time:         ...
---------------------------------------------------------------------------
+ Server: Python/3.10.6 http.server/0.6
+ The anti-clickjacking X-Frame-Options header is not present.
+ The X-XSS-Protection header is not defined. This header can hint to the user agent to protect against some forms of XSS
+ The X-Content-Type-Options header is not set. This could allow the user agent to render the content of the site in a different fashion to the MIME type
+ No CGI directories found (use '-C all' to force check all possible dirs)
+ "robots.txt" not found.
...

Remarquez l'absence d'erreurs de délai d'attente et la présence d'une bannière de serveur. Cela indique que l'analyse s'exécute désormais de manière fiable.

Trouver une valeur de délai d'attente optimale pour le réseau cible

Dans cette étape, nous allons discuter de la stratégie pour trouver une valeur de délai d'attente optimale. Bien que nous ayons utilisé un délai connu dans notre environnement contrôlé, dans un scénario réel, vous ne connaîtrez pas le temps de réponse exact.

Trouver le délai d'attente optimal est un équilibre :

  • Trop court : Entraîne des erreurs de délai d'attente et une analyse peu fiable (comme vu à l'étape 3).
  • Trop long : Peut rendre l'analyse inutilement lente si le serveur est en réalité rapide. Par exemple, définir un délai d'attente de 30 secondes pour un serveur qui répond normalement en 1 seconde signifie que vous attendrez 30 secondes pour chaque requête réellement échouée, ralentissant ainsi l'analyse globale.

Une bonne stratégie consiste à :

  1. Effectuer une mesure de référence à l'aide de ping ou curl pour comprendre la latence générale.
  2. Commencer avec un délai d'attente quelques secondes plus long que votre mesure de référence.
  3. Si vous constatez toujours des erreurs de délai d'attente, augmentez la valeur progressivement jusqu'à ce que l'analyse s'exécute sans problème.

Pour notre serveur, un délai d'attente de 7 secondes a bien fonctionné. Essayons une dernière analyse avec un délai d'attente légèrement plus généreux de 10 secondes (la valeur par défaut de Nikto) et introduisons également l'option -maxtime, qui limite la durée totale de l'analyse. Ceci est utile pour s'assurer qu'une analyse ne dure pas des heures sur un très grand site web.

nikto -h localhost -p 8000 -timeout 10 -maxtime 60s

Cette commande indique à Nikto d'attendre jusqu'à 10 secondes pour chaque requête et d'interrompre l'analyse entière si elle prend plus de 60 secondes. Cette combinaison vous donne le contrôle à la fois sur les temps des requêtes individuelles et sur la durée totale de l'analyse.

Résumé

Dans ce laboratoire, vous avez appris à gérer efficacement les délais d'attente des requêtes dans Nikto, une compétence essentielle pour effectuer des analyses de vulnérabilités web fiables.

Vous avez commencé par identifier un serveur web lent en utilisant la commande curl pour mesurer son temps de réponse. Vous avez ensuite exploré l'option -timeout de Nikto, en la réglant d'abord sur une valeur trop basse, ce qui a entraîné des erreurs de connexion. Par la suite, vous avez augmenté le délai d'attente à une valeur appropriée, permettant à l'analyse de se terminer avec succès.

Enfin, vous avez appris la stratégie pour trouver une valeur de délai d'attente optimale en équilibrant la fiabilité et l'efficacité de l'analyse, et vous avez découvert l'option connexe -maxtime pour contrôler la durée totale de l'analyse. La configuration correcte de ces paramètres garantit que vos analyses Nikto sont à la fois complètes et opportunes.