Encuentra usuarios de Twitter en tu ciudad con LocaFollow

votarEjecutar comandos shell mediante php

Autor: DeiMoS | Archivado en: Linux, PHP el día 10/Sep/2006
Deprecated: Function eregi() is deprecated in /home/bitacora/public_html/wp-content/plugins/wp-codebox/main.php on line 171

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:

1
2
3
4
<?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.


  • Digg
  • del.icio.us
  • Facebook
  • Google
  • LinkedIn
  • Meneame
  • MySpace
  • Technorati
  • TwitThis
Posts Relacionados

18 Comentarios on “Ejecutar comandos shell mediante php”

  1. #1 jgarcía dijo 6:10 pm el Septiembre 10th, 2006:

    Hummmm… qué peligro tienes, Fernando….

    ¡Estupenda información!


  2. #2 yuri dijo 7:54 pm el Septiembre 10th, 2006:

    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. :)


  3. #3 Damian dijo 11:55 pm el Octubre 27th, 2006:

    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


  4. #4 Mauro dijo 6:00 pm el Noviembre 3rd, 2006:

    Super bueno tu aporte!!!

    Con esto ya tengo muchas herramientas para explorar y aplicar!
    Gracias!


  5. #5 DeiMoS dijo 8:07 pm el Noviembre 6th, 2006:

    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.


  6. #6 Ivo Sandoval dijo 2:14 pm el Marzo 19th, 2007:

    Que peligro tiene esa función, ejecución de comandos en el servidor.
    ¿Acepta la función rm? :D

    Salu2


  7. #7 DeiMoS dijo 10:14 am el Marzo 23rd, 2007:

    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.


  8. #8 Juvit dijo 11:00 pm el Mayo 16th, 2007:

    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.


  9. #9 Kodam dijo 7:47 am el Junio 20th, 2007:

    Excelente! Ya vere con que lo puedo fusionar. =)


  10. #10 DeiMoS dijo 3:52 pm el Junio 20th, 2007:

    Juvit, posiblemente tengas el PHP_SAFE_MODE ON con lo cual no puedas usar el la funcion exec();


  11. #11 David dijo 1:20 am el Agosto 27th, 2007:

    Como compruebo si el PHP_SAFE_MODE esta ON por tu ayuda gracias.


  12. #12 DeiMoS dijo 6:27 pm el Agosto 27th, 2007:

    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.


  13. #13 David dijo 4:46 pm el Agosto 28th, 2007:

    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.


  14. #14 DeiMoS dijo 5:15 pm el Agosto 28th, 2007:

    David, posiblemente no le estes pasando el parametro por navegador. Has escrito esto? exec.php?cmd=ls


  15. #15 JuegosEnMovil.com dijo 11:42 am el Junio 8th, 2008:

    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.


  16. #16 ASLAN dijo 4:56 pm el Octubre 16th, 2008:

    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


  17. #17 Xabi dijo 9:51 am el Mayo 11th, 2010:

    Si te sale este mensaje:

    Warning: exec() [function.exec]: Cannot execute a blank command in /home/archivo/public_html/exec.php on line 2

    es porque no pasa el argumento cmd a la función. Puede ser debido a dos razones:

    1) Ejecutas el script sin argumentos. Domo dice Deimos, asegúrate de que pones el ?cmd=comando
    2) Tienes mal el código. Si copiaste y pegaste el código, sin teclear nada, ten cuidado con las comillas de GET['cmd'], porque puede que no sean las mismas y sea ese el error.


  18. #18 pedro dijo 11:17 pm el Noviembre 15th, 2010:

    saludos…
    tengo una duda se puede ejecutar el comando cron? para programar tareas desde php



Deja un comentario.