Pregunta

Hola, tengo un par de preguntas sobre PHP exec() y passthru().

1)
Nunca usé exec() en PHP pero he visto que a veces se usa con imagemagick.Ahora tengo curiosidad: ¿cuáles son otros usos comunes en los que exec es bueno en una aplicación web?

2)
Hace unos 6 años, cuando comencé a jugar con PHP, realmente no sabía nada, solo cosas muy básicas y tenía un sitio que se vio comprometido y alguien configuró su propio archivo PHP que estaba usando la función passthru() para pasar un montón. de tráfico a través de mi sitio para descargar música o videos gratis y mi anfitrión me cobró un cargo de ancho de banda de $ 4,000.Seis años después, sé muchísimo más sobre cómo usar PHP, pero todavía no sé cómo me pasó esto antes.¿Cómo puede alguien agregar un archivo a mi servidor mediante un código incorrecto?

¿Fue útil?

Solución

1] Exec () es realmente útil cuando:

A) desea ejecutar un programa / utilidad en el servidor que PHP no tiene un equivalente de comandos para. Por ejemplo ffmpeg es la utilidad común dirigido a través de una llamada exec (para todo tipo de conversión de medios).

B) Ejecución de otro proceso - que se puede bloquear o NO bloquear el - que es muy potente. A veces se Qant un pcnt_fork sin embargo, o similares, junto con los argumentos correctos para CL no bloqueante.

C) Otro ejemplo es cuando tengo para procesar XSLT 2,0 - tengo que exec () un pequeño servicio java He corriendo para manejar las transformaciones. Muy útil. PHP no soporta XSLT 2.0 transformaciones.

2] comino que es una pena. Bueno, un montón de maneras. Hay una familia de vulnerabilidad denominada "archivos remoto incluye vulns", que básicamente permiten que un atacante incluyen fuente arbitraria y de ejecutarlo en su servidor. Echar un vistazo a: http://lwn.net/Articles/203904/

Además, se mencionó anteriormente, decir que estás haciendo algo así como (muy simplificado):

exec("someUnixUtility -f $_GET['arg1']"); 

Bueno, imagina que el atacante hace, url.come arg1 = "bla; rm-rf /", su código será básicamente se reducen a:?

exec("someUnixUtility -f blah; rm -rf /");

Lo que en Unix, se separan los comandos w / la; Así que sí -. Eso podría ser mucho daño

Lo mismo con una carga de archivos, imagine se tira de los últimos cuatro caracteres (.ext), para encontrar la extensión. Pues bien, ¿qué pasa con algo como esto "exploit.php.gif", entonces se tira de la extensión, por lo que tiene exploit.php y moverlo a su / IMG / carpeta / usuarios. Bueno, todo lo que el atacante tiene que hacer ahora es examinar a los usuarios / IMG / exploit.php y pueden ejecutar cualquier código que quieren. Usted ha sido propiedad en ese punto.

Otros consejos

  1. Usar exec o cuando desee ejecutar un programa diferente.

  2. El documentación para passthru dice:

Advertencia

Cuando permita que los datos proporcionados por el usuario se pasen a esta función, utilice escapeshellarg() o escapeshellcmd() para garantizar que los usuarios no puedan engañar al sistema para que ejecute comandos arbitrarios.

Probablemente alguien encontró un agujero de seguridad en su script que le permitió ejecutar comandos arbitrarios.Utilice las funciones proporcionadas para desinfectar sus entradas la próxima vez.Recuerde, nada enviado por el cliente puede alguna vez se Confiable.

exec() le permite utilizar el código compilado que se encuentra en el servidor, lo que iría más rápido que php, lo que se interpreta.

Así que si usted tiene una gran cantidad de procesamiento que necesita ser hecho rápidamente, exec() podría ser útil.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top