disable_functions bypass - dl function

Aprende hacking en AWS de cero a héroe con htARTE (Experto en Equipos Rojos de AWS de HackTricks)!

Otras formas de apoyar a HackTricks:

Nota importante:

dl es una función de PHP que se puede utilizar para cargar extensiones de PHP. Si la función no está deshabilitada, se podría abusar de ella para burlar disable_functions y ejecutar comandos arbitrarios. Sin embargo, tiene algunas limitaciones estrictas:

  • La función dl debe estar presente en el entorno y no deshabilitada

  • La extensión de PHP debe compilarse con la misma versión principal (versión de API de PHP) que está utilizando el servidor (puedes ver esta información en la salida de phpinfo)

  • La extensión de PHP debe estar ubicada en el directorio que está definido por la directiva extension_dir (puedes verlo en la salida de phpinfo). Es muy improbable que un atacante que intente abusar del servidor tenga acceso de escritura sobre este directorio, por lo que este requisito probablemente te impedirá abusar de esta técnica).

Si cumples con estos requisitos, continúa leyendo la publicación https://antichat.com/threads/70763/ para aprender cómo burlar disable_functions. Aquí tienes un resumen:

La función dl se utiliza para cargar extensiones de PHP dinámicamente durante la ejecución del script. Las extensiones de PHP, generalmente escritas en C/C++, mejoran la funcionalidad de PHP. El atacante, al darse cuenta de que la función dl no está deshabilitada, decide crear una extensión de PHP personalizada para ejecutar comandos del sistema.

Pasos realizados por el atacante:

  1. Identificación de la versión de PHP:

  • El atacante determina la versión de PHP utilizando un script (<?php echo 'La versión de PHP es '.PHP_VERSION; ?>).

  1. Adquisición de la fuente de PHP:

  • Descarga la fuente de PHP desde el sitio web oficial de PHP o el archivo si la versión es antigua.

  1. Configuración local de PHP:

  • Extrae e instala la versión específica de PHP en su sistema.

  1. Creación de la extensión:

Notas para compilar la extensión personalizada:

  1. ZEND_MODULE_API_NO:

  • El ZEND_MODULE_API_NO en bypass.c debe coincidir con la compilación actual de la Extensión Zend, que se puede obtener con:

php -i | grep "Zend Extension Build" |awk -F"API4" '{print $2}' | awk -F"," '{print $1}'
  1. Modificación de PHP_FUNCTION:

  • Para versiones recientes de PHP (5, 7, 8), PHP_FUNCTION(bypass_exec) puede necesitar ajustes. El fragmento de código proporcionado detalla esta modificación.

Archivos de la extensión personalizada:

  • bypass.c:

  • Implementa la funcionalidad principal de la extensión personalizada.

  • php_bypass.h:

  • Archivo de encabezado que define las propiedades de la extensión.

  • config.m4:

  • Utilizado por phpize para configurar el entorno de compilación de la extensión personalizada.

Compilación de la extensión:

  1. Comandos de compilación:

  • Utiliza phpize, ./configure y make para compilar la extensión.

  • El archivo resultante bypass.so se encuentra en el subdirectorio de módulos.

  1. Limpieza:

  • Ejecuta make clean y phpize --clean después de la compilación.

Subida y ejecución en el host víctima:

  1. Compatibilidad de versiones:

  • Asegura que las versiones de la API de PHP coincidan entre el sistema del atacante y el de la víctima.

  1. Carga de la extensión:

  • Utiliza la función dl, eludiendo las restricciones mediante el uso de rutas relativas o un script para automatizar el proceso.

  1. Ejecución del script:

  • El atacante sube bypass.so y un script de PHP al servidor de la víctima.

  • El script utiliza la función dl_local para cargar dinámicamente bypass.so y luego llama a bypass_exec con un comando pasado a través del parámetro de consulta cmd.

Ejecución de comandos:

  • El atacante ahora puede ejecutar comandos accediendo a: http://www.ejemplo.com/script.php?cmd=<comando>

Esta detallada guía describe el proceso de creación e implementación de una extensión de PHP para ejecutar comandos del sistema, explotando la función dl, la cual idealmente debería estar deshabilitada para prevenir brechas de seguridad de este tipo.

Aprende hacking en AWS de cero a héroe con htARTE (Experto en Equipos Rojos de AWS de HackTricks)!

Otras formas de apoyar a HackTricks:

Última actualización