đĄïž Security Testing & Assessment Toolkit
Guide HTML IDEO-Lab clair â mĂ©thodologie, outils, installation, workflow, tableaux, diagrammes, commandes et remĂ©diation.
Objectif : auditer uniquement une infrastructure que tu possÚdes ou que tu es explicitement autorisé à tester, puis transformer chaque finding en correction vérifiable.
Panorama du toolkit
Vue globale : phases, familles de tests, niveau de risque et logique terrain.
MéthodeCarteWorkflowCadre légal & périmÚtre
Autorisation, périmÚtre écrit, progressivité et zones interdites en production.
ScopeĂthiqueRisqueMĂ©thodologie en 6 phases
Reconnaissance, scan, énumération, analyse, preuve contrÎlée, reporting.
6 phasesPTESOWASPInstallation & lab
Poste Ubuntu/Windows, Docker, wordlists, outils de base et cibles dâentraĂźnement.
UbuntuWindowsDockerReconnaissance & OSINT
DNS, certificats, sous-domaines, Shodan/Censys et cartographie passive.
OSINTDNSCT logsDécouverte réseau & ports
Nmap, RustScan, masscan, états open/filtered/closed, ports exposés.
NmapPortsFirewallĂnumĂ©ration des services
HTTP fingerprinting, nmap NSE, whatweb, wafw00f, SSH, DB, DNS, SNMP.
EnumHTTPNSETLS, SSL & headers
testssl.sh, sslscan, sslyze, HSTS, CSP, X-Frame, politique reverse proxy.
TLSHeadersNginxDAST : Burp, ZAP, Nikto
Proxy manuel, scan passif, scan actif staging, analyse des alertes.
ZAPBurpNiktoContent discovery
ffuf, feroxbuster, gobuster, SecLists, endpoints cachés, backups, .git.
ffufSecLists403/200Scanners CMS
WPScan, droopescan, JoomScan, CMSeeK : plugins, users, versions, CVE.
CMSWPScanDrupalInjection & exploitation web
SQLi, XSS, SSTI, LFI, SSRF : preuve minimale, staging uniquement.
SQLiXSSStagingScanners de vulnérabilités
Nuclei, OpenVAS, Nessus, InsightVM : templates, CVE, sévérité, tri.
NucleiCVECVSSFrameworks dâexploitation
Metasploit, searchsploit, BeEF : validation contrÎlée, jamais de dégùts.
PoCMetasploitSafePasswords & authentication
Hydra défensif, lockout, MFA, rate limit, sessions, cookies, reset password.
MFALockoutJWTAPI, JWT & BOLA
OpenAPI, autorisations objet, JWT, CORS, tests par rĂŽle, Postman/ZAP API.
APIBOLAJWTCloud & containers AWS
Prowler, security groups, IAM, S3, Trivy, Grype, Docker Bench.
AWSTrivyIAMSAST, dépendances & secrets
Bandit, Semgrep, pip-audit, Gitleaks, TruffleHog, CodeQL, CI.
SASTSCASecretsAnalyse trafic réseau
tcpdump, tshark, Wireshark, mitmproxy : preuve, debug, fuite de données.
PCAPTLSProxyDistributions sécurité
Kali, Parrot, BlackArch, Commando VM : quand les utiliser, quand éviter.
KaliParrotVMApplication Ă IDEO-Lab
FastAPI, Nginx, AWS, ports internes, bind localhost, SG, reverse proxy.
FastAPINginxAWSWorkflow end-to-end
Ordre recommandé, preuves, fichiers de sortie, décisions go/no-go.
RunbookAuditRetestReporting & remediation
Fiche finding, matrice de risque, priorisation, patch, re-test, suivi.
ReportCVSSFixLab, fuzzing & RE
Juice Shop, DVWA, RESTler, AFL++, radamsa, Ghidra : limites et utilité.
LabFuzzingREMaster tool table
Table globale : outil, catégorie, intrusivité, usage, sortie attendue.
ToolsMatrixRefCommand cheat-sheet
Commandes prĂȘtes Ă adapter pour ton propre domaine ou staging.
CommandsQuickRunbookCe guide HTML transforme le PDF de référence en page IDEO-Lab claire : cartes, modales, onglets, tableaux, commandes, diagrammes et workflow terrain. Il reste volontairement orienté audit autorisé, auto-évaluation et durcissement.
La logique nâest pas de âlancer tous les outilsâ, mais de suivre une progression : peu intrusif dâabord, preuve minimale ensuite, correction enfin.
| Famille | Ce que ça teste | Exemples | Risque |
|---|---|---|---|
| Passive | Informations publiques | DNS, CT logs, Shodan | TrĂšs faible |
| Active légÚre | Réponse réseau/app sans payload agressif | nmap, whatweb, testssl | Faible à moyen |
| DAST passif | Crawl et observation HTTP | ZAP baseline, Burp proxy | Faible |
| Active intrusive | Payloads, formulaires, brute force contrĂŽlĂ© | ZAP full, sqlmap, Hydra | ĂlevĂ© |
| SAST/SCA | Code et dépendances sans toucher prod | Semgrep, Bandit, pip-audit | TrÚs faible |
- Un inventaire des assets exposés.
- Une liste de ports ouverts et justifiés.
- Une table des findings avec preuve courte.
- Un plan de correction priorisé.
- Un re-test aprĂšs patch.
- Des contrÎles CI/CD pour éviter la régression.
| Artefact | Format conseillé | Pourquoi |
|---|---|---|
| Port scan | TXT + XML/grepable | Rejouable et comparable |
| ZAP/Nikto/Nuclei | HTML + JSON si possible | Lisible + exploitable en pipeline |
| Cloud posture | CSV/HTML | Priorisation par ressource |
| SAST/SCA | SARIF/JSON | Intégration GitHub/GitLab |
| Report final | HTML/PDF/tickets | Actionnable par dev/ops |
- Domaines et sous-domaines autorisés.
- Adresses IP et plages cloud autorisées.
- FenĂȘtres horaires de test.
- Niveau dâintrusivitĂ© autorisĂ©.
- Contacts en cas dâalerte.
- ProcĂ©dure dâarrĂȘt si un service devient instable.
| ĂlĂ©ment | Exemple propre | Ă Ă©viter |
|---|---|---|
| Target | staging.example.com, 203.0.113.10 | Tous les domaines de la société sans limite |
| Ports | 80/443, scan validation 22/3306 | Scan massif non cadré |
| Données | Jeu de données factice | Données client réelles |
| Auth | Comptes de test dédiés | Comptes personnels ou admin prod |
Une bonne Ă©valuation augmente lâintrusivitĂ© par paliers. On arrĂȘte dĂšs que la preuve suffit. Lâobjectif est de prouver et corriger, pas de maximiser lâimpact.
| Action | Production | Staging/lab |
|---|---|---|
| Recon passive | OK | OK |
| nmap lĂ©ger | OK si fenĂȘtre dĂ©finie | OK |
| ZAP baseline | OK avec prudence | OK |
| ZAP full active | Non recommandé | Oui |
| sqlmap/Hydra | Non | Uniquement comptes/cibles de test |
| Metasploit exploit | Non | Snapshot + accord explicite |
La mĂ©thode structure lâaudit pour Ă©viter le chaos. Chaque phase produit des preuves et rĂ©duit lâincertitude avant de passer Ă la suivante.
| Phase | But | Outils représentatifs |
|---|---|---|
| 1. Reconnaissance | Cartographier sans toucher fortement la cible | whois, dig, Amass, Subfinder, Shodan |
| 2. Scanning | Identifier hÎtes, ports, protocoles exposés | nmap, RustScan, masscan |
| 3. ĂnumĂ©ration | Extraire versions, headers, services, mĂ©thodes | whatweb, wafw00f, nmap NSE |
| 4. Analyse vuln. | Relier constats Ă CVE ou mauvaises configurations | Nuclei, OpenVAS, ZAP, Nikto |
| 5. Preuve contrÎlée | Confirmer sans détruire ni persister | sqlmap lab, Metasploit auxiliary, tests manuels |
| 6. Reporting | Prioriser, corriger, re-tester, documenter | Dradis, Faraday, Markdown, ticketing |
| Type | Définition | Forces | Limites |
|---|---|---|---|
| DAST | Teste lâapplication en fonctionnement | Voit comme un attaquant externe | Ne voit pas le code mort ou les chemins non exposĂ©s |
| SAST | Analyse le code sans exécuter | Trouve tÎt, profond, peu risqué | Faux positifs possibles |
| SCA | Analyse les dépendances | TrÚs rapide, trÚs rentable | Ne remplace pas les tests métier |
| IAST | Instrumentation runtime | Contexte riche | Plus lourd Ă installer |
- Valider le périmÚtre.
- Faire OSINT/DNS/CT logs.
- Scanner ports externes depuis une machine hors cloud.
- ĂnumĂ©rer seulement les services exposĂ©s.
- Lancer TLS/headers.
- Lancer ZAP baseline/Nikto/Nuclei contrÎlé.
- Faire SAST/SCA/secrets localement.
- Analyser AWS/security groups/IAM/S3.
- Créer le rapport et corriger.
- Re-tester les mĂȘmes commandes.
# Minimal run directory
mkdir -p security-audit/{recon,scan,tls,web,cloud,code,report}
cd security-audit
# Keep every raw output
# Do not overwrite evidence files during retestObjectif : installer uniquement les outils nécessaires, garder un environnement reproductible, et séparer le poste quotidien du lab sécurité.
sudo apt update
sudo apt install -y git curl wget jq nmap netcat-openbsd dnsutils whois nikto seclists tcpdump wireshark-common python3-pip python3-venv docker.io
python3 -m venv .venv-security
. .venv-security/bin/activate
python -m pip install --upgrade pip
python -m pip install bandit pip-audit semgrep# testssl.sh
git clone --depth 1 https://github.com/testssl/testssl.sh.git
cd testssl.sh
./testssl.sh --help- Installer Nmap pour Windows depuis le site officiel.
- Utiliser Docker Desktop si possible pour ZAP, Juice Shop, DVWA.
- Utiliser WSL2/Ubuntu pour les outils Linux.
- Garder les rapports dans un dossier de travail versionné.
# WSL2 Ubuntu example
sudo apt update
sudo apt install -y nmap git curl python3-pip docker.io
python3 -m pip install --user bandit pip-audit semgrep
# Windows PowerShell idea
# Use WSL for Linux-native commands and browser proxy for Burp/ZAP.# OWASP Juice Shop practice target
docker run --rm -p 3000:3000 bkimminich/juice-shop
# DVWA practice target
docker run --rm -p 8080:80 vulnerables/web-dvwa
# ZAP baseline via Docker
docker run --rm -t ghcr.io/zaproxy/zaproxy:stable zap-baseline.py -t http://host.docker.internal:3000| Composant | Pourquoi | RĂšgle |
|---|---|---|
| Docker | Reproductible, jetable | Pas de ports publics |
| Snapshots VM | Rollback rapide | Avant scan actif |
| Données factices | Pas de fuite client | Jamais prod |
La reconnaissance collecte ce qui est public : DNS, certificats, sous-domaines, services indexés. Elle est trÚs rentable et peu risquée.
whois example.com
host example.com
dig example.com ANY +noall +answer
dig +short A example.com
dig +short AAAA example.com
dig +short MX example.com
dig +short TXT example.com
dig -x 203.0.113.10| Record | Question | Finding possible |
|---|---|---|
| A/AAAA | Quelle IP sert le domaine ? | Ancienne IP encore active |
| MX | Qui gĂšre le mail ? | SPF/DKIM/DMARC absents |
| TXT | Vérifications, SPF, DKIM | Tokens exposés ou incohérents |
| NS | Serveurs autoritaires | DNS tiers oublié |
| PTR | Reverse IP | Nom interne exposé |
# Passive enumeration
amass enum -passive -d example.com -o recon/subdomains_amass.txt
subfinder -d example.com -all -o recon/subdomains_subfinder.txt
# Merge and resolve
cat recon/subdomains_*.txt | sort -u > recon/subdomains.txt
cat recon/subdomains.txt | httpx -silent -status-code -title -tech-detect > recon/live_http.txt
# Certificate Transparency check
# Search: %.example.com in crt.sh web UI- Rechercher le domaine, les IPs, les certificats.
- Comparer les ports indexés aux ports attendus.
- Vérifier les banniÚres de versions exposées.
- Créer un ticket pour tout service non justifié.
| Signal | Interprétation | Action |
|---|---|---|
| 3306 visible | Base de données exposée | Bloquer SG/firewall immédiatement |
| 22 visible Ă tous | SSH accessible globalement | Limiter Ă IP admin/VPN |
| Ancienne version nginx | BanniÚre ou paquet obsolÚte | Vérifier patch réel |
| Certificat pour old-* | Sous-domaine oublié | Décommissionner ou protéger |
Le scan rĂ©seau rĂ©pond Ă la question la plus importante : quâest-ce qui rĂ©pond rĂ©ellement depuis Internet ? Il doit ĂȘtre lancĂ© depuis lâextĂ©rieur du cloud, pas depuis la machine cible.
# Fast baseline
nmap -sV example.com -oN scan/nmap_fast.txt
# Full TCP sweep with versions and default scripts
nmap -sV -sC -p- example.com -oA scan/nmap_full_tcp
# UDP top ports, slower
sudo nmap -sU --top-ports 50 example.com -oA scan/nmap_udp_top50
# Validate sensitive ports are not reachable externally
nmap -p 22,3306,5432,6379,8810,8820 example.com -oN scan/nmap_sensitive.txt| STATE | Signification | Lecture sécurité |
|---|---|---|
| open | Un service rĂ©pond | Doit ĂȘtre justifiĂ© |
| filtered | Firewall drop | Souvent attendu pour ports internes |
| closed | Port joignable mais rien nâĂ©coute | Moins grave mais surface visible |
| open|filtered | Ambigu, souvent UDP | Ă confirmer |
| Port | Service | Ătat attendu public | Remarque |
|---|---|---|---|
| 80 | HTTP | open | Redirection HTTPS uniquement |
| 443 | HTTPS | open | Service public normal |
| 22 | SSH | filtered ou restreint | Seulement IP admin/VPN |
| 3306/5432 | DB | filtered | Jamais public |
| 6379 | Redis | filtered | Jamais public |
| 8810/8820 | Moteurs API internes | filtered | Reverse proxy ou localhost only |
# RustScan discovery, then nmap service detection
rustscan -a example.com -- -sV -sC -oN scan/rustscan_nmap.txt
# masscan should be rate-limited and used only on owned ranges
sudo masscan 203.0.113.0/24 -p1-65535 --rate 1000 -oG scan/masscan.gnmapUne fois les ports identifiĂ©s, lâĂ©numĂ©ration cherche les versions, mĂ©thodes, headers, partages ou informations utiles pour prioriser les risques.
whatweb -a 3 https://example.com
wafw00f https://example.com
nmap -p 443 --script http-headers,http-methods,http-title,http-server-header example.com
curl -sI https://example.com| Signal | Pourquoi câest utile | Action |
|---|---|---|
| Server header détaillé | Fuite de version | Masquer ou accepter si patché |
| Méthodes HTTP inutiles | PUT/DELETE/TRACE exposés | Limiter méthodes |
| WAF détecté | Explique blocages | Ne pas confondre avec correction |
| Framework visible | Aide à cibler tests | Vérifier headers et CVE |
| Service | Outils | Ce quâon cherche | Pertinence web stack |
|---|---|---|---|
| SSH | nmap NSE, ssh-audit | Versions, algorithmes, accĂšs public | ĂlevĂ©e |
| DNS | dnsenum, fierce | Zone transfer, records oubliés | Moyenne |
| SMB | enum4linux-ng, smbmap | Shares, users, policy | Faible sauf Windows |
| SNMP | snmpwalk, onesixtyone | Communautés, interfaces, config | Faible sur EC2 web |
| LDAP | ldapsearch | Users, groups, anonymous bind | Faible sauf AD/corporate |
| NFS | showmount | Exports montables | Faible sauf infra interne |
# HTTP security headers and methods
nmap -p 443 --script http-security-headers,http-methods example.com
# SSH algorithms
nmap -p 22 --script ssh2-enum-algos example.com
# DNS zone transfer test against an authoritative NS
nmap --script dns-zone-transfer --script-args dns-zone-transfer.domain=example.com -p 53 ns1.example.comTLS protĂšge le transport. Les headers rĂ©duisent plusieurs classes dâattaque navigateur. Sur un stack Nginx, ces contrĂŽles sont souvent rapides Ă corriger.
cd testssl.sh
./testssl.sh example.com
./testssl.sh --vulnerable example.com
./testssl.sh --htmlfile ../tls/testssl_report.html example.com
# Docker alternative
docker run --rm -it drwetter/testssl.sh example.com| ContrĂŽle | Ătat attendu |
|---|---|
| TLS 1.2 / 1.3 | Offert |
| SSLv2 / SSLv3 / TLS 1.0 / TLS 1.1 | Non offert |
| Weak ciphers | Aucun |
| Certificate chain | Valide |
| Expiration | Surveillée |
| Known TLS vulns | Not vulnerable |
sslscan example.com
sslyze --regular example.com
sslyze --json_out tls/sslyze.json example.com
curl -sI https://example.com | grep -iE 'strict-transport|content-security|x-frame|x-content|referrer|permissions'| Header | But | Exemple de cible |
|---|---|---|
| Strict-Transport-Security | Forcer HTTPS | max-age élevé + includeSubDomains si maßtrisé |
| Content-Security-Policy | Limiter scripts/styles/images | Politique progressive, test report-only |
| X-Frame-Options | Anti-clickjacking | DENY ou SAMEORIGIN |
| X-Content-Type-Options | EmpĂȘcher MIME sniffing | nosniff |
| Referrer-Policy | Limiter fuite URL | strict-origin-when-cross-origin |
| Permissions-Policy | Réduire APIs navigateur | camera=(), microphone=() |
# Example only, adapt to your Nginx baseline
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
add_header Permissions-Policy "camera=(), microphone=(), geolocation=()" always;Le DAST teste lâapplication en fonctionnement. Câest excellent pour headers, auth, formulaires, injections visibles, mais il faut distinguer scan passif et scan actif.
- Configurer le navigateur sur 127.0.0.1:8080.
- Installer le certificat CA Burp pour HTTPS.
- Naviguer normalement dans lâapplication.
- Envoyer une requĂȘte intĂ©ressante dans Repeater.
- Comparer réponses par rÎle utilisateur.
- Exporter les requĂȘtes utiles comme preuves.
# Burp is a manual proxy workflow
# Browser proxy: 127.0.0.1:8080
# Use Proxy, Repeater, Decoder and Comparer first.
# Active scanner requires proper authorization and staging.# Passive baseline scan, suitable for first CI checks
docker run --rm -t ghcr.io/zaproxy/zaproxy:stable zap-baseline.py -t https://example.com -r zap_baseline.html
# Active full scan, staging only
docker run --rm -t -v $(pwd):/zap/wrk/:rw ghcr.io/zaproxy/zaproxy:stable zap-full-scan.py -t https://staging.example.com -r zap_full.html
# API scan from OpenAPI
docker run --rm -t -v $(pwd):/zap/wrk/:rw ghcr.io/zaproxy/zaproxy:stable zap-api-scan.py -t https://staging.example.com/openapi.json -f openapi -r zap_api.htmlsudo apt install -y nikto
nikto -h https://example.com -o web/nikto.html -Format htm| Alerte | Lecture | Action |
|---|---|---|
| Missing CSP | Risque XSS aggravé | Déployer CSP progressive |
| Server leaks version | Information disclosure | Masquer header ou documenter |
| Directory indexing | Listing fichiers | Désactiver autoindex |
| Old risky file | Fichier backup ou sample | Supprimer ou bloquer |
Les endpoints oubliés sont une source classique de faille : backup.zip, .git, admin ancien, debug, exports, endpoints API non documentés.
# Install SecLists first
sudo apt install -y seclists
# ffuf directory discovery
ffuf -u https://example.com/FUZZ -w /usr/share/seclists/Discovery/Web-Content/raft-medium-directories.txt -mc 200,301,302,403 -o content/ffuf.json -of json
# feroxbuster recursive discovery
feroxbuster -u https://example.com -w /usr/share/seclists/Discovery/Web-Content/common.txt -o content/ferox.txt
# gobuster simple mode
gobuster dir -u https://example.com -w common.txt -x php,txt,bak,zip| Status | Interprétation | Priorité |
|---|---|---|
| 200 | Ressource lisible | Vérifier contenu |
| 301/302 | Redirection | Suivre manuellement |
| 403 | Existe mais interdit | Vérifier contrÎle accÚs |
| 401 | Auth requise | Tester rÎles autorisés |
| 404 | Non trouvé | Ignorer sauf pattern suspect |
# Fast manual checks
curl -I https://example.com/.git/HEAD
curl -I https://example.com/.env
curl -I https://example.com/backup.zip
curl -I https://example.com/config.php.bak
curl -I https://example.com/admin/
curl -I https://example.com/debug/dirsearch -u https://example.com -e php,html,json
arjun -u https://example.com/api/endpoint
wfuzz -c -w wordlist.txt -d 'user=demo&pass=FUZZ' https://staging.example.com/loginSi une partie du site utilise WordPress, Drupal, Joomla ou un autre CMS, les scanners spécialisés détectent mieux les plugins, thÚmes, versions et CVE que les scanners génériques.
| CMS | Scanner | Ce quâil Ă©numĂšre | Point dâattention |
|---|---|---|---|
| WordPress | WPScan | Plugins, thÚmes, users, CVE | Token API conseillé pour CVE |
| Drupal | droopescan | Modules, thÚmes, version | Tester uniquement instances opérées |
| Joomla | JoomScan | Composants, version, paths | Faux positifs à vérifier |
| Multiple | CMSeeK / CMSmap | Détection puis scan ciblé | Bon pour inventaire |
# WordPress example
wpscan --url https://blog.example.com --enumerate vp,u --api-token TOKEN
# Drupal example
droopescan scan drupal -u https://example.com
# CMS detection
cmseek -u https://example.com- Confirmer que le CMS est bien dans le périmÚtre.
- Exporter la liste plugins/thĂšmes/versions.
- Prioriser CVE exploitables publiquement.
- Mettre Ă jour hors heures de pointe.
- Tester régression fonctionnelle aprÚs patch.
| Finding | Priorité |
|---|---|
| Plugin avec RCE connue | Critique |
| User enumeration seulement | Moyenne |
| Version disclosure | Faible Ă moyenne |
| Backup public wp-config | Critique |
| Type | SymptĂŽme | Preuve minimale | Correction |
|---|---|---|---|
| SQL Injection | ParamĂštre modifie requĂȘte SQL | DiffĂ©rence de rĂ©ponse contrĂŽlĂ©e | RequĂȘtes paramĂ©trĂ©es / ORM |
| XSS | Script injectĂ© rendu au navigateur | Payload inoffensif en staging | Ăchappement, CSP, sanitization |
| SSTI | Template évalue expression utilisateur | Calcul simple en lab | Ne jamais templater input brut |
| LFI/RFI | Lecture fichier via path | Fichier test contrÎlé | Normaliser path, allowlist |
| SSRF | Backend appelle URL contrÎlée | Call vers listener lab | Bloquer metadata, allowlist egress |
# Capture a request from staging into request.txt first
# Then run against staging only
sqlmap -r request.txt --batch --risk=1 --level=1 --current-db
# Stop after proof. Do not dump data unless explicitly authorized.- Utiliser des payloads inoffensifs en lab.
- Capturer request/response avant/aprĂšs.
- Ne pas voler cookies, tokens ou données réelles.
- Documenter la source, le sink, et la correction.
- Re-tester aprĂšs patch avec le mĂȘme cas.
| Preuve | à faire | à éviter |
|---|---|---|
| XSS | alert/test marker en staging | Vol de cookie réel |
| SSRF | URL vers serveur lab | AccĂšs metadata cloud en prod |
| SSTI | Expression arithmétique simple | Exécution commande systÚme |
Les scanners accĂ©lĂšrent la dĂ©tection de CVE et mauvaises configurations, mais leur sortie doit ĂȘtre triĂ©e, confirmĂ©e et reliĂ©e Ă lâexposition rĂ©elle.
# Install with Go
go install -v github.com/projectdiscovery/nuclei/v3/cmd/nuclei@latest
# Update templates
nuclei -update
nuclei -update-templates
# Scan a target with severity filter
nuclei -u https://example.com -severity high,critical -o vuln/nuclei_high_critical.txt
# Scan a list of live hosts
nuclei -l recon/live_hosts.txt -severity medium,high,critical -o vuln/nuclei.txt| Outil | Type | Forces | Limites |
|---|---|---|---|
| OpenVAS / Greenbone | Open-source | TrĂšs complet, infrastructure | Installation plus lourde |
| Nessus | Commercial/free limited | Rapports propres, CVE, compliance | Licence |
| Rapid7 InsightVM | Commercial | Suivi continu, priorisation risque | Plateforme payante |
| Nuclei | Open-source | Rapide, scriptable, templates web/cloud | Faux positifs possibles |
| CritĂšre | Question |
|---|---|
| Exposition | Le service est-il joignable depuis Internet ? |
| Exploitabilité | Existe-t-il un exploit public fiable ? |
| Version réelle | La banniÚre reflÚte-t-elle la version patchée ? |
| Impact | RCE, fuite donnée, auth bypass ou DoS ? |
| Mitigation | WAF, firewall, auth, isolation réduisent-ils le risque ? |
Les frameworks comme Metasploit servent Ă confirmer quâun finding est rĂ©el. Dans un audit propriĂ©taire, ils doivent ĂȘtre strictement bornĂ©s Ă la preuve minimale.
msfconsole
msf> search type:auxiliary http_version
msf> use auxiliary/scanner/http/http_version
msf> set RHOSTS staging.example.com
msf> run
# Prefer auxiliary scanners before exploit modules.searchsploit nginx 1.24
searchsploit --nmap scan/nmap_full_tcp.xml- Comparer version détectée et version réellement patchée.
- Lire lâexploit pour comprendre prĂ©conditions.
- Chercher si la configuration locale est vulnérable.
- Ne jamais exécuter un exploit inconnu sans lab isolé.
| Outil | Usage | Zone sûre |
|---|---|---|
| BeEF | Impact XSS cÎté navigateur | Lab/staging avec navigateur de test |
| RouterSploit | Ăquipements rĂ©seau/IoT | MatĂ©riel propriĂ©taire en lab |
| Pacu | Validation IAM AWS | Compte sandbox ou rÎle read-only défini |
| Metasploit auxiliary | ĂnumĂ©ration contrĂŽlĂ©e | Staging ou fenĂȘtre validĂ©e |
Le but nâest pas de âcasser des mots de passeâ, mais de vĂ©rifier que lâauthentification rĂ©siste : MFA, verrouillage, rate limit, reset, cookies, sessions.
| ContrĂŽle | Test | Ătat attendu |
|---|---|---|
| MFA | Compte test avec MFA | Obligatoire pour admin |
| Rate limit | Tentatives login répétées contrÎlées | Ralentissement ou blocage |
| Lockout | Mauvais mots de passe | Verrouillage temporaire sans DoS global |
| Reset password | Token email | Expiration, usage unique, pas de fuite |
| Session cookie | Inspecter flags | HttpOnly, Secure, SameSite |
| Privilege separation | Compte low vs admin | Pas dâaccĂšs croisĂ© |
# Staging only, against a dedicated test account
hydra -l testuser -P small_test_wordlist.txt ssh://staging.example.com -t 2 -W 5
# Goal: confirm lockout/rate-limit, not crack accounts.# Inspect cookie flags
curl -sI https://example.com/login | grep -i set-cookie
# Expected examples
# Secure; HttpOnly; SameSite=Lax or SameSite=Strict| Bug fréquent | Impact | Correction |
|---|---|---|
| Cookie sans Secure | Fuite sur HTTP | Forcer HTTPS + Secure |
| Cookie sans HttpOnly | Vol via XSS plus facile | HttpOnly |
| Session fixation | Compte détournable | Rotate session on login |
| CSRF manquant | Action involontaire | Token CSRF + SameSite |
Les APIs modernes Ă©chouent souvent moins par injection que par contrĂŽle dâautorisation insuffisant : un utilisateur modifie un ID et lit/modifie lâobjet dâun autre.
# API scan from OpenAPI, staging only for active tests
docker run --rm -t -v $(pwd):/zap/wrk/:rw ghcr.io/zaproxy/zaproxy:stable zap-api-scan.py -t https://staging.example.com/openapi.json -f openapi -r zap_api.html
# Manual schema inventory
curl -s https://staging.example.com/openapi.json | jq '.paths | keys'| Test | Exemple | Résultat attendu |
|---|---|---|
| Read cross-user | User A demande /orders/{idB} | 403 ou 404 |
| Update cross-user | User A modifie objet B | 403 + log audit |
| Admin-only route | User standard appelle /admin | 403 |
| Tenant isolation | Tenant A liste tenant B | Aucune donnée |
# Manual role test idea
# 1. Login as user_a and capture token_a
# 2. Login as user_b and capture object_id_b
# 3. Call object_id_b using token_a
# 4. Expected: 403 or 404, never 200| ContrĂŽle | Pourquoi |
|---|---|
| alg accepté | Refuser none et algorithmes inattendus |
| exp / nbf / iat | Limiter durée de vie |
| aud / iss | EmpĂȘcher token dâun autre issuer |
| Rotation clés | Révoquer en cas de fuite |
| Scopes/roles | Autorisation cÎté serveur |
# Inspect a JWT header/payload without trusting it
python3 - <<'PY'
import base64, json, sys
jwt = sys.argv[1]
for part in jwt.split('.')[:2]:
part += '=' * (-len(part) % 4)
print(json.dumps(json.loads(base64.urlsafe_b64decode(part)), indent=2))
PY '<JWT_TOKEN>'Le cloud control plane fait partie de la surface dâattaque. Un security group trop ouvert ou un bucket public peut ĂȘtre plus critique quâun bug applicatif.
# Configure AWS credentials with least privilege first
aws sts get-caller-identity
# Prowler focused AWS checks
prowler aws --services ec2 s3 iam
# ScoutSuite AWS report
scout aws| Finding cloud | Priorité | Correction |
|---|---|---|
| SG ouvre 3306 à 0.0.0.0/0 | Critique | Restreindre SG immédiatement |
| S3 public readable | Critique | Block Public Access + policy |
| Root MFA absent | Critique | Activer MFA |
| IAM wildcard admin | Haute | Least privilege |
| CloudTrail absent | Haute | Activer logs |
# Trivy image scan
trivy image your-registry/your-app:latest
# Trivy filesystem scan
trivy fs .
# Grype image scan
grype your-registry/your-app:latest
# Docker Bench, host hardening
docker run --rm --net host --pid host --userns host --cap-add audit_control -v /etc:/etc:ro -v /usr/bin/containerd:/usr/bin/containerd:ro -v /usr/bin/runc:/usr/bin/runc:ro -v /var/lib:/var/lib:ro -v /var/run/docker.sock:/var/run/docker.sock:ro docker/docker-bench-security| RĂšgle | Ătat cible |
|---|---|
| 80/443 | Public OK si nécessaire |
| 22 | Seulement IP admin ou bastion/VPN |
| DB ports | Private subnet ou localhost only |
| Redis/Memcached | Jamais public |
| Internal API ports | 127.0.0.1 ou SG privé |
Ces contrĂŽles sont les plus sĂ»rs : ils travaillent sur le code, les dĂ©pendances et lâhistorique Git, sans attaquer lâapplication en production.
# Python SAST
python -m pip install bandit semgrep
bandit -r ./app -ll -f html -o code/bandit.html
semgrep --config=auto ./app --json -o code/semgrep.json
semgrep --config=p/security-audit ./app| Outil | Force | Exemples trouvés |
|---|---|---|
| Bandit | Python ciblé | eval, weak crypto, hardcoded password |
| Semgrep | Multi-langages, rĂšgles framework | XSS, SQL concat, auth bypass patterns |
| CodeQL | Analyse avancée | Dataflow, taint tracking |
python -m pip install pip-audit
pip-audit
pip-audit -r requirements.txt
# Trivy also scans local projects
trivy fs --scanners vuln,secret,misconfig .# Gitleaks scan current repo and history
gitleaks detect --source . -v
# TruffleHog deep git history scan
trufflehog git file://./your-repo| Secret trouvé | Action immédiate |
|---|---|
| AWS key | Révoquer/rotate, vérifier CloudTrail |
| DB password | Changer mot de passe + vérifier logs |
| JWT secret | Rotation globale des tokens |
| API token SaaS | Révoquer cÎté provider |
Lâanalyse PCAP sert Ă prouver ce qui circule rĂ©ellement : TLS, headers, protocoles, fuite de token, backend non chiffrĂ©, comportement client.
# Capture HTTPS traffic metadata
sudo tcpdump -i any -w traffic/capture_443.pcap port 443
# Capture local backend traffic
sudo tcpdump -i any -w traffic/backend_8810.pcap port 8810
# Quick tshark view
sudo tshark -i any -f 'port 443' -Y http- Ouvrir le PCAP.
- Filtrer par host, port, http, tls, dns.
- Vérifier si le trafic backend est chiffré.
- Chercher Authorization, Cookie, Set-Cookie, tokens.
- Exporter une capture minimale pour le rapport.
# Start proxy
mitmproxy -p 8080
# Browser or client proxy points to 127.0.0.1:8080
# Install the mitmproxy CA only in the test profile.| Usage | Pourquoi |
|---|---|
| Client API | Voir payloads exacts |
| Mobile app test | Comprendre appels backend |
| Debug auth | Inspecter headers/cookies |
| Replay simple | Reproduire comportement |
Une distribution sécurité est pratique pour un audit régulier, mais excessive pour un site unique. Le meilleur choix dépend du besoin réel.
| Distribution | Base | Usage | Quand choisir |
|---|---|---|---|
| Kali Linux | Debian | Référence pentest | Audit régulier, documentation énorme |
| Parrot Security | Debian | Plus léger, privacy/dev | Poste polyvalent |
| BlackArch | Arch | TrĂšs grand nombre dâoutils | Utilisateur Arch avancĂ© |
| Pentoo | Gentoo | Niche, source-based | Cas trÚs spécialisés |
| Commando VM | Windows | AD/Windows tooling | Environnement Windows/AD |
- Créer une VM dédiée.
- Snapshot avant modification majeure.
- Pas de secrets personnels dans la VM.
- Réseau NAT par défaut.
- VPN si besoin.
- Dossier partagé seulement pour rapports.
# Suggested folders inside the VM
mkdir -p ~/audits/example/{recon,scan,tls,web,cloud,code,pcap,report}Cette section traduit la méthode vers un stack self-hosted : reverse proxy Nginx, services FastAPI/systemd, ports internes, AWS security groups, DB privée.
| Composant | ContrĂŽle prioritaire |
|---|---|
| AWS SG | Ports publics minimaux |
| Nginx | TLS + headers + proxy rules |
| FastAPI | Bind localhost + auth + OpenAPI contrÎlé |
| systemd | User dédié, restart, logs |
| DB/cache | Non exposé Internet |
# On the server: check listeners
sudo ss -tlnp | grep -E '8810|8820|3306|6379'
# Desired for internal services
# 127.0.0.1:8810
# 127.0.0.1:8820
# 127.0.0.1:3306 or private interface only
# Bad for internal services
# 0.0.0.0:8810
# 0.0.0.0:3306# From outside the cloud
nmap -p 80,443,22,3306,6379,8810,8820 example.com
# TLS
./testssl.sh example.com
# Web passive
nikto -h https://example.com
# Code/local
bandit -r ./app -ll
pip-audit -r requirements.txt
gitleaks detect --source . -v
# AWS
prowler aws --services ec2 s3 iam| Résultat attendu | Interprétation |
|---|---|
| 80/443 open only | Exposition propre |
| 22 filtered/restricted | Admin protégé |
| 3306/6379 filtered | DB/cache protégés |
| 8810/8820 filtered | Moteurs internes protégés |
Un workflow reproductible permet de comparer les résultats avant/aprÚs correction. Le plus important : garder les sorties brutes.
- CrĂ©er le dossier dâaudit.
- Noter le périmÚtre et la date.
- Lancer recon passive.
- Scanner ports publics.
- ĂnumĂ©rer HTTP/TLS.
- Lancer DAST passif.
- Lancer content discovery contrÎlé.
- Lancer SAST/SCA/secrets localement.
- Lancer cloud posture.
- Trier findings par impact/exposition.
- Corriger.
- Rejouer les mĂȘmes checks.
AUDIT_ID="example-$(date +%Y%m%d)"
mkdir -p "$AUDIT_ID"/{recon,scan,tls,web,cloud,code,pcap,report}
# Store command history
script -a "$AUDIT_ID/report/session.log"| Signal | Décision |
|---|---|
| Port DB ouvert public | Stop scan, corriger immédiatement |
| ZAP baseline warnings only | Créer tickets et continuer |
| Secrets Git valides | Révoquer avant suite |
| Active scan dégrade staging | Stop, restaurer snapshot |
| CVE critique confirmée | Patch prioritaire + re-test |
- Rejouer exactement la mĂȘme commande.
- Comparer diff de sortie.
- Conserver ancienne et nouvelle preuve.
- Fermer le ticket seulement si le risque disparaĂźt.
- Ajouter un contrĂŽle CI/CD quand possible.
# Example diff
nmap -p 22,3306,8810,8820 example.com -oN scan/retest_sensitive.txt
diff -u scan/nmap_sensitive.txt scan/retest_sensitive.txt || trueUn bon rapport est actionnable : court, précis, avec preuve, impact, correction, priorité et statut de re-test.
| Champ | Contenu attendu |
|---|---|
| Titre | Port 3306 exposé publiquement |
| Sévérité | Critique / Haute / Moyenne / Basse |
| Asset | Domaine, IP, endpoint, repo, image |
| Preuve | Commande + extrait minimal |
| Impact | Ce quâun attaquant peut faire |
| Correction | Action concrĂšte |
| Owner | Dev/Ops/Sec |
| Retest | Commande et résultat aprÚs patch |
Finding: Database port exposed
Asset: example.com / 203.0.113.10
Evidence: nmap shows 3306/tcp open from external network
Impact: Direct database attack surface
Fix: Remove public ingress rule, bind DB to private interface
Retest: nmap -p 3306 example.com returns filtered| Impact / Probabilité | Faible | Moyenne | Forte |
|---|---|---|---|
| Faible | Low | Low | Medium |
| Moyen | Low | Medium | High |
| Fort | Medium | High | Critical |
Ces techniques complĂštent lâaudit standard. Elles sont puissantes mais rarement prioritaires pour un site web classique, sauf upload, parseur, API complexe ou binaire tiers.
# Juice Shop
docker run --rm -p 3000:3000 bkimminich/juice-shop
# DVWA
docker run --rm -p 8080:80 vulnerables/web-dvwa# radamsa mutation
radamsa sample.json > fuzzed.json
echo 'GET /api/example' | radamsa
# AFL++ for native parser targets
afl-cc -o target target.c
afl-fuzz -i seeds/ -o findings/ -- ./target @@| Cible | Fuzzer utile | Pourquoi |
|---|---|---|
| Upload fichiers | radamsa / AFL++ selon parser | Trouver crash parsing |
| API OpenAPI | RESTler | Séquences stateful |
| Protocol custom | boofuzz | Messages structurés |
| C extension | AFL++ / libFuzzer | Memory bugs |
| Outil | Usage |
|---|---|
| file / strings / objdump | Triage statique rapide |
| Ghidra | Décompilation gratuite et robuste |
| radare2 / Cutter | RE CLI/GUI open-source |
| GDB + pwndbg/GEF | Debug dynamique |
| checksec | Protections binaire |
Table de rĂ©fĂ©rence synthĂ©tique pour choisir lâoutil selon la phase, le risque et la sortie attendue.
| Outil | Catégorie | Intrusivité | Usage | Sortie |
|---|---|---|---|---|
| whois / dig / host | Recon DNS | Passive | Comprendre domaine, NS, MX, TXT | Liste DNS vérifiée |
| Amass / Subfinder | Sous-domaines | Passive Ă active selon mode | Trouver staging, admin, anciens hosts | subs.txt + hosts live |
| Shodan / Censys | OSINT services | Passive cÎté cible | Voir ce que le monde voit déjà | Ports/banniÚres/certificats |
| nmap | Port scan | Active | Scanner ports et versions | open/filtered/closed + versions |
| RustScan | Port discovery | Active | Découverte rapide avant nmap | Ports ouverts |
| whatweb / wafw00f | HTTP fingerprint | Active légÚre | Identifier stack et WAF | Technos, headers, WAF |
| testssl.sh / sslscan | TLS | Active légÚre | Protocoles, ciphers, certificat | Rapport TLS |
| Burp Suite | Proxy manuel | Manuelle active | Rejouer, modifier, comprendre requĂȘtes | RequĂȘtes annotĂ©es |
| OWASP ZAP | DAST | Passive Ă active | Baseline CI ou full scan staging | HTML/JSON report |
| Nikto | Web server sweep | Active bruyante | Fichiers à risque, headers, vieux serveurs | Leads à vérifier |
| ffuf / feroxbuster | Content discovery | Active | Chemins cachés, backups, admin | 200/301/403 à analyser |
| Nuclei | Vuln scanner templates | Active contrÎlée | CVE/misconfig rapides | Findings par sévérité |
| OpenVAS / Nessus | Vuln management | Active | Audit infrastructure complet | Rapport CVE/CVSS |
| Bandit / Semgrep | SAST | Non-intrusive | Code Python/multi-langages | Findings source |
| pip-audit / Trivy fs | SCA | Non-intrusive | Dépendances vulnérables | CVE dependencies |
| Gitleaks / TruffleHog | Secrets | Non-intrusive | Secrets dans repo/historique | Clés à révoquer |
| Prowler / ScoutSuite | Cloud posture | Read-only | AWS IAM, S3, SG, logging | FAIL/PASS par ressource |
| Trivy image / Grype | Container scan | Non-intrusive | Images et OS packages vulnérables | CVE image report |
| tcpdump / Wireshark | Traffic analysis | Passive | Preuve réseau, TLS, fuites | PCAP analysable |
| Besoin | Kit minimal |
|---|---|
| Surface externe | whois, dig, subfinder, httpx, nmap |
| TLS/headers | testssl.sh, sslscan, curl |
| Web DAST safe | ZAP baseline, Nikto, Burp manual |
| Endpoints cachés | ffuf + SecLists |
| Code Python | Bandit, Semgrep, pip-audit |
| Secrets | Gitleaks |
| Cloud AWS | Prowler |
| Containers | Trivy |
| Niveau | Exemples | Cadre |
|---|---|---|
| 0 - Passive | DNS, CT logs, Shodan | OK périmÚtre |
| 1 - Active lĂ©gĂšre | nmap version, testssl, headers | FenĂȘtre ou faible trafic |
| 2 - DAST passif | ZAP baseline, Burp browse | OK avec prudence |
| 3 - Active intrusive | ffuf large, ZAP full | Staging |
| 4 - Exploit | sqlmap data, Metasploit exploit | Lab/snapshot/accord explicite |
Commandes courtes, prĂȘtes Ă adapter Ă ton domaine, ton staging ou ton lab. Remplacer example.com par la cible autorisĂ©e.
# Recon
whois example.com
dig +short A example.com
subfinder -d example.com -all | httpx -silent -title -status-code
amass enum -passive -d example.com
# Scan
nmap -sV -sC -p- example.com
nmap -p 22,3306,6379,8810,8820 example.com
whatweb -a 3 https://example.com
wafw00f https://example.com
# TLS and headers
./testssl.sh example.com
sslscan example.com
curl -sI https://example.com | grep -iE 'strict-transport|content-security|x-frame|x-content|referrer|permissions'# Web passive and discovery
nikto -h https://example.com
ffuf -u https://example.com/FUZZ -w common.txt -mc 200,301,302,403
docker run --rm -t ghcr.io/zaproxy/zaproxy:stable zap-baseline.py -t https://example.com
# Code and dependencies
bandit -r ./app -ll
semgrep --config=auto ./app
pip-audit -r requirements.txt
gitleaks detect --source . -v
# Cloud and containers
prowler aws --services ec2 s3 iam
trivy fs .
trivy image your-registry/your-app:latest| Bloc | Risque |
|---|---|
| ZAP baseline | Passif |
| ffuf | Actif, contrÎler débit |
| Bandit/Semgrep | Non intrusif |
| Prowler | Read-only si credentials adaptés |
# Staging only examples
sqlmap -r request.txt --batch --risk=1 --level=1 --current-db
hydra -l testuser -P small_test_wordlist.txt ssh://staging.example.com -t 2 -W 5
docker run --rm -t -v $(pwd):/zap/wrk/:rw ghcr.io/zaproxy/zaproxy:stable zap-full-scan.py -t https://staging.example.com -r zap_full.html