Salta al contenuto principale

Laboratorio di Penetretion Test

Inviato da enzo de simone il
penetration test

Un penetration test (o pen test, in italiano test di penetrazione) è una simulazione controllata di un attacco informatico condotta per identificare e valutare le vulnerabilità di un sistema informatico, come server, reti, applicazioni web, dispositivi o intere infrastrutture IT.

 


 

Cosa è un penetration test

Un penetration test ha l’obiettivo di:

  • Individuare falle di sicurezza prima che lo facciano veri attaccanti.

  • Valutare l’efficacia delle contromisure di sicurezza.

  • Simulare comportamenti reali di attacco per capire fino a dove può arrivare un attaccante.

  • Fornire un report dettagliato con le vulnerabilità scoperte e le raccomandazioni per mitigarle.


Come si esegue un penetration test

1. Pianificazione e Scoping

  • Si definisce cosa testare: rete, web app, server, dispositivi mobili, ecc.

  • Si stabiliscono limiti, orari, autorizzazioni e modalità (white-box, black-box, grey-box).

White-box = si hanno informazioni interne
Black-box = si simula un attaccante esterno senza informazioni
Grey-box = si ha accesso parziale a informazioni/documentazione


2. Raccolta delle informazioni (Reconnaissance)

  • Scansione DNS, whois, informazioni pubbliche.

  • Scansione porte e servizi (con strumenti come nmap).

  • Ricerca di dipendenze, software utilizzati, versioni, configurazioni errate.


3. Scansione e analisi delle vulnerabilità

  • Uso di scanner automatici (es. OpenVAS, Nessus, Nikto, Wapiti) per identificare potenziali vulnerabilità.

  • Analisi manuale dei risultati per evitare falsi positivi.


4. Sfruttamento (Exploitation)

  • Tentativi controllati di sfruttare le vulnerabilità trovate (es. injection SQL, XSS, accessi non autorizzati).

  • Uso di strumenti come Metasploit, sqlmap, Burp Suite, Hydra, John the Ripper.


5. Post-exploitation

  • Analisi di cosa può fare un attaccante una volta entrato (accesso a dati sensibili, movimenti laterali, escalation di privilegi).

  • Verifica dell’impatto reale delle vulnerabilità.


6. Reporting

  • Creazione di un documento dettagliato con:

    • Vulnerabilità identificate (con livelli di gravità).

    • Modalità di attacco usate.

    • Rischi per il sistema.

    • Suggerimenti per la mitigazione o correzione.


Strumenti comuni

  • Nmap – scansione di rete

  • Metasploit – framework per exploit

  • Burp Suite – test web

  • Nikto – scanner web

  • sqlmap – injection SQL

  • Hydra – brute force

  • John the Ripper – cracking password


Penetration test vs Vulnerability Assessment

Vulnerability AssessmentPenetration Test
AutomatizzatoManuale + tool
Identifica vulnerabilitàLe sfrutta
Non compromette sistemiSimula un attacco reale
RapidoPiù lungo e complesso

Esempio pratico simulato di penetration test su un'applicazione web

Immaginiamo una semplice web app in PHP con un form di login che potrebbe essere vulnerabile a SQL Injection.

URL: http://ilmiosito-vulnerabile.local/login.php

Fase 1: Ricognizione (Recon)

Apriamo il sito e osserviamo:

  • C'è un form di login con username e password

  • Il codice HTML mostra:

<form action="login.php" method="POST">
 <input type="text" name="username">
 <input type="password" name="password">
 <input type="submit" value="Login">
</form>
 

Fase 2: Test per SQL Injection

Inseriamo nel campo username:

admin' OR '1'='1
 

E nel campo password:

qualsiasi_valore
 

Se il sito ci fa entrare comunque, è vulnerabile a SQL Injection. Probabilmente il backend ha qualcosa del genere:

$query = "SELECT * FROM users WHERE username = '$username' AND password = '$password'";
 

Con admin' OR '1'='1, la query diventa:

SELECT * FROM users WHERE username = 'admin' OR '1'='1' AND password = 'qualsiasi_valore';
 

Risultato: bypass dell'autenticazione.

Fase 3: Uso di sqlmap (strumento automatico)

Se vogliamo testare automaticamente:

sqlmap -u "http://vulnerable-website.local/login.php" --data "username=admin&password=123" --level=2 --risk=2 --batch
 

Questo analizza i parametri e cerca vulnerabilità SQL.

Fase 4: Reporting

Il report finale potrebbe indicare:

VulnerabilitàGravitàDescrizioneFix suggerito
SQL InjectionAltaIl login è vulnerabile a SQL injectionUsare query preparate (PDO, mysqli)
Autenticazione deboleMediaNessun controllo su tentativi di loginIntrodurre rate limiting e CAPTCHA

💡 Fix consigliato (in PHP con PDO)

$stmt = $pdo->prepare("SELECT * FROM users WHERE username = :username AND password = :password");
$stmt->execute([
 'username' => $_POST['username'],
 'password' => $_POST['password']
]);
 


TESTIAMO SU UNO SPAZIO SICURO

Obiettivo: creare un laboratorio di test locale

Strumenti consigliati:

  1. Sistema operativo: Debian, Kali Linux o qualsiasi distro Linux (tu usi Debian 12 👍).

  2. Macchine virtuali: con VirtualBox o QEMU/KVM.

  3. Ambienti vulnerabili preconfezionati:


Configurazione passo-passo con DVWA su Debian

1. Installa i pacchetti necessari

sudo apt update
sudo apt install apache2 php php-mysqli mariadb-server git

2. Clona DVWA

cd /var/www/html
sudo git clone https://github.com/digininja/DVWA.git
sudo chown -R www-data:www-data DVWA
 

3. Configura il database

sudo mysql -u root
 

Poi nel prompt MySQL:

CREATE DATABASE dvwa;
CREATE USER 'dvwauser'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON dvwa.* TO 'dvwauser'@'localhost';
FLUSH PRIVILEGES;
EXIT;
 

4. Configura DVWA

cd /var/www/html/DVWA/config
sudo cp config.inc.php.dist config.inc.php
sudo nano config.inc.php
 

Modifica così:

$_DVWA[ 'db_user' ] = 'dvwauser';
$_DVWA[ 'db_password' ] = 'password';
 

5. Avvia Apache e MariaDB

sudo systemctl start apache2
sudo systemctl enable apache2
sudo systemctl start mariadb
sudo systemctl enable mariadb
 

6. Accedi via browser

http://localhost/DVWA
 

Login di default:

  • Username: admin

  • Password: password

Poi clicca su "Create / Reset Database".


IMPORTANTISSIMO

Consigli per la sicurezza

  • Non esporre queste app su internet! Usale solo in locale o su rete isolata.

  • Puoi usare una VM dedicata oppure un container Docker.

  • Blocca le VM sulla rete NAT o Host-Only.

  • Se vuoi andare oltre, isola il laboratorio con VirtualBox Internal Network o bridge con firewall.


Ora sei pronto per testare

Puoi iniziare a usare strumenti come:

  • Burp Suite per test web manuali

  • sqlmap per SQL injection

  • Nikto per scansioni web

  • wpscan per WordPress

  • hydra per brute force su login
     

Rubrica