Tests d'intrusion web

Préparation & Pré-requis

  • Préparer l’environnement de test ;
  • Valider la présence de tous les outils nécessaires, dont à minima : burpsuite, nmap, ffuf, sqlmap etc. ;
  • Vérifier que la journalisation fonctionne correctement ;
  • S’assurer que l’on possède les comptes utilisateurs pour la partie boîte grise.

Reconnaissance passive

Résolution IP/Nom de domaine

Afin de vérifier si les cibles tournent sur un seul ou plusieurs serveurs, il peut être intéressant de résoudre leur adresse IP :

host $DOMAIN_NAME

Analyse des certificats

Identifier les autres domaines présents sur la même adresse IP en vérifiant le champ “Certificate Subject Alt Name” des certificats TLS :

Analyse des technologies utilisées

Jeter un coup d’oeil aux technologies qui composent l’application :

Reconnaissance active

Analyse des protocoles

Utiliser nmap pour identifier les ports ouverts et les services qui tournent sur le serveur hébergeant l’application :

sudo nmap $IP -sT -sC -sV -Pn --open --reason -p- -oA $OUTPUT --min-rate $VALUE -vv

Enumération de ressources

Cette action peut également être réalisée en boîte grise afin de comparer les niveaux d’accès avec un utilisateur standard. Pour cela, ajouter le cookie dans la commande (-b pour ffuf, -c dans gobuster)

Etude de la configuration SSL/TLS

testssl $URL

Analyse des en-têtes HTTP

Analyser les en-têtes HTTP suivants :

  • x-frame-option
  • x-content-type-options
  • x-xss-protection (déprécié)
  • strict-transport-security
  • content-security-policy
  • referrer-policy

Pour la récupération de ces dernières, au choix, utiliser BurpSuite ou curl :

curl -k -s -D - -o /dev/null $URL

Bruteforce DNS & vhosts

Rappel : un vhost (virtual host) est une configuration côté serveur web permettant d’héberger plusieurs applications sur une même adresse IP, en distinguant les requêtes selon le nom de domaine demandé (dans l’en-tête Host généralement). Un sous-domaine, en revanche, est une subdivision du domaine principal (ex. app.exemple.com) gérée au niveau DNS, qui peut pointer vers le même serveur ou un autre, mais reste une partie du même domaine.

Bruteforce DNS

gobuster dns --domain $DOMAIN --resolver $SERVER_NAME -w $WORDLIST

Bruteforce vhosts

Redirection du trafic non chiffré

curl -D - http://$URL

Vérifier que la réponse du serveur est bien un code 301 avec un en-tête location qui pointe vers la version HTTPS.

Présence d’un WAF

wafw00f $URL

Tests applicatifs

Authentification et gestion des sessions

  • Tenter d’identifier la politique de mots de passe : créer un compte avec un mot de passe volontairement faible pour déclencher un message d’erreur ;
  • Identifier la présence d’un mécanisme anti-bruteforce ;
  • Vérifier s’il est possible de réaliser de l’énumération de comptes utilisateurs grâce aux messages d’erreurs ou à des délais de réponse différents ;
  • Tenter d’exploiter la fonction de réinitialisation de mot de passe ;
  • Vérifier s’il est possible de contourner le formulaire d’authentification.
  • Vérifier la robuster de l’algorithme de gestion des sessions : JWT

Cookies

  • Vérifier les attributs de sécurité des cookies de session :
    • SameSite : doit être à Lax ou Strict
    • HttpOnly : doit être à True
    • Secure : doit être à True
  • Vérifier si les données stockées sont en clair ou encore déchiffrables ;

CSRF

  • Vérifier la présence de jetons uniques (anti-CSRF) et non prédictibles au sein des formulaires sensibles ;
  • Vérifier si ces jetons sont liés aux sessions ;
  • Confirmer que ces jetons sont strictement validés avant toute action.

Validation des entrées utilisateurs

  • Injections XSS (Cross-Site Scripting)
  • Injections SQL et NoSQL
  • Injections XXE (XML External Entities)
  • Injections de template (SSTI)
  • Injection de commandes
  • File inclusion (LFI, RFI)
  • Path Traversal
  • SSRF
  • Injection XPath

Contrôles côté client

  • Champs cachés dans les formulaires ;
  • Parser les fichiers JavaScript à la recherche de secrets ou de chemins vers d’autres ressources ;
  • Informations sensibles dans les cookies ;
  • HTLM5 Local Storage

Mécanismes de cache

  • Web Cache Poisoning
  • Web Cache Deception

Contrôles d’accès / Problèmes d’autorisation 🚧

Fonctionnalités de téléversement de fichiers 🚧

Analyse des messages d’erreurs 🚧

Logique applicative 🚧

Web Services 🚧

CMS

Des tests complémentaires vont devoir être réalisés en fonction de l’utilisation d’un framework en particulier.

WordPress

  • Vérifier si XMLRCP est activé ;
  • Vérifier l’accessibilité de la page d’authentification wp-login.php et wp-admin ;
  • Vérifier si on peut énumérer les utilisateurs via /author=X ou l’endpoint /wp-json/wp/v2/users ;
  • Identifier les plugins utilisés par l’application ;
  • Vérifier si des vulnérabilités sont associées à la version de WordPress ainsi que des plugins.
wpscan --url $URL -e -vp --plugin-detection mixed --api-token $TOKEN

Présence d’un anti-virus 🚧