Ejecutar comandos shell mediante php
Más de una vez hemos deseado ejecutar algún comando de la shell en unix en nuestra cuenta de hospedaje, pero desafortunadamente nuestro proveedor no nos ha habiblitado ningún acceso ssh. Es posible ejecutar comandos shell con el siguiente código:
Creamos un fichero llamado exec.php con el siguiente contenido:
<?php
exec($_GET[’cmd’],$salida);
foreach($salida as $line) { echo "$line<br>"; }
?>
Para ejecutar cualquier comando lo haremos de la siguiente forma:
http://tudominio/exec.php?cmd=ls
y obtendremos la lista de ficheros en el directorio actual.
Una buena aplicación puede ser hacer una copia de seguridad de nuestra web en un .tar.gz y descargarla vía web.
http://tudominio/exec.php?cmd=tar -cvzpf copia.tar.gz *
Con esto obtendremos un fichero comprimido llamado copia.tar.gz, conteniendo toda la copia de seguridad de nuestra web el cual podremos descargar sencillamente.
El resto es simplemente ejecutar comandos, rutas y demás
Ahora bien, tened cuidado donde lo subís por supuesto que esté protegido con contraseña para limitar el acceso sólo a nosotros mismos.

09.10.2006 a las 6:10 pm
Hummmm… qué peligro tienes, Fernando….
¡Estupenda información!
09.10.2006 a las 7:54 pm
Buen truco, me lo apunto, que quizás me venga bien para algún que otro cacharreo en el que ando rompiéndome la cabeza.
10.27.2006 a las 11:55 pm
Quisiera saber por que ejecutas cmd, esa es la manera de llamar la shell en windows, como llamaria la shell en un linux o unix.
Gracias
11.03.2006 a las 6:00 pm
Super bueno tu aporte!!!
Con esto ya tengo muchas herramientas para explorar y aplicar!
Gracias!
11.06.2006 a las 8:07 pm
Damian, ejecuto “cmd” porque en el código php lo uso como variable y se lo paso por url.
Este código sólamente es válido para un sistema unix.
03.19.2007 a las 2:14 pm
Que peligro tiene esa función, ejecución de comandos en el servidor.
¿Acepta la función rm?
Salu2
03.23.2007 a las 10:14 am
Claro, acepta cualquier comando por consola, otra cosa es que por permisos del servidor nos deje ejecutarlo o no. Date cuenta que al acceder vía web el usuario con el que ejecutamos dichos comandos suele ser “apache” o “www-data”: un usuario generalmente con pocos permisos, pero los suficientes para borrar una carpeta que le hayamos asignado permisos de escritura, ej: fotos de una galería gestionable vía web.
05.16.2007 a las 11:00 pm
Hola, he probado el codigo que publicaste, pero no funciona en mi web, ni me manda nada y no se porque. Si pudieras ayudarme, te lo agradecere.
Saludos, Juvit.
06.20.2007 a las 7:47 am
Excelente! Ya vere con que lo puedo fusionar. =)
06.20.2007 a las 3:52 pm
Juvit, posiblemente tengas el PHP_SAFE_MODE ON con lo cual no puedas usar el la funcion exec();
08.27.2007 a las 1:20 am
Como compruebo si el PHP_SAFE_MODE esta ON por tu ayuda gracias.
08.27.2007 a las 6:27 pm
Simplemente subes al servidor un fichero llamado info.php (por ejemplo) con el siguiente contenido: ” < ?php phpinfo(); ?> ”
Visualizas ese fichero y saldrá toda la información del componente php de tu servidor.
08.28.2007 a las 4:46 pm
YA comprobe con el archivo que dices y aparece off pero igual no me funciona que pasara sale:
Warning: exec() [function.exec]: Cannot execute a blank command in /home/archivo/public_html/exec.php on line 2
Warning: Invalid argument supplied for foreach() in /home/archivo/public_html/exec.php on line 3
Por su ayuda gracias.
08.28.2007 a las 5:15 pm
David, posiblemente no le estes pasando el parametro por navegador. Has escrito esto? exec.php?cmd=ls