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/zh-tw/n/138454.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
NFBB的頭像NFBB
上一篇 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

發表回復

登錄後才能評論