跳转到帖子

游客您好,欢迎来到黑客世界论坛!您可以在这里进行注册。

赤队小组-代号1949(原CHT攻防小组)在这个瞬息万变的网络时代,我们保持初心,创造最好的社区来共同交流网络技术。您可以在论坛获取黑客攻防技巧与知识,您也可以加入我们的Telegram交流群 共同实时探讨交流。论坛禁止各种广告,请注册用户查看我们的使用与隐私策略,谢谢您的配合。小组成员可以获取论坛隐藏内容!

TheHackerWorld官方

FastAdmin前台文件上传复现

精选回复

发布于

漏洞发生于:2021年/4月1号
漏洞点:application\api\controller\Common.php
触发漏洞的url:/index/ajax/upload
要求:application\extra\upload.php里的chunking为true (分片上传为true)

cuYe9x.png

复现过程

漏洞点分析
需要包括以下的post请求参数才行
1.chunkid参数
2.action参数
3.chunkindex参数
4.chunkcount参数
5.filename参数

cuYG4I.md.png

随后进入if判断,当action参数不为merge或method不为clean的时候。调用chunk函数chunk($chunkid, $chunkindex, $chunkcount);进入分片文件上传

cuYDEj.md.png

跟进chunk函数,
1.首先$destDir=RUNTIME_PATH/chunks路径, RUNTIME=ROOT_PATH . ‘runtime’ . DS (DS=根据系统的文件分隔符)

cuYrUs.md.png

2.$fileName=$chunkid-$chunindex.part //$chunkid和$chunindex都可控
3.$destDir=$destDir.DS.$fileName //拼接得到最后文件路径
4.判断RUNTIME_PATH/chunks路径是否存在,不存在则创建文件夹
5.将临时文件移动到RUNTIME_PATH/chunks路径下

cuYhb4.md.png

之后触发merge函数,写shell
要求action参数为merge

cutQzV.md.png

首先chunkDir变量来自于下图
$chunkDir=RUNTIME_PATH . ‘chunks’

cut3sU.md.png

1.$filePath=RUNTIME_PATH . ‘chunks’.DS.$chunkid //$chunkid参数可控
2.根据$chunkcount变量进行循环
3.判断$filePath-$i-.part文件是否存在
4.如果文件存在,在/runtime/chunks路径下创建以$filepath作为文件名的文件$destFile=@fopen($uploadPath, “wb”)
5.锁定文件
6.根据$chunkcount参数循环 //$chunkcount参数可控
7.$partFile=$filePath-$i-.part
8.循环读取$partFile内容,写入文件到$filepath
9.读取完文件后,删除分片文件,释放文件锁定,关闭文件句柄

cutDsO.md.png
cutrLD.md.png

exp分析:

cut2FA.png
cut4Qf.png

exp地址:https://github.com/exp1orer/FastAdmin_Upload

cut5y8.png

至于这里的shell地址为什么是根目录,因为这个exp是这么写的

cutjS0.md.png

参考链接

https://zhuanlan.zhihu.com/p/57166400
https://xz.aliyun.com/t/9395
https://mp.weixin.qq.com/s/otrH75ZjCHBQbRB7g5DdWg

创建帐户或登录后发表意见

最近浏览 0

  • 没有会员查看此页面。