PHP - RCE abusing object creation: new $_GET["a"]($_GET["b"])
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Esto es básicamente un resumen de https://swarm.ptsecurity.com/exploiting-arbitrary-object-instantiations/
La creación de nuevos objetos arbitrarios, como new $_GET["a"]($_GET["a"])
, puede llevar a la Ejecución Remota de Código (RCE), como se detalla en un writeup. Este documento destaca varias estrategias para lograr RCE.
La sintaxis new $a($b)
se utiliza para instanciar un objeto donde $a
representa el nombre de la clase y $b
es el primer argumento pasado al constructor. Estas variables pueden provenir de entradas de usuario como GET/POST, donde pueden ser cadenas o arreglos, o de JSON, donde pueden presentarse como otros tipos.
Considera el fragmento de código a continuación:
En este caso, establecer $a
en App
o App2
y $b
en un comando del sistema (por ejemplo, uname -a
) resulta en la ejecución de ese comando.
Las funciones de autoloading pueden ser explotadas si no hay tales clases accesibles directamente. Estas funciones cargan automáticamente clases desde archivos cuando se necesitan y se definen utilizando spl_autoload_register
o __autoload
:
El comportamiento de la carga automática varía con las versiones de PHP, ofreciendo diferentes posibilidades de RCE.
Al carecer de clases personalizadas o cargadores automáticos, las clases incorporadas de PHP pueden ser suficientes para RCE. El número de estas clases varía entre 100 y 200, según la versión de PHP y las extensiones. Se pueden listar utilizando get_declared_classes()
.
Los constructores de interés se pueden identificar a través de la API de reflexión, como se muestra en el siguiente ejemplo y el enlace https://3v4l.org/2JEGF.
RCE a través de métodos específicos incluye:
La clase SplFileObject
permite SSRF a través de su constructor, permitiendo conexiones a cualquier URL:
SSRF puede llevar a ataques de deserialización en versiones de PHP anteriores a 8.0 utilizando el protocolo Phar.
El constructor de la clase PDO permite conexiones a bases de datos a través de cadenas DSN, lo que potencialmente habilita la creación de archivos u otras interacciones:
Las versiones de PHP hasta 5.3.22 y 5.4.12 eran susceptibles a ataques XXE a través de los constructores SoapClient
y SimpleXMLElement
, dependiendo de la versión de libxml2.
En el análisis de las dependencias de un proyecto, se descubrió que Imagick podría ser aprovechado para ejecución de comandos al instanciar nuevos objetos. Esto presenta una oportunidad para explotar vulnerabilidades.
Se identificó la capacidad del analizador VID de escribir contenido en cualquier ruta especificada en el sistema de archivos. Esto podría llevar a la colocación de un shell PHP en un directorio accesible por la web, logrando Ejecución Remota de Código (RCE).
Se observa que PHP almacena temporalmente los archivos subidos en /tmp/phpXXXXXX
. El analizador VID en Imagick, utilizando el protocolo msl, puede manejar comodines en las rutas de archivos, facilitando la transferencia del archivo temporal a una ubicación elegida. Este método ofrece un enfoque adicional para lograr escritura de archivos arbitrarios dentro del sistema de archivos.
Un método descrito en el escrito original implica subir archivos que provocan un fallo en el servidor antes de su eliminación. Al forzar el nombre del archivo temporal, se vuelve posible que Imagick ejecute código PHP arbitrario. Sin embargo, se encontró que esta técnica solo era efectiva en una versión desactualizada de ImageMagick.
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)