『PHP代码审计』PHPOK5.7.140存在文件上传漏洞
发布日期:2021-06-28 20:00:24
浏览次数:2
分类:技术文章
本文共 2415 字,大约阅读时间需要 8 分钟。
文章目录
前言
作者:Ho1aAs
博客:https://blog.csdn.net/xxy605
一、漏洞演示
进入PHPOK的后台,右上角先切换到开发模式
进入左侧的应用管理界面
点击安装应用——导入应用,上传一个zip压缩的php文件
# 1.php
轻易完成了上传,访问_app/1.php就能发现文件已经被解压了,而且没有改名
二、漏洞分析
导入应用并上传的功能首先调用了zip函数接收压缩包
这一步只限定了上传文件类型是zip,而不限制其内容,没有对内容进行过滤和判断,对任何zip都保存
/** * 制作压缩包 * @参数 $dir,支持单个文件,目录及数组 * @参数 $saveName,保存的ZIP文件名 **/ public function zip($dir, $saveName) { if(@!function_exists('gzcompress')){ return false; } ob_end_clean(); $filelist = array(); if(is_array($dir)){ $filelist = $dir; }else{ if(!file_exists($dir)){ return false; } if(is_file($dir)){ $filelist = array($dir); }else{ $this->filelist($filelist,$dir); } } if(count($filelist) < 1){ return false; } if(class_exists('ZipArchive')){ $obj = new ZipArchive(); $obj->open($saveName,ZipArchive::OVERWRITE|ZipArchive::CREATE);//创建一个空的zip文件 foreach($filelist as $file){ if(!file_exists($file) || !is_file($file)){ continue; } $name = substr($file,strlen($this->dir_root)); $obj->addFile($file,$name); } $obj->close(); return true; } foreach($filelist as $file){ if(!file_exists($file) || !is_file($file)){ continue; } $fd = fopen($file, "rb"); $content = @fread($fd, filesize($file)); fclose($fd); $file = substr($file, strlen($this->dir_root)); if(substr($file, 0, 1) == "\\" || substr($file, 0, 1) == "/"){ $file = substr($file, 1); } $this->addFile($content, $file); } $out = $this->file(); $fp = fopen($saveName, "wb"); fwrite($fp, $out, strlen($out)); fclose($fp); }
zip压缩包上传成功后,调用unzip函数对其解压
这一步也是单纯的解压,并没有对压缩包内容进行过滤就解压到了根目录
public function unzip($file,$to='') { if(class_exists('ZipArchive')){ $zip = new ZipArchive; $zip->open($file); $zip->extractTo($to); $zip->close(); return true; } # ...(略)
三、利用
将任意文件添加到zip压缩文件,通过该功能上传zip、解压到根目录
四、修复
建议对上传的非应用安装包进行检查,解压时过滤危险文件类型、内容等
五、总结
由于以下问题导致该漏洞的产生:
- 对安装应用功能的非法利用
- 上传、解压zip文件无过滤
完
转载地址:https://blog.csdn.net/Xxy605/article/details/117512930 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
哈哈,博客排版真的漂亮呢~
[***.90.31.176]2024年04月25日 03时11分23秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Spring AOP的实现原理(二)
2019-04-29
Spring AOP的实现原理(三)
2019-04-29
Spring AOP的实现原理(四)
2019-04-29
Spring AOP的实现原理(五)
2019-04-29
Java动态代理与CGLIB
2019-04-29
Java 9 新特性
2019-04-29
缓存与数据库不一致
2019-04-29
Gson的入门使用
2019-04-29
SpringBoot之集成Spring AOP
2019-04-29
Linux免密码登录设置
2019-04-29
JVM命令使用演示
2019-04-29
面试中并发类问题的准备和学习
2019-04-29
2018 Java 后端工程师的书单推荐
2019-04-29
使用IPVS实现Kubernetes入口流量负载均衡
2019-04-29
ETCD原理详细解析
2019-04-29
Docker 快速删除所有容器
2019-04-29
分布式锁的实现方式
2019-04-29
JVM性能监控工具-Jvisualvm
2019-04-29
JMX超详细解读
2019-04-29