BlueCMS——国产CMS建站系统

一、BlueCMS的安装

1、下载BlueCMS的安装包并解压,将解压后的文件上传至web服务器上。

2、使用浏览器打开安装文件install.php,出现欢迎页面后点击“下一步”按钮。

<?php
/**
 * BlueCMS v1.6 安装程序
 *
 * Author: switer
 * Time  : 2020.12.22
 * Email : switer@qq.com
 */
if (!function_exists('mysqli_connect')):
    die('PHP环境中没有安装mysqli扩展!');
endif;

if (!function_exists('session_start')):
    die('PHP环境中没有安装session扩展!');
endif;

if (file_exists('./install.lock')):
    die('已经安装过BlueCMS,如果需要重新安装,请手动删除install.lock文件!');
endif;

$errors = array();
if (!empty($_POST)):
    $database_host = $_POST['database_host'];
    $database_username = $_POST['database_username'];
    $database_password = $_POST['database_password'];
    $database_name = $_POST['database_name'];
    $database_table_prefix = trim($_POST['database_table_prefix']);

    if (empty($database_host)):
        $errors[] = "请输入MySQL数据库服务器地址!";
    endif;

    if (empty($database_username)):
        $errors[] = "请输入MySQL数据库登录帐号!";
    endif;

    if (empty($database_name)):
        $errors[] = "请输入MySQL数据库名称!";
    endif;
    
    if (empty($database_table_prefix)):
        $errors[] = "请输入数据库表前缀!";
    endif;

    if (empty($errors)):
        $link = mysqli_connect($database_host, $database_username, $database_password);
        if (!$link):
            $errors[] = "连接MySQL服务器失败,请确认数据库登录信息是否正确!";
        endif;

        if (!mysqli_select_db($link, $database_name)):
            $errors[] = "选择数据库失败,请确认您输入的数据库名称是否正确!";
        endif;

        if (empty($errors)):
            foreach (glob("sql/*.sql") as $filename):
                $sql = file_get_contents($filename);
                $sql = str_replace("`cms_", "`" . $database_table_prefix, $sql);
                $sqls = preg_split("/;\s*\n/", $sql);
                foreach ($sqls as $sql):
                    if (!empty($sql)):
                        mysqli_query($link, $sql);
                    endif;
                endforeach;
            endforeach;

            $config_file = './var/config.php';
            $config_content = file_get_contents($config_file);
            $config_content = str_replace('{database_host}', addslashes($database_host), $config_content);
            $config_content = str_replace('{database_username}', addslashes($database_username), $config_content);
            $config_content = str_replace('{database_password}', addslashes($database_password), $config_content);
            $config_content = str_replace('{database_name}', addslashes($database_name), $config_content);
            $config_content = str_replace('{database_table_prefix}', $database_table_prefix, $config_content);
            file_put_contents('./var/config.php', $config_content);

            touch('./install.lock');
            echo '

BlueCMS安装成功!

'; echo '

请手动删除install.php文件,确保系统安全!

'; endif; endif; endif; ?>

3、填写MySQL数据库的相关信息,包括数据库服务器地址、用户名、密码、数据库名称以及数据表前缀等,然后点击“下一步”按钮。

4、按照页面提示依次填写网站相关信息,包括网站名称、管理员帐号、管理员密码等,最后点击“完成安装”按钮即可。

二、BlueCMS v1.6审计

BlueCMS v1.6是一款国产CMS建站系统,但是在安全方面存在多个漏洞。

1、信息泄露:BlueCMS的安装文件install.php中没有对数据库连接相关信息进行保护,攻击者可以轻易地获取到数据库的用户名和密码等敏感信息。

<label>数据库服务器地址:</label>
<input type="text" name="database_host" value="localhost" /><br/>

<label>MySQL登录帐号:</label>
<input type="text" name="database_username" value="root" /><br/>

<label>MySQL登录密码:</label>
<input type="password" name="database_password" value="" /><br/>

<label>MySQL数据库名称:</label>
<input type="text" name="database_name" value="bluecms" /><br/>

<label>数据表前缀:</label>
<input type="text" name="database_table_prefix" value="cms_" /><br/>

2、SQL注入漏洞:在搜索功能中没有对用户输入的内容进行充分的过滤,导致攻击者可以通过构造SQL语句获取到用户数据或者进行数据库的恶意操作。

public function search()
{
    $keyword = isset($_GET['keyword']) ? $_GET['keyword'] : '';
    $page = isset($_GET['page']) ? intval($_GET['page']) : 1;
    if (strlen($keyword) fetch_row()[0];
    $total_pages = ceil($total_posts / $posts_per_page);

    $query = $this->db->query("SELECT * FROM `" . $this->db->prefix . "posts` WHERE $conditions ORDER BY $order_by LIMIT $offset, $posts_per_page");

    $found_posts = array();
    while ($row = $query->fetch_assoc()) {
        $row['url'] = $this->permalink($row['slug']);
        $row['excerpt'] = $this->excerpt($row['body']);
        $found_posts[] = $row;
    }

    $this->render('search', array(
        'found_posts' => $found_posts,
        'keyword' => $keyword,
        'pagination' => array(
            'total_pages' => $total_pages,
            'current_page' => $page
        )
    ));
}

三、BlueCMS找漏洞

1、上传头像功能存在文件上传漏洞:上传头像功能没有对文件类型进行校验,攻击者可以上传带有恶意脚本的文件,从而实现对网站的攻击。

public function save_avatar()
{
    // 初始化
    $error_code = 0;
    $upload_dir = getcwd() . '/uploads/avatar/';
    if (!file_exists($upload_dir)) {
        mkdir($upload_dir, 0777, true);
        chmod($upload_dir, 0777);
    }
    $user_id = $this->current_user_id();

    // 上传新头像
    $filename = $this->generate_hashed_filename();
    $full_path = $upload_dir . $filename;
    if (move_uploaded_file($_FILES['file']['tmp_name'], $full_path)) {
        $this->db->query("UPDATE `" . $this->db->prefix . "users` SET avatar = '$filename' WHERE id = $user_id");
    } else {
        $error_code = 1;
    }

    // 响应请求
    $response = array();
    if ($error_code == 0) {
        $response['status'] = 'success';
        $response['avatar_url'] = '/uploads/avatar/' . $filename;
    } else {
        $response['status'] = 'error';
        $response['message'] = '上传头像失败,请重试!';
    }
    header('Content-Type: application/json; charset=UTF-8');
    echo json_encode($response);
}

2、代码设计缺陷:BlueCMS的代码结构存在缺陷,在代码审计过程中发现缺少对用户输入内容的完整校验及过滤,需要对部分模块进行重构,以确保脆弱性攻击的安全性。

四、BlueCMS v1.6安装失败

安装过程中,有一些常见错误需要注意:

1、文件权限问题:请确认您的服务器是否具有创建文件和目录的权限,否则会导致安装失败。

2、MySQL版本问题:BlueCMS需要使用 MySQL 5.6 或更高版本。

3、服务器环境问题:请确保您的服务器环境符合 BlueCMS 的要求,包括 PHP 5.4.0 或更高版本、MySQL数据库、Apache 或 Nginx 等 web 服务器。

五、BlueCMS v1.6代码审计

1、获取当前用户信息的代码:

public function current_user()
{
    if (isset($_SESSION['user_id'])) {
        return $this->db->query("SELECT * FROM `" . $this->db->prefix . "users` WHERE id = " . intval($_SESSION['user_id']))->fetch_assoc();
    } else {
        return null;
    }
}

2、登录验证的代码:

public function do_login()
{
    $username = isset($_POST['username']) ? trim($_POST['username']) : '';
    $password = isset($_POST['password']) ? trim($_POST['password']) : '';

    $user = $this->db->query("SELECT * FROM `" . $this->db->prefix . "users` WHERE username = '" . $this->db->escape_string($username) . "' AND password = MD5(CONCAT('" . $this->db->escape_string($password) . "', salt))")->fetch_assoc();

    if ($user) {
        $_SESSION['user_id'] = $user['id'];
        $_SESSION['user_name'] = $user['username'];
        header('Location: /admin');
    } else {
        header('Location: /admin/login.php?msg=登录失败,请检查您的用户名和密码!');
    }
}

3、对文章进行保存的代码:

public function save_post()
{
$title = isset($_POST['title']) ? trim($_POST['title']) : '';
$slug = isset($_POST['slug']) ? trim($_POST['slug']) : $title;
$body = isset($_POST['body']) ? $_POST['body'] : '';
$status = isset($_POST['status']) ? intval($_POST['status']) : 0;
$user_id = $this->current_user_id();
$post_id = isset($_POST['id']) ? intval($_POST['id']) : 0;

if (empty($title)) {
header('Location: /admin/new.php?msg=文章标题不能为空!');
return;
}

if (empty($body)) {
header('Location: /admin/new.php?msg=文章内容不能为空!');
return;
}

if (!empty($slug) && !$this->is_slug_valid($slug)) {
header('Location: /admin/new.php?msg=文章别名已经被使用,请输入其他别名!');
return;
}

if ($post_id) {
$this->db->query("UPDATE `" . $this->db->prefix . "posts` SET title = '" . $this->db->escape_string($title) . "', slug = '" . $this->db->escape_string($slug) . "',body = '" . $this->db->escape_string($body) . "', status = " . $status . " WHERE id = " . intval($post_id));
} else {
$this->db->query("INSERT INTO `" . $this->db->prefix . "posts` (title, slug, body, status, user_id) VALUES ('" . $this->db->escape_string($title) . "', '" . $this->db->escape_string($slug) . "', '" . $this->db-&

原创文章,作者:NFBB,如若转载,请注明出处:https://www.506064.com/n/138454.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
NFBBNFBB
上一篇 2024-10-04 00:21
下一篇 2024-10-04 00:21

相关推荐

  • 开源Python CMS的优势和应用范围

    开源Python CMS是一种基于Python架构的内容管理系统。它不仅具有高效可靠的核心框架,还有大量的插件和现成的模板,可以充分满足各种网站需求,使开发人员轻松地进行网站设计和…

    编程 2025-04-28
  • 解决这个开源CMS漏洞的方法

    一、漏洞的背景与问题 在开源CMS中,常常会出现一些漏洞,这些漏洞可能会被黑客利用,造成重大损失。最常见的漏洞包括SQL注入、跨站脚本(XSS)、文件上传等。如果不及时修复这些漏洞…

    编程 2025-04-02
  • CMS指纹识别全方位解析

    一、CMS指纹识别原理 CMS指纹识别是一种利用已知漏洞或特定页面/文件的信息来推断一个CMS类型的方法。这种技术通常可通过HTTP响应头信息、页面中的结构及CSS文件的MD5值等…

    编程 2025-02-01
  • CMS垃圾回收器详解

    一、垃圾回收器的概述 在软件应用程序中,垃圾回收是一项重要的任务,它负责释放内存中不再使用的不必要的、无用的对象,使其可用于更多的内存分配。CMS(Concurrent Mark …

    编程 2025-01-21
  • 这种php整站源码如何安装(php开源建站系统)

    本文目录一览: 1、如何安装运行PHP网站 2、在网上下载的php网站源码,如何安装!求详细的教程! 3、怎么才能安装从别人那下载的php整站源码? 能详细点说吗? 如何安装运行P…

    编程 2025-01-13
  • php企业网站cms,php二次开发框架

    本文目录一览: 1、PHP四大CMS系统都适合做什么样的网站 2、最值得推荐的开源 PHP CMS 系统有哪些 3、请问PHP中的CMS是什么意思? 4、用PHPCMS做网站的详细…

    编程 2025-01-11
  • cms任意php代码执行漏洞,cms漏洞是什么意思

    本文目录一览: 1、如何解决织梦cms最新版本5.7漏洞被挂马的方法 2、代码注入漏洞 为什么会出现代码注入漏洞? 3、网上有兄弟说PHP又有漏洞了.现在是5.2.17p1还用升级…

    编程 2025-01-03
  • 海达php建站系统,php智能建站系统

    本文目录一览: 1、推荐一款最好用用的开源免费企业建站系统,PHP+MySQL 2、cms建站系统哪个最好?最好是php的cms内容管理系统 3、有哪些免费的建站系统好用?? 4、…

    编程 2025-01-01
  • cms采集json(cms采集器)

    本文目录一览: 1、phpcms网站建设中采集的方法,怎么样做采集 2、织梦cms如何对接百度熊掌号并添加JSON 3、织梦CMS 怎么样可以调用出 最新发布文章的10个文章的标题…

    编程 2025-01-01
  • 帝国cms有什么版本的php(帝国cms80版)

    本文目录一览: 1、帝国cms是什么程序??? 2、帝国cms支持php7.3吗? 3、帝国cms现在还有人用吗 4、帝国7.2支持的php版本是多少?支持php5.5或5.6吗?…

    编程 2024-12-31

发表回复

登录后才能评论