<summary><strong>Aprende hacking en AWS de cero a héroe con</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF**, consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sigue** a **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de github** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
En la situación donde puedes crear un nuevo objeto arbitrario como `new $_GET["a"]($_GET["a"])` podrías ser capaz de obtener RCE, y [**este writeup**](https://swarm.ptsecurity.com/exploiting-arbitrary-object-instantiations/) expone diferentes maneras de conseguir RCE.
En la construcción `new $a($b)`, la **variable `$a` representa el nombre de la clase** para la cual se creará el objeto, y la variable **`$b` representa el primer argumento** que se pasará al constructor del objeto.
Si `$a` y `$b` provienen de GET/POST, pueden ser **cadenas de texto o arrays de cadenas**. Si provienen de **JSON** u otra fuente, **podrían tener otros tipos**, como objeto o booleano.
Cuando no hay clases explotables en tu aplicación, o tienes la clase necesaria en un archivo separado que no está incluido por el código vulnerable, puedes echar un vistazo a las funciones de autocarga.
**Las funciones de autocarga** se establecen registrando callbacks a través de `spl_autoload_register` o definiendo `__autoload`. Se llaman cuando se intenta crear una instancia de una clase desconocida.
# Calling spl_autoload_register with no arguments enables the default autoloading function, which includes lowercase($classname) + .php/.inc from include_path
Dependiendo de la versión de PHP y del código en las funciones de autocarga, pueden existir algunas maneras de obtener una Ejecución de Código Remoto a través de la autocarga.
Hay de 100 a 200 clases incorporadas en PHP. El número de ellas depende de la versión de PHP y de las extensiones instaladas. Todas las clases incorporadas se pueden listar a través de la función `get_declared_classes`, junto con las clases personalizadas:
Si controlas **múltiples parámetros del constructor y puedes llamar a métodos arbitrarios** después, hay muchas maneras de obtener una Ejecución de Código Remoto. Pero si puedes pasar **solo un parámetro y no tienes ninguna llamada** al objeto creado, hay **casi nada**.
El constructor `PDO` acepta cadenas DSN, lo que nos permite **conectarnos a cualquier base de datos local o remota** utilizando **extensiones de base de datos instaladas**. Por ejemplo, la extensión SQLite puede crear archivos vacíos.
En PHP ≤ 5.3.22 y ≤ 5.4.12, el constructor de SoapClient era **vulnerable a XXE**. El constructor de SimpleXMLElement también era vulnerable a XXE, pero requería libxml2 <2.9.
Revisando las **dependencias** del **proyecto** que estás intentando explotar podrías encontrar **nuevas clases** que podrían ser **abusadas para ejecutar comandos** creando un nuevo objeto. En este caso, se descubrió que **Imagick** era útil para ese propósito.
El analizador VID permite escribir contenido arbitrario en una ruta arbitraria dentro del sistema de archivos, lo que permitiría a un atacante escribir un PHPshell en una carpeta accesible desde la página web y obtener RCE.
Cuando se carga un archivo a PHP, se almacena temporalmente en `/tmp/phpXXXXXX`. El analizador VID de Imagick con el protocolo **msl** permite **especificar comodines en las rutas de archivos** (para que el archivo cargado temporalmente se pueda acceder fácilmente) y **copiarlo a cualquier ubicación arbitraria**.\
El [**artículo original**](https://swarm.ptsecurity.com/exploiting-arbitrary-object-instantiations/) explicó otra forma de obtener RCE **cargando archivos con contenido específico** y haciendo que el **servidor se caiga antes de que elimine** ese archivo y luego **fuerza bruta en el nombre** del archivo temporal hasta que **Imagick ejecute código PHP arbitrario**.
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* Si quieres ver a tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de GitHub** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).