考点:phar伪协议
点击连接,跳转到上传文件界面
提示只能上传图片或者压缩包
同时注意到了,url栏有个GET传参。传值为index试试,发现回显好多个//index.php
,猜测这里传参,会自动帮我们加上一个.php
,我们传?bingdundun=index
,后台解析为?bingdundun=index.php
,然后进行文件包含。
phar伪协议:
phar ( php archive ) 是 PHP 里类似于 jar ( java archive ) 的一种打包文件。如果使用的是 PHP 5.3 或更高版本,那么 .phar 后缀文件是默认开启支持的,你不需要任何其他的安装就可以使用它。
用法:?file=phar://压缩包/内部文件
主要是用于在php中对压缩文件格式的读取。这种方式通常是用来配合文件上传漏洞使用。
生成phar文件脚本:(就了解一下)
$payload = '' ;//一句话木马
$phar = new Phar("example.phar"); //后缀名必须为phar
$phar->startBuffering();
$phar->setStub(""); //设置stub
$phar->addFromString("phar.php", "$payload"); //添加要压缩的文件
// $phar->setMetadata(...); //在metadata添加内容,可参考 phar反序列化,此处用不着,故注释
$phar->stopBuffering();
?>
1、stub
是phar文件的文件头,格式为...
,...
可以是任意字符,包括留空,且 php 闭合符与最后一个分号之间不能有多于一个的空格符。另外 php 闭合符也可省略。包含在 php 代码块中的语句在 phar 文件被包含时被执行。最短省略闭合符的stub是__HALT_COMPILER();?>
。前面的内容是没有限制的,也就是说我们可以构造一个图片文件或者 pdf 文件来绕过上传的限制,将这个phar
文件上传上去。
2、manifest describing the contents
存放着压缩文件的信息,每个被压缩文件的权限,属性等信息都放在这里,这里还会以序列化的形式存储着用户自定义的meta-data
。phar
文件存储meta-data
时会先将内容序列化后再存入进去,当文件操作函数通过phar://
伪协议解析phar
文件时就会先将数据反序列化,这样就可以构成反序列化攻击。这里是phar
反序列化攻击最核心的地方,但对这道题没有帮助。
3、the file contents
:被压缩文件的内容,这里写入一句话木马,但对 phar 反序列化攻击没有帮助
4、signature
:可选,phar文件的签名,允许的有MD5, SHA1, SHA256, SHA512和OPENSSL
(3条消息) 『PHP』phar文件详解_phar文件格式_调用phar类方法生成phar文件_Ho1aAs的博客-CSDN博客
开始做题。我们先创建一个一句话木马文件。
这里得提一下。
phar://、zip://、bzip2://、zlib://都可用于读取压缩文件,zip:// 、 bzip2:// 、 zlib:// 均属于压缩流,可以访问压缩文件中的子文件,更重要的是不需要指定后缀名,可修改为任意后缀:jpg png gif zip xxx 等等。而phar://的伪协议,可以将任意后缀名的压缩包(原来是 .phar 或 .zip,注意:PHP > =5.3.0 压缩包需要是zip协议压缩,rar不行 ) 解包,从而可以通过上传压缩包绕过对后缀名的限制,再利用伪协议实现文件包含。
所以.zip
后缀也是可以的,不用.phar
,直接压缩就行啦。
上传压缩包,返回了路径。
成功进行RCE(为什么最后不是/shell.php而是/shell,因为之前提了,后台会自动加上.php
)
getshell,根目录下找到flag
好文推荐: