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任意文件下载漏洞的更多相关文章

  1. 【代码审计】ThinkSNS_V4 任意文件下载漏洞分析

      0x00 环境准备 ThinkSNS官网:http://www.thinksns.com 网站源码版本:ThinkSNS V4  更新时间:2017-09-13 程序源码下载:http://www ...

  2. 代码审计-(Ear Music).任意文件下载漏洞

    0x01 代码分析 后台地址:192.168.5.176/admin.php admin admin 安装后的界面 在后台发布了一首新歌后,前台点进去到一个“下载LRC歌词”功能点的时候发现是使用re ...

  3. 【代码审计】XYHCMS V3.5任意文件下载漏洞分析

      0x00 环境准备 XYHCMS官网:http://www.xyhcms.com/ 网站源码版本:XYHCMS V3.5(2017-12-04 更新) 程序源码下载:http://www.xyhc ...

  4. 【代码审计】CLTPHP_v5.5.3后台任意文件下载漏洞分析

      0x00 环境准备 CLTPHP官网:http://www.cltphp.com 网站源码版本:CLTPHP内容管理系统5.5.3版本 程序源码下载:https://gitee.com/chich ...

  5. 【代码审计】EasySNS_V1.6 前台任意文件下载漏洞分析

      0x00 环境准备 EasySNS官网:http://www.imzaker.com/ 网站源码版本:EasySNS极简社区V1.60 程序源码下载:http://es.imzaker.com/i ...

  6. PHP代码审计笔记--任意文件下载漏洞

    在文件下载操作中,文件名及路径由客户端传入的参数控制,并且未进行有效的过滤,导致用户可恶意下载任意文件.  0x01 客户端下载 常见于系统中存在文件(附件/文档等资源)下载的地方. 漏洞示例代码: ...

  7. 任意文件下载漏洞的接口URL构造分析与讨论

    文件下载接口的URL构造分析与讨论 某学院的文件下载接口 http://www.****.edu.cn/item/filedown.asp?id=76749&Ext=rar&fname ...

  8. 代码审计-phpcms9.6.2任意文件下载漏洞

    漏洞文件: phpcms\modules\content\down.php 1.在download函数中对文件的校验部分 首先 if(preg_match('/(php|phtml|php3|php4 ...

  9. ASP代码审计学习笔记 -5.文件下载漏洞

    文件下载漏洞 漏洞代码: <% function download(f,n) on error resume next Set S=CreateObject("Adodb.Stream ...

随机推荐

  1. 前端如何接收 websocket 发送过来的实时数据

    WebSocket protocol 是HTML5一种新的协议,它实现了浏览器与服务器全双工通信(full-duple).刚开始的握手需要借助HTTP请求完成,在 WebSocket API,浏览器和 ...

  2. mssql Sqlver 修改标识列方法

    摘自: http://www.cnblogs.com/badboy2008/articles/1145465.html MSSQL Server修改标识列方法   ----允许对系统表进行更新exec ...

  3. Sqlite-SQLiteHelper类,操作SQLite数据库

    using System; using System.Data; using System.Text.RegularExpressions; using System.Xml; using Syste ...

  4. Event.RESIZE 的事件不触发

    stage.scaleMode=StageScaleMode.NO_SCALE;(或者设置其他缩放模式,如EXACT_FIT等):   如果没有设置 stage的缩放模式的话, stage.addEv ...

  5. .NET破解之PDF编辑器

    本教程只能用于学习研究,不可进行任何商业用途.如有使用,请购买正版,尊重他人劳动成果和知识产权! 第一效果团队(1XG Team)组建于2004年,并长期致力于WINDOWS平台应用软件开发,产品主要 ...

  6. java使用链栈实现数制转换

    java实现链栈在前面有所介绍:http://www.cnblogs.com/lixiaolun/p/4644141.html 将前面java实现链栈的代码稍作修改: package linkedst ...

  7. Hadoop之MapReduce命令

    概述 全部的Hadoop命令都通过bin/mapred脚本调用. 在没有不论什么參数的情况下.执行mapred脚本将打印该命令描写叙述. 使用:mapred [--config confdir] CO ...

  8. socket shutdown 与 close 函数 的区别

    假设server和client 已经建立了连接,server调用了close, 发送FIN 段给client(其实不一定会发送FIN段,后面再说),此时server不能再通过socket发送和接收数据 ...

  9. webp转jpg

      webp转jpg CreateTime--2017年12月8日09:32:38 Author:Marydon 1.webp格式介绍 WebP 的优势体现在它具有更优的图像数据压缩算法,能带来更小的 ...

  10. 〖Linux〗proc的一些文件读取操作

    /* * ===================================================================================== * * Filen ...