Reporting Pentest.
Cybersécurité / Développement PHP & SQL1. Contexte du Projet
Dans le cadre d'un module sur la Cybersécurité, j'ai conçu et développé une application web de gestion et de reporting d'audits de sécurité (Pentest).
La problématique :
Un auditeur a besoin de centraliser les informations récoltées lors de ses scans (Nmap, Nessus) et de ses tests d'intrusion. L'outil doit permettre d'enregistrer des parcs informatiques (Postes, IP, VLAN) et d'associer à chaque machine des vulnérabilités spécifiques tout en garantissant la confidentialité des données.
L'objectif technique :
Créer une interface robuste capable de gérer des relations complexes en base de données et, surtout, d'implémenter des mécanismes de sécurité contre les attaques web classiques (Injections SQL, XSS).
2. Travail Fourni
Réalisations clés :
- Sécurisation de l'accès (
login.php) : Mise en place d'un système d'authentification avec hachage de mots de passe et requêtes préparées pour contrer les injections SQL. - Gestion d'Infrastructure (
poste.php) : Création d'un inventaire dynamique permettant d'ajouter des machines, de définir leurs passerelles et leurs rôles dans le réseau. - Synthèse des Failles (
rapport.php) : Développement d'un algorithme générant un rapport automatique via des jointures SQL complexes entre les tables "Vulnerabilités" et "Postes".
Sécurisation du Login login.php
Prévention des injections SQL via les requêtes préparées PDO. (Cliquer pour dérouler)
// Connexion sécurisée à la base de données
$query = $db->prepare("SELECT * FROM utilisateurs WHERE login = :user");
$query->execute([':user' => $_POST['username']]);
$user = $query->fetch();
if ($user && password_verify($_POST['password'], $user['password'])) {
// Démarrage de la session sécurisée
$_SESSION['auth'] = true;
header('Location: admin.php');
} else {
$error = "Identifiants invalides.";
}
prepare() sépare les données de la structure de la requête, rendant toute tentative d'injection SQL impossible.
Génération du Rapport rapport.php
Jointures SQL pour lier les vulnérabilités aux machines auditées. (Cliquer pour dérouler)
-- Requête pour extraire les failles critiques par poste
SELECT p.nom_poste, p.ip_address, v.nom_faille, v.criticite
FROM postes p
INNER JOIN vuln_assoc v ON p.id_poste = v.id_poste
WHERE v.criticite = 'Haute'
ORDER BY p.vlan_id ASC;
3. Difficultés Rencontrées
1. Intégrité des données :
La gestion des clés étrangères entre les tables (Postes, VLAN, Utilisateurs) a nécessité une réflexion approfondie en amont pour éviter toute perte de données ou orphelins lors de la suppression d'un élément.
2. Sécurisation Backend :
Il a fallu s'assurer que même si une faille XSS était tentée dans les formulaires d'ajout de postes, les données soient nettoyées (sanitization) avant d'être affichées dans le tableau de bord de l'administrateur.
4. Résultats
Le produit final :
L'application permet aujourd'hui à un auditeur de se connecter, de lister l'ensemble de ses cibles (postes de travail), d'enregistrer les résultats de ses scans et d'exporter une vue d'ensemble des risques.
Compétences acquises :
Ce projet a renforcé mes compétences en développement PHP sécurisé et en modélisation de bases de données relationnelles. Il m'a sensibilisé aux réflexes de défense en profondeur lors de la création d'applications manipulant des données sensibles.