Tests d'intrusion web
On this page
- Préparation & Pré-requis
- Reconnaissance passive
- Reconnaissance active
- Tests applicatifs
- Authentification et gestion des sessions
- Cookies
- CSRF
- Validation des entrées utilisateurs
- Contrôles côté client
- Mécanismes de cache
- 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
- Présence d’un anti-virus 🚧
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,sqlmapetc. ; - 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_NAMEAnalyse 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 -vvEnumé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 $URLAnalyse 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 $URLBruteforce 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 $WORDLISTBruteforce vhosts
Redirection du trafic non chiffré
curl -D - http://$URLVé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 $URLTests 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 StrictHttpOnly: doit être à TrueSecure: 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.phpetwp-admin; - Vérifier si on peut énumérer les utilisateurs via
/author=Xou 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