Ejecutar comandos shell mediante php
Autor: DeiMoS | Archivado en: Linux, PHP el día 10/Sep/2006
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:
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.













Hummmm… qué peligro tienes, Fernando….
¡Estupenda información!
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. :)
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
Super bueno tu aporte!!!
Con esto ya tengo muchas herramientas para explorar y aplicar!
Gracias!
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.
Que peligro tiene esa función, ejecución de comandos en el servidor.
¿Acepta la función rm? :D
Salu2
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.
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.
Excelente! Ya vere con que lo puedo fusionar. =)
Juvit, posiblemente tengas el PHP_SAFE_MODE ON con lo cual no puedas usar el la funcion exec();
Como compruebo si el PHP_SAFE_MODE esta ON por tu ayuda gracias.
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.
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.
David, posiblemente no le estes pasando el parametro por navegador. Has escrito esto? exec.php?cmd=ls
Existen cantidad de servers que no te permiten hacer telnet… aunque PHP no creo que corra con el usuario “apache” o “www-data” creo más bien que corra con tu user.
Hola Amigo, esta exelente tu reportaje, ya lo ejecute y funciona OK, puedo ejecutar comando simples como ls , cp touch … , pero solo dentro del directorio donde esta mi funcio .php.
Existe la forma de ejecutar comandos que afecten directorios que esten fuera de donde reside mi .php?
Puedo ejecutar un passwd para cambiar la contraseña a algunos usuarios?.
Saludos.
enrique.corleone@gmail.com
PD. Agradecere me copies la respuesta a mi correo.
Gracias