Phar文件反序列化 Fay·D·Flourite

phar反序列化

whuctf的反序列化题才知道的…

学习自https://paper.seebug.org/680/

phar是一种压缩问题,而其文件的一部分meta-data的地方是用序列化的方式来存储数据的,这种攻击方式就摆脱了serialize(),unserialize()的限制,只要是和文件操作有关的函数中有我们可控的phar文件就能进行反序列化攻击

我们则利用这个点制造攻击的phar文件然后用下面的函数打开这个phar文件,就能完成反序列化攻击

影响函数(跟着上面文章打了一遍方便速查- -):

  • fileatime
  • file_put_contents
  • fileinode
  • is_dir
  • is_readable
  • copy
  • filectime
  • file
  • filemtime
  • is_executable
  • is_writable
  • unlink
  • file_exists
  • filegroup
  • fileowner
  • is_file
  • is_writeable
  • istat
  • file_get_contents
  • fopen
  • fileperms
  • is_link
  • parse_ini_file
  • readfile

上面那个文章里有制造phar文件的脚本,我就不搬了- -

然后来复现一下这道题…

前面通过文件包含读取源码就不说了,主要看下反序列化的利用过程

类中有public $dirprivate $cmd,而$cmd会在对象被销毁时被eval(),于是只要反序列化控制cmd变量往里面塞我们的payload就行了,根据上面文章给的脚本制造phar文件。

制造后上传,在view.php界面传参show=phar://phar.phar/即可

他的upload.php中过滤了一些函数,最终用readfile去读取就行了