OpenSNS后台文件上传漏铜分析
前言
这几天正在想找个文件上传漏洞分析一波,以加深对文件上传漏洞的理解,正好看到FreeBuf的一片文章记对OpenSNS的一次代码审计,由于其只对漏洞进行复现,故在此进行代码层面的分析。
漏洞分析
已知漏洞产生点:./Application/Admin/Controller/ThemeController.class.php 第170行
跟入upload函数(./ThinkPHP/Library/Think/Upload.class.php 第128行):
首先可以看到对所上传的文件进行了基本的检查,再往下看:
此处就是对所上传文件的检测,可以看到,首先获取对上传的文件的属性集的一个资源列表。接下来使用dealFiles函数取出上传文件的数组:
然后获取Content-Type的值为:application/zip
获取所上传文件的后缀为:zip
然后对所上传文件进行检测,使用check函数,此函数位于该文件303行:
private function check($file)
{
/* 文件上传失败,捕获错误代码 */
if ($file['error']) {
$this->error($file['error']);
return false;
} /* 无效上传 */
if (empty($file['name'])) {
$this->error = '未知上传错误!';
} /* 检查是否合法上传 */
if (!is_uploaded_file($file['tmp_name'])) {
$this->error = '非法上传文件!';
return false;
} /* 检查文件大小 */
if (!$this->checkSize($file['size'])) {
$this->error = '上传文件大小不符!';
return false;
} /* 检查文件Mime类型 */
//TODO:FLASH上传的文件获取到的mime类型都为application/octet-stream
if (!$this->checkMime($file['type'])) {
$this->error = '上传文件MIME类型不允许!';
return false;
} /* 检查文件后缀 */
if (!$this->checkExt($file['ext'])) {
$this->error = '上传文件后缀不允许';
return false;
} /* 通过检测 */
return true;
}
可以看到检测文件大小,Mime类型以及文件后缀。由于上传的zip文件在上传文件后缀白名单中,所以此处的检测全部通过。
最后获取文件hash值并加入$file数组中。
接下来调用回调函数,由于config数组中的callback的值为flase。所以$data的值为空。
然后生成保存的文件名,跟入getSaveName函数,位于该文件402行:
由于savaName的值为空。所以文件名保持不变。再往下:
首先检测并创建子目录,跟入getSubPath函数,位于该文件427行:
由于autoSub值为空,所以$subpath的值为空,所以$file['savePath']的值为空。然后对图像文件进行检测,由于上传的为zip文件,所以跳过。所以保存的文件的目录不变。再往下:
开始保存文件,跟入save函数,位于./ThinkPHP/Library/Think/Upload/Driver/Local.class.php 72行:
由于$replace的值为true,所以覆盖同名文件,然后移动文件成功,返回值为true。
最后此函数返回$info:
回到最初函数,跟入_unCompression函数,位于该文件,196行:
最后跟入extract函数,此函数为提取zip文件中的文件,并未对所提取的文件进行任何检测,于是漏洞产生。(别问为什么不继续,因为这个函数看了头大。)
至此漏洞分析完毕,总体来说比较简单,建议对解压的文件也调用函数对其检测。
OpenSNS后台文件上传漏铜分析的更多相关文章
- 文件上传漏洞靶场分析 UPLOAD_LABS
文件上传漏洞靶场(作者前言) 文件上传漏洞 产生原理 PASS 1) function checkFile() { var file = document.getElementsByName('upl ...
- AJAX文件上传实践与分析,带HTML5文件上传API。
对于HTML5已经支持AJAX文件上传了,但如果需要兼容的话还是得用一点小技巧的,HTML5等等介绍,先来看看以前我们是怎么写的. 网上可能会有一些叫AJAX文件上传插件,但在AJAX2.0之前是不可 ...
- IOS后台文件上传
public ModelAndView GetImage(HttpServletRequest request, HttpServletResponse response) throws Exce ...
- jfinal 后台文件上传(结合上一篇(h5 图片回显))
前端用了jquery.form.js插件异步提交表单 $("#imgForm").ajaxSubmit();//户主头像 /** * * @description 上传户主头像 * ...
- struts文件上传拦截器分析
struts有默认的文件拦截器,一般配置maximumSize就可以了. 知道原理,我们可以写一个类继承它,实现自己的配置上传文件大小的方式. 然后细究页面上传文件的时候,发现了一些问题. act ...
- 【总结】java 后台文件上传整理
public Map<String,String> clientUploadAttachment(Long belongId, String fileSource, MultipartFi ...
- Angular14 利用Angular2实现文件上传的前端、利用springBoot实现文件上传的后台、跨域问题
一.angular2实现文件上传前端 Angular2使用ng2-file-upload上传文件,Angular2中有两个比较好用的上传文件的第三方库,一个是ng2-file-upload,一个是ng ...
- PHP学习笔记 02 之文件上传
我们了解了表单传值后,这些我就可以完成PHP的文件上传了.我们了解PHP文件上传前,先了解PHP文件上传的原理. 一.PHP上传文件原理 第一步:将本地的文件通过form表单上传到服务器的临时目录中, ...
- Drupal SA-CORE-2019-010 .开头文件名(如.htaccess) 文件上传
目录 drupal .开头文件名 文件上传 原生模块分析 第三方模块分析 补丁 参考 drupal .开头文件名 文件上传 通过diff 8.8.1的补丁,很容易发现修复点,位于core\module ...
随机推荐
- 怎么用导图软件iMindMap整理C语言知识点
C语言是一门非常基础的编程语言,学习它的难点不在于语言的理解,而在于繁琐的记忆点,而当我们使用思维导图将细碎的知识点拉到框架中去后,C语言的难度就大大降低了. 接下来就为大家介绍一下我使用iMindM ...
- 简单的 通过ID获取文件名称
模型中的方法class 模型名{ /** * 通过ID获取文件名称 */ public static function getNameById($id) { $model = self::findOn ...
- spring框架:(一) 技术说明(技术介绍,技术优势以及发展史等)
一.技术说明(技术介绍,技术优势以及发展史等) 1.1.什么是spring 1.2.spring由来(发展历程) 1.3.spring核心 1.4.spring优点 1.5.spring体系结构 1. ...
- 自学linux——8.firewall-cmd的命令使用
firewall-cmd使用方法 1.firewall-cmd的含义 firewall-cmd 是 firewalld的字符界面管理工具,firewalld是centos7之后版本的一大特性, 最大的 ...
- 【操作系统】银行家算法实现(C语言)
[操作系统]银行家算法实现(C语言) 注意:本人编码水平很菜.算是自己的一个总结.可能会有我还没有发现的bug.如果有人发现后可以指出,不胜感激. 1.银行家算法: 我们可以把操作系统看作是银行家,操 ...
- AOV图与拓扑排序&AOE图与关键路径
AOV网:所有的工程或者某种流程可以分为若干个小的工程或阶段,这些小的工程或阶段就称为活动.若以图中的顶点来表示活动,有向边表示活动之间的优先关系,则这样活动在顶点上的有向图称为AOV网. 拓扑排序算 ...
- 再见!【JAVA GUI】
1.GUI概述 图形用户界面(Graphical User Interface,简称 GUI,又 称图形用户接口)是指采用图形方式显示的计算机操作用户界面. java作为一种面向对象的程序设计语言,它 ...
- 查询Oracle日志文件的方法
Oracle日志文件相信经常使用Oracle数据库的朋友都比较熟悉了,下面将为您介绍的是查询Oracle日志文件的几种方法,供您参考学习. 1.查询系统使用的是哪一组日志文件: select * fr ...
- PyQt+moviepy音视频剪辑实战1:多视频合成顺序播放或同屏播放的视频文件
专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 老猿学5G博文目录 一.引言 在<moviepy音视频剪辑:音视 ...
- 第2章 Python编程基础知识目录
第2.1节 简单的Python数据类型.变量赋值及输入输出 第2.2节 Python的语句 第2.3节 Python运算符大全 老猿Python,跟老猿学Python! 博客地址:https://bl ...