php审计之phar://协议

  1. php审计之phar://协议
    1. 生成

php审计之phar://协议

之前在网上看到这么个协议,感觉记忆有点模糊,故复现一下。

  • php.ini中的phar.readonly设置为Off(默认为On)

一般来说此协议可适用于文件包含

这个协议就是用来读取压缩包中的文件内容的。

我们这里用最最经典的pikachu靶场来做实验。

image-20230709210835154

看代码,直接包含了get方法接收到的filename参数,我们这里去给include里面加一个压缩包,压缩包里面弄一个shell。

image-20230709211004093

image-20230709211049372

现在我们去包含这个1.zip

可以看到直接包含也只能看到里面的文件名字

image-20230709211136275

但是我们使用,phar://协议去包含的话(中途改了下代码)

image-20230710174430954

phar://C:\code\phpstudy_pro\WWW\vul\fileinclude\include\12.zip\12.php

image-20230710174201307

而且后缀也不是非要zip,换成png也可以,这样就可以绕过了。

生成

同时也可以用php脚本打包一个phar文件,下面是脚本

<?php
$pharFilename = 'myapp.phar';
$entrypoint = '1.php';
$stub = <<<STUB
<?php
Phar::mapPhar('$pharFilename');
include 'phar://$pharFilename/$entrypoint';
__HALT_COMPILER();
STUB;

$phar = new Phar($pharFilename);
$phar->startBuffering();

// 添加入口文件
$phpCode = '<?php echo "Hello, World!";';
$phar->addFromString($entrypoint, $phpCode);

// 设置 stub(入口文件)
$phar->setStub($stub);

$phar->stopBuffering();

echo "成功生成 $pharFilename\n";
?>

phpcode就是包含的文件内容。

ps:我用php7.3.4版本复现了一晚上都没成功,真要自杀了。换成5.6.9就可以了。


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。后续可能会有评论区,不过也可以在github联系我。