Share
## https://sploitus.com/exploit?id=69E4FC48-DFD3-584F-96FE-7A3F838D4440
# Plateforme de Scan & Analyse de Vulnérabilités
Vuln_scanner est une application web complÚte pour le scan et l'analyse automatique de vulnérabilités web, conçue pour développer mes compétences en cybersécurité offensive et défensive, ainsi qu'en DevSecOps.
## Fonctionnalités
- **Scan automatique de vulnérabilités** : Détection de multiples types de vulnérabilités
- **Rapports détaillés** : Génération de rapports HTML avec scores CVSS et statistiques
- **Interface moderne** : Frontend React avec une UX soignée
- **API RESTful** : Backend FastAPI pour l'intégration facile
- **Base de données** : Stockage des scans et vulnérabilités dans SQLite
- **Intégration OWASP ZAP** : Scans actifs avancés (Spider + Active Scan)
## Vulnérabilités détectées
- **Ports ouverts** : Détection des ports ouverts via Nmap (avec contextualisation des risques)
- **Headers de sécurité manquants** : Vérification des headers HTTP de sécurité (CSP, HSTS, X-Frame-Options, etc.)
- **XSS (Cross-Site Scripting)** : Détection de vulnérabilités XSS dans les formulaires et champs de recherche
- **SQL Injection** : Détection de vulnérabilités SQLi dans les formulaires
- **Versions logicielles vulnérables** : Identification des versions obsolÚtes via Nikto
- **Vulnérabilités ZAP** : Détection avancée via OWASP ZAP (Spider + Active Scan)
## Stack technique
### Backend
- **Python 3.11+**
- **FastAPI** : Framework web moderne et performant
- **SQLAlchemy** : ORM pour la gestion de base de données
- **SQLite** : Base de données légÚre
### Outils de scan
- **Nmap** : Scan de ports et services
- **Nikto** : Scanner de vulnérabilités web
- **OWASP ZAP** : Scanner de sécurité web avancé (optionnel)
- **Scanners personnalisés** : XSS, SQLi, Headers, Versions
### Frontend
- **React 18** : Framework JavaScript moderne
- **Axios** : Client HTTP pour les appels API
- **CSS moderne** : Interface responsive et élégante
### Infrastructure
- **Docker** : Containerisation de l'application
- **Docker Compose** : Orchestration multi-conteneurs (API + Frontend + ZAP)
## đ Structure du projet
```
vuln_scanner/
âââ api/ # Backend FastAPI
â âââ __init__.py
â âââ main.py # Point d'entrĂ©e de l'API
â âââ database.py # ModĂšles et configuration DB
âââ scanners/ # Modules de scan
â âââ __init__.py
â âââ scanner_manager.py # Gestionnaire principal
â âââ nmap_scanner.py # Scanner Nmap
â âââ nikto_scanner.py # Scanner Nikto
â âââ headers_scanner.py # Scanner des headers
â âââ xss_scanner.py # Scanner XSS
â âââ sqli_scanner.py # Scanner SQLi
â âââ zap_scanner.py # Scanner OWASP ZAP
â âââ version_scanner.py # Scanner de versions
âââ reports/ # GĂ©nĂ©ration de rapports
â âââ __init__.py
â âââ report_generator.py # GĂ©nĂ©rateur de rapports HTML
âââ frontend/ # Application React
â âââ public/
â âââ src/
â â âââ components/ # Composants React
â â âââ App.js
â â âââ index.js
â âââ package.json
â âââ Dockerfile
âââ Dockerfile # Dockerfile pour l'API
âââ docker-compose.yml # Configuration Docker Compose
âââ requirements.txt # DĂ©pendances Python
âââ init_db.py # Script d'initialisation de la DB
âââ README.md
```
## Installation et démarrage
### Prérequis
- Python 3.11+
- Node.js 18+
- Docker et Docker Compose (optionnel mais recommandé)
- Nmap installé sur le systÚme
- Nikto installé (optionnel, le scan fonctionnera sans)
- OWASP ZAP (optionnel, intégré dans Docker Compose)
### Option 1 : Avec Docker (Recommandé)
```bash
# Cloner le repository
git clone
cd vuln_scanner
# Construire et lancer tous les services (API + Frontend + ZAP)
docker-compose up --build
# L'application sera accessible sur:
# - Frontend: http://localhost:3000
# - API: http://localhost:8000
# - Docs API: http://localhost:8000/docs
# - ZAP: http://localhost:8080
```
### Option 2 : Installation manuelle
1. **Cloner le repository**
```bash
git clone
cd vuln_scanner
```
2. **Installer les dépendances Python**
```bash
python3 -m venv venv
source venv/bin/activate # Sur Windows: venv\Scripts\activate
pip install -r requirements.txt
```
3. **Installer les dépendances frontend**
```bash
cd frontend
npm install
cd ..
```
4. **Installer les outils systĂšme**
```bash
# Sur Ubuntu/Debian
sudo apt-get update
sudo apt-get install nmap git perl libwww-perl libnet-ssleay-perl
# Installer Nikto depuis GitHub (optionnel)
git clone --depth 1 https://github.com/sullo/nikto.git /opt/nikto
chmod +x /opt/nikto/program/nikto.pl
ln -sf /opt/nikto/program/nikto.pl /usr/local/bin/nikto
# Sur macOS
brew install nmap
```
5. **Initialiser la base de données**
```bash
python3 init_db.py
```
6. **Démarrer l'API backend** (Terminal 1)
```bash
uvicorn api.main:app --reload
```
L'API sera accessible sur `http://localhost:8000`
7. **Démarrer le frontend** (Terminal 2)
```bash
cd frontend
npm start
```
Le frontend sera accessible sur `http://localhost:3000`
**Important** : Le backend doit ĂȘtre dĂ©marrĂ© AVANT le frontend pour Ă©viter les erreurs de connexion.
### Configuration OWASP ZAP (Optionnel)
ZAP est automatiquement démarré avec Docker Compose. Pour une installation manuelle :
```bash
# Avec Docker
docker run -d -p 8080:8080 ghcr.io/zaproxy/zaproxy:stable \
zap.sh -daemon -host 0.0.0.0 -port 8080 -config api.disablekey=true
# Vérifier que ZAP est accessible
curl http://localhost:8080/JSON/core/view/version
```
Pour utiliser une URL différente, définissez la variable d'environnement :
```bash
export ZAP_PROXY_URL=http://localhost:8080
export ZAP_API_KEY=votre_cle_api # Optionnel si api.disablekey=true
```
## Utilisation
1. **Créer un scan**
- Ouvrir http://localhost:3000 dans votre navigateur
- Entrer l'URL cible dans le formulaire
- Choisir le type de scan (Rapide ou Complet)
- Cliquer sur "Lancer le scan"
2. **Consulter les résultats**
- La liste des scans s'affiche automatiquement
- Cliquer sur un scan pour voir les détails
- Les vulnĂ©rabilitĂ©s sont classĂ©es par sĂ©vĂ©ritĂ© (Critique, ĂlevĂ©, Moyen, Faible, Information)
3. **Générer un rapport HTML**
- Dans les détails d'un scan, cliquer sur "Voir le rapport HTML"
- Le rapport contient toutes les vulnérabilités avec recommandations et scores CVSS
## đ Types de scan
- **Rapide (quick)** : Scan des headers de sécurité et ports ouverts
- **Complet (full)** : Tous les scanners (XSS, SQLi, Headers, Ports, Versions, Nikto, ZAP)
## đ API Endpoints
### `GET /`
Informations sur l'API
### `POST /api/scans`
Créer un nouveau scan
```json
{
"target_url": "https://example.com",
"scan_type": "full"
}
```
### `GET /api/scans`
Liste tous les scans
### `GET /api/scans/{scan_id}`
Détails d'un scan avec ses vulnérabilités
### `GET /api/scans/{scan_id}/report`
Rapport HTML d'un scan
## đ§Ș Tests
Pour tester l'application, vous pouvez utiliser des cibles de test comme :
- http://testphp.vulnweb.com
- http://testfire.net
- Votre propre application de test
â ïž **Important** : Cette application est conçue pour des tests de sĂ©curitĂ© autorisĂ©s uniquement. Ne l'utilisez que sur des systĂšmes pour lesquels vous avez l'autorisation explicite.
## Dépannage
### Erreur : ERR_CONNECTION_REFUSED / ERR_SOCKET_NOT_CONNECTED
Le frontend ne peut pas se connecter au backend. Solutions :
1. **Vérifier que le backend est démarré**
- Avec Docker : `docker-compose up`
- Installation manuelle : `uvicorn api.main:app --reload`
2. **Vérifier que l'API répond**
- http://localhost:8000/ (informations de l'API)
- http://localhost:8000/docs (documentation Swagger)
- http://localhost:8000/api/scans (devrait retourner `[]`)
3. **Vérifier les ports**
- Backend : port **8000**
- Frontend : port **3000**
- ZAP : port **8080**
4. **Vérifier les logs**
```bash
# Avec Docker
docker-compose logs api
# Installation manuelle
# Les logs s'affichent dans le terminal oĂč uvicorn tourne
```
### Erreur : ModuleNotFoundError
```bash
pip install -r requirements.txt
```
### Erreur : Database locked
```bash
# Supprimer la base de données et la recréer
rm vuln_scanner.db
python3 init_db.py
```
### Erreur : Nmap not found
```bash
# Ubuntu/Debian
sudo apt-get install nmap
# macOS
brew install nmap
```
### Erreur : Port déjà utilisé
Changez le port dans `api/main.py` ou utilisez une variable d'environnement :
```bash
REACT_APP_API_URL=http://localhost:8001 npm start
```
### Le frontend affiche "API non disponible"
1. Vérifiez que le backend est bien démarré
2. Vérifiez que vous pouvez accéder à http://localhost:8000 dans votre navigateur
3. Vérifiez la console du navigateur pour les erreurs détaillées
4. Le frontend devrait automatiquement détecter quand l'API redevient disponible
## Notes importantes
- Les scans peuvent prendre plusieurs minutes selon le type choisi
- Nmap nécessite des privilÚges élevés pour certains scans (utiliser `sudo` si nécessaire)
- Nikto est optionnel mais recommandé pour des scans plus complets
- ZAP est optionnel : l'application fonctionne sans lui, mais les scans seront moins complets
- Les scans ZAP peuvent prendre plusieurs minutes selon la taille du site
- Les ports 80/443 sont classés en "Information" car ils sont normaux pour un serveur web
- Les vulnérabilités sont classées par sévérité avec scores CVSS
## Configuration
Les paramĂštres peuvent ĂȘtre modifiĂ©s dans :
- `api/database.py` : Configuration de la base de données
- `scanners/*.py` : ParamĂštres des scanners individuels
- `api/main.py` : Configuration de l'API
- `docker-compose.yml` : Configuration Docker (ports, variables d'environnement)
## Améliorations futures
- â
Intégration OWASP ZAP API (implémentée)
- Support de l'authentification
- Export PDF des rapports
- Planification de scans récurrents
- Dashboard avec statistiques
- Intégration CI/CD
- Support PostgreSQL en production
## Licence
Ce projet est rĂ©alisĂ© Ă titre personnel par Junior Koudogbo. Vous ĂȘtes libre de l'utiliser, le modifier et le distribuer selon vos besoins.
## Auteur
Junior Koudogbo
Projet réalisé dans le cadre d'un apprentissage personnel de la cybersécurité offensive et défensive, ainsi que du DevSecOps.
## Remerciements
- **OWASP** pour les outils et ressources de sécurité (ZAP, Top 10)
- **Nmap Project** pour l'outil de scan de ports
- **Nikto** pour le scanner de vulnérabilités web
- **FastAPI** et **React** pour les frameworks utilisés
- La communauté open source pour les ressources et documentations
## Contact
Pour toute question ou suggestion concernant ce projet, n'hésitez pas à ouvrir une issue sur le [dépÎt GitHub](https://github.com/junior-koudogbo/vuln_scanner).
**Note** : Ce projet est à des fins éducatives et de démonstration. Assurez-vous d'avoir l'autorisation appropriée avant d'effectuer des scans de sécurité sur des systÚmes qui ne vous appartiennent pas.