排行
数据库百科
核心案例
行业报告
月度解读
大事记
产业图谱
中国数据库
向量数据库
时序数据库
实时数据库
搜索引擎
空间数据库
图数据库
数据仓库
大调查
2021年报告
2022年报告
年度数据库
2020年openGauss
2021年TiDB
2022年PolarDB
2023年OceanBase
首页
资讯
活动
大会
学习
课程中心
推荐优质内容、热门课程
学习路径
预设学习计划、达成学习目标
知识图谱
综合了解技术体系知识点
课程库
快速筛选、搜索相关课程
视频学习
专业视频分享技术知识
电子文档
快速搜索阅览技术文档
文档
问答
服务
智能助手小墨
关于数据库相关的问题,您都可以问我
数据库巡检平台
脚本采集百余项,在线智能分析总结
SQLRUN
在线数据库即时SQL运行平台
数据库实训平台
实操环境、开箱即用、一键连接
数据库管理服务
汇聚顶级数据库专家,具备多数据库运维能力
数据库百科
核心案例
行业报告
月度解读
大事记
产业图谱
我的订单
登录后可立即获得以下权益
免费培训课程
收藏优质文章
疑难问题解答
下载专业文档
签到免费抽奖
提升成长等级
立即登录
登录
注册
登录
注册
首页
资讯
活动
大会
课程
文档
排行
问答
我的订单
首页
专家团队
智能助手
在线工具
SQLRUN
在线数据库即时SQL运行平台
数据库在线实训平台
实操环境、开箱即用、一键连接
AWR分析
上传AWR报告,查看分析结果
SQL格式化
快速格式化绝大多数SQL语句
SQL审核
审核编写规范,提升执行效率
PLSQL解密
解密超4000字符的PL/SQL语句
OraC函数
查询Oracle C 函数的详细描述
智能助手小墨
关于数据库相关的问题,您都可以问我
精选案例
新闻资讯
云市场
登录后可立即获得以下权益
免费培训课程
收藏优质文章
疑难问题解答
下载专业文档
签到免费抽奖
提升成长等级
立即登录
登录
注册
登录
注册
首页
专家团队
智能助手
精选案例
新闻资讯
云市场
微信扫码
复制链接
新浪微博
分享数说
采集到收藏夹
分享到数说
举报
首页
/
Typesetter CMS任意文件上传漏洞分析
Typesetter CMS任意文件上传漏洞分析
启明星辰金睛安全研究团队
2020-12-01
1442
漏洞描述
Typesetter CMS 5.x-5.1版本中,可以在后台上传模块通过上传包含php的zip文件绕过后缀白名单,执行任意php代码并获取目标权限。漏洞形成原因主要是typesetter管理后台支持zip解压,而zip后缀又在上传白名单中,因此导致任意文件上传。官方给出的漏洞详情介绍请参考:https://github.com/Typesetter/Typesetter/issues/674。下面是利用Fofa搜索该漏洞影响范围。
漏洞复现
Typesetter CMS 5.1版本下载地址:https://github.com/Typesetter/Typesetter/
将源码下载后解压在web目录下,漏洞位于/admin/uploaded,将php文件生成压缩文件且后缀为.php.zip,右键上传解压该zip文件,打开后即可获得php文件地址。
漏洞分析
利用burp对上传过程抓包分析,发现上传接口为Admin_Finder,可以发现并且相关参数和参数的值,$cmd的值为upload,$filename的值就是我们上传的文件名。
打开上传接口类Finder源码调试,在浏览器上传test.php.zip文件,在phpstrom调试查看,重点代码是这一段,$listeners的值是upload_check赋给$listener并且通过call_user_func函数调用upload_check函数,下面我们需要去看upload_check函数。
uploaded.php文件源码内容只有两个类,一个Uploaded类,还有其子类admin_uoloaded, upload_check函数就在Uploaded类里,将$args[‘FILES’][‘upload’]的值赋给$file,$args[‘FILES’][‘upload’]中存放的正是我们上传文件的名称、类型的信息,若$file不为数组则直接return,若为数组则判断$file中的name变量每一项是否符合AllowedExtension。
下面我们跟进AllowedExtension,函数的作用是判断后缀是否在白名单内,如果后缀不满足白名单则拒绝上传,因此我们只能上传白名单内的,zip是在白名单中的。
但如果我们不让他们进入AllowedExtension去判断后缀,是不是就可以绕过?那么就涉及到上面的代码,如果$file不为数组则return那么就结束了整个函数,就不会进入AllowedExtension,可是后面的调试过程中发现,若$file不为数组那么在最后的上传过程中,无法获取文件名和类型来发包给服务器,也没法完成上传动作,所以无法利用。
执行完upload_check函数后又利用call_user_func调用了upload函数,因为$cmd的值upload。
upload函数就是标准的上传行为,至此上传已完成,最后将结果存入$data数据以json格式输出,我们在上面的burp返回包中就可以看到$data中的内容。
数据库
文章转载自
启明星辰金睛安全研究团队
,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
领墨值
有奖问卷
意见反馈
客服小墨