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 $dir
和private $cmd
,而$cmd
会在对象被销毁时被eval()
,于是只要反序列化控制cmd变量往里面塞我们的payload就行了,根据上面文章给的脚本制造phar文件。
制造后上传,在view.php界面传参show=phar://phar.phar/
即可
他的upload.php中过滤了一些函数,最终用readfile去读取就行了